
    9i)                        S SK Jr  S SKJrJrJrJrJrJr  S SK	r	S SK
Jr  S SKJs  Jr  S SKr	S SKJr  S SKJr   " S S\R(                  5      r " S S	\R*                  5      r " S
 S\R*                  5      rS r\	R2                  R4                  S\	R6                  S\	R6                  S\	R6                  S\	R6                  S\S\	R6                  4S j5       r\	R2                  R4                  S\	R6                  S\	R6                  S\	R6                  S\	R6                  4S j5       rS r\	R2                  R4                  S\	R6                  S\	R6                  S\	R6                  S\	R6                  S\	R6                  S\	R6                  S\S\	R6                  4S j5       r S r! " S S\RD                  5      r#S\S\\$\4   S\%S \%S\4
S! jr&g)"    )partial)AnyCallableDictIterableListOptionalN)	LayerNorm)tensor_tree_mapc            	       d   ^  \ rS rSr  SS\S\S\S\4U 4S jjjrSS jrS r	SS	 jr
S
 rSrU =r$ )Linear   d_ind_outbiasinitc                 0  > [         [        U ]  XUS9  X0l        U R                  (       a9  [        R
                  " 5          U R                  R                  S5        S S S 5        US:X  a  U R                  S5        g US:X  a  U R                  S5        g US:X  a  U R                  5         g US:X  a  U R                  U R                  5        g US	:X  a  U R                  5         g US
:X  a  U R                  S5        g [        S5      e! , (       d  f       N= f)N)r   r   default      ?relug       @glorotgatingnormalfinalFzInvalid init method.)superr   __init__use_biastorchno_gradr   fill__trunc_normal_init_glorot_uniform_init
_zero_init_normal_init
ValueError)selfr   r   r   r   	__class__s        p/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/science/unifold/modules/common.pyr   Linear.__init__   s     	fd$Tt$<==		" ! 9##C(V^##C(X%%'XOODMM*XW_OOE"344! !s    D
Dc                     SnU R                   R                  u  p4U[        SU5      -  nUS-  U-  n[        R                  R                  U R                   SUS9  g )Ng۶%?   g      ?        )meanstd)weightshapemaxnnr   trunc_normal_)r&   scaleTRUNCATED_NORMAL_STDDEV_FACTOR_fan_inr.   s         r(   r!   Linear._trunc_normal_init/   sU    )<&KK%%	Av&cz;;
dkk=    c                 T    [         R                  R                  U R                  SS9  g )Nr+   )gain)r2   r   xavier_uniform_r/   r&   s    r(   r"   Linear._glorot_uniform_init7   s    
!4r9   c                 :   [         R                  " 5          U R                  R                  S5        U(       a9  [         R                  " 5          U R                  R                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr,   r   )r   r   r/   r    r   )r&   r   s     r(   r#   Linear._zero_init:   sU    ]]_KKc"]]_IIOOC( % _ %_ _s#   8BA;*B;
B		B
Bc                 h    [         R                  R                  R                  U R                  SS9  g )Nlinear)nonlinearity)r   r2   r   kaiming_normal_r/   r=   s    r(   r$   Linear._normal_initA   s!    %%dkk%Ir9   )r   )Tr   )r   )T)__name__
__module____qualname____firstlineno__intboolstrr   r!   r"   r#   r$   __static_attributes____classcell__r'   s   @r(   r   r      sV     55 5 	5
 5 5<>5)J Jr9   r   c                      ^  \ rS rSrU 4S jrS r\R                  R                  S\R                  S\
S\R                  4S j5       r S
S\R                  S\\
   S\R                  4S jjrS	rU =r$ )
TransitionE   c                 Z  > [         [        U ]  5         Xl        X l        [        U R                  5      U l        [        U R                  U R                  U R                  -  SS9U l        [        R                  " 5       U l        [        U R                  U R                  -  USS9U l        g )Nr   r   r   )r   rQ   r   r   nr
   
layer_normr   linear_1r2   GELUactlinear_2)r&   r   rU   r'   s      r(   r   Transition.__init__G   su    j$(*	#DII.tyy$&&499*<6J779tvv		14gFr9   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ N)rV   rW   rY   rZ   )r&   xs     r(   _transitionTransition._transitionS   s>    OOAMM!HHQKMM!r9   r^   
chunk_sizereturnc           
      ^    [        U R                  SU0U[        UR                  S S 5      S9$ )Nr^   ra   num_batch_dims)chunk_layerr_   lenr0   r&   r^   ra   s      r(   _chunkTransition._chunkZ   s6     !H!qwws|,	
 	
r9   c                 P    Ub  U R                  X5      nU$ U R                  US9nU$ )N)r^   )rj   r_   ri   s      r(   forwardTransition.forwardg   s9     !A*A    1 %Ar9   )rY   r   rV   rW   rZ   rU   r]   )rF   rG   rH   rI   r   r_   r   jitignoreTensorrJ   rj   r	   rm   rM   rN   rO   s   @r(   rQ   rQ   E   s    
G YY

<<

 

 
	

 

 %)<< SM 
	 r9   rQ   c            	       *  ^  \ rS rSrSU 4S jjrS r\R                  R                  S\R                  S\R                  S\
S\R                  4S j5       rS	 r  SS
\R                  S\\R                     S\\
   S\R                  4S jjrSrU =r$ )OuterProductMeanu   c                   > [         [        U ]  5         Xl        X l        X0l        X@l        [        U5      U l        [        X5      U l
        [        X5      U l        [        US-  USS9U l        [        R                  " 5       U l        [        U R                  U R                  SS9U l        [        U R                  5      U l        g )N   r   rT   r   )r   rs   r   d_msad_paird_hidepsr
   rV   r   rW   rZ   
linear_outr2   rX   rY   linear_zlayer_norm_out)r&   rw   rx   ry   rz   r'   s        r(   r   OuterProductMean.__init__w   s    .0

#E*u,u, 6?779t{{DKKgF'4r9   c                     [         R                  " SX5      nUR                  UR                  S S S-   5      nU R	                  U5      nU$ )Nz...bac,...dae->...bdcerd   )r   einsumreshaper0   r{   )r&   abouters       r(   _opmOuterProductMean._opm   sD    5q<ekk#2.78&r9   r   r   ra   rb   c                    UR                  SUR                  SS  -   5      nUR                  SUR                  SS  -   5      n/ n[        X5       H6  u  pV[        [	        U R
                  US9SU0USS9nUR                  U5        M8     [        U5      S:X  a  US   R                  S5      nO[        R                  " USS9nUR                  UR                  S S UR                  SS  -   5      nU$ )	Nr   )r   r   r+   re   r   )dim)r   r0   ziprg   r   r   appendrh   	unsqueezer   stack)r&   r   r   ra   outa_primeb_primer   s           r(   rj   OuterProductMean._chunk   s     IIfqwwrs|+,IIfqwwrs|+, #A	G		W-g% 	E JJu !* s8q=F$$Q'EKK+EaggcrlU[[_<=r9   c                      S U l         S U l        g r]   )r|   r}   r=   s    r(   apply_alphafold_original_mode.OuterProductMean.apply_alphafold_original_mode   s    "r9   mmaskc                 ~   U R                  U5      nUR                  S5      nU R                  b  X"R                  S5      S-  -  nU R	                  U5      nU R                  U5      nU R                  (       a	  XB-  nXR-  nOXB-  nXR-  nUR                  SS5      nUR                  SS5      nUb  U R                  XEU5      nOU R                  XE5      n[        R                  " SX"5      nX`R                  U-   -  nU R                  b3  U R                  U5      nU R                  U5      nU R                  U5      nU$ )Nr   rd   g      r   z...abc,...adc->...bdc)rV   r   r}   sizerW   rZ   training	transposerj   r   r   r   rz   rY   r|   )r&   r   r   ra   r   r   znorms           r(   rm   OuterProductMean.forward   s     OOA~~b!*99R=$./DMM!MM!==AAIAIAKKBKKB!A*-A		!A||3T@	XX_*A##A&Aa Ar9   )rY   ry   rw   rx   rz   rV   r}   rW   rZ   r{   r|   )gMbP?)NN)rF   rG   rH   rI   r   r   r   ro   rp   rq   rJ   rj   r   r	   rm   rM   rN   rO   s   @r(   rs   rs   u   s    5  YY  #(<< ,# (,$(	#<<# u||$# SM	#
 
# #r9   rs   c                 $    U(       a  X-   $ X-  n U $ r]    )residualr^   r   s      r(   r   r      s    |r9   r^   r   r   dropmaskprobrb   c                 <    X-   [         R                  " X4SS9-  U-   $ NT)pr   )Fdropout)r^   r   r   r   r   s        r(   fused_bias_dropout_addr      s!     H		(TBBXMMr9   c                     X!U -   -  nU$ r]   r   )r^   r   r   s      r(    fused_bias_dropout_add_inferencer      s     qHOr9   c                    U R                  5       nU(       aV  [        UR                  5      nSXs'   [        R                  " 5          UR                  U5      nS S S 5        [        X&UWU5      $ [        X&U5      $ ! , (       d  f       N(= fNr+   )get_output_biaslistr0   r   r   new_onesr   r   )	moduler   r^   dropout_shared_dimr   r   r   r0   r   s	            r(   bias_dropout_residualr      sj    !!#DQWW$%!]]_::e$D %axtDD/BB	 _s   A::
Bgg_biasdropout_maskc                 p    [         R                  " X#-   5      X-   -  [        R                  " UUSS9-  U-   $ r   )r   sigmoidr   r   )r^   r   r   r   r   r   r   s          r(   fused_bias_gated_dropout_addr      sA     MM!*%2aii
7  		 r9   c           	         U(       ao  Uu  pxU R                  5       u  p[        UR                  5      nSX'   [        R                  " 5          UR                  U5      nS S S 5        [        UU	UU
UWU5      $ Uc8  Uu  pxU R                  5       u  pU[        R                  " X-   5      Xy-   -  -  nU$ X-  nU$ ! , (       d  f       N`= fr   )r   r   r0   r   r   r   r   r   )r   r   outputsr   r   r   
block_sizer^   r   r   r   r0   r   s                r(   tri_mul_residualr   	  s     --/QWW$%!]]_::e$D +
 	
 
	--/U]]1:.!(;< 	' _s   B88
Cc                       \ rS rSrS rSrg)SimpleModuleListi-  c                 X    [        [        U 5      5      S-   U S   R                  5       -   $ )Nz X ...
r   )rL   rh   __repr__r=   s    r(   r   SimpleModuleList.__repr__/  s'    3t9~
*T!W-=-=-???r9   r   N)rF   rG   rH   rI   r   rM   r   r9   r(   r   r   -  s    @r9   r   layerinputsra   rf   c                 "  ^^^^^^ [        U5      S:  d  [        S5      eU4S jmUR                  5        VVs0 s H  u  pEUc  M
  XE_M     nnnT" U5       Vs/ s H  ofS T PM	     nn[        [	        U6  Vs/ s H  n[        U5      PM     sn5      mSmT H  n	TU	-  mM
     TU-   S-
  U-  n
UU4S jn[        X5      nS n[        U
5       H  nX-  m[        US-   U-  T5      mUU4S jn[        X5      nU " S
0 UD6nUc  [        U4S jU5      n[        U5      nU[        L a  [	        UU5       H  u  nnUUTT& M     Mw  U[        R                  L a  UUTT& M  [        S5      e   U4S	 jn[        UU5      nU$ s  snnf s  snf s  snf )Nr   zMust provide at least one inputc                   > / n[        U 5      [        R                  L a  UR                  U R                  5        U$ [        U 5      [
        L a0  U R                  5        H  nUR                  T" U5      5        M     U$ [        U [        5      (       a"  U  H  nUR                  T" U5      5        M     U$ [        S5      e)NNot supported)typer   rq   r   r0   dictvaluesextend
isinstancer   r%   )inputshapesv_dict_get_shapess      r(   r   %chunk_layer.<locals>._dict_get_shapes=  s    ;%,,&MM%++&  %[D \\^.q12 $  x((.q12 
  _--r9   r+   c                    > U R                   " S/U R                  TS  Q76 n U R                  S   T:X  d  U R                  S   S:X  d   S5       eU $ )Nr   r   r+   z>batch dimension must be 1 or equal to the flat batch dimensionviewr0   )tflat_batch_dimrf   s    r(   _flat_inputs!chunk_layer.<locals>._flat_inputsW  sV    FF2101GGAJ.(AGGAJ!O	LK	L;r9   c                 >   > U R                   S   S:X  a  U SS $ U TT $ )Nr   r+   )r0   )r   	chunk_endchunk_starts    r(   select_chunk!chunk_layer.<locals>.select_chunke  s*    wwqzQ1vY//r9   c                 H   > U R                  T4U R                  SS  -   5      $ r   )	new_zerosr0   )r   r   s    r(   <lambda>chunk_layer.<locals>.<lambda>q  s     !++~&817712;&FGr9   r   c                 F   > U R                  TU R                  SS  -   5      $ r   r   )r   orig_batch_dimss    r(   r   chunk_layer.<locals>.reshape~  s!    vvo344r9   r   )rh   r%   itemstupler   r1   r   rangeminr   r   rq   )r   r   ra   rf   kr   r0   initial_dimssd
num_chunksr   flat_inputsr   ir   chunkesoutput_chunkout_typer^   yr   r   r   r   r   r   s      `                  @@@@@r(   rg   rg   3  s    K!O:;;  &||~?~tqdad~F?,<V,D,D5o~,D   S,-?@-?SV-?@AON!  :-1j@J ",7K
C:nQ*,n=		0 ",<'w';!GC %uC.1+,+i( /%)5CI&_--5 :5 '3
'CJo @ As   	FFF9F)'	functoolsr   typingr   r   r   r   r   r	   r   torch.nnr2   torch.nn.functional
functionalr   torch.utils.checkpointunicore.modulesr
   unicore.utilsr   r   ModulerQ   rs   r   ro   scriptrq   floatr   r   r   r   r   
ModuleListr   rL   rJ   rg   r   r9   r(   <module>r     s
    @ @      % )3JRYY 3Jl- -`Vryy Vr N||N
,,N llN ll	N
 N \\N N ||
,, ll \\	 
C ||
,, || LL	
 ll ,,  \\  !H@r}} @PPcNP P 	P
 	Pr9   