
    9i+&                     `   S SK r S SKJr  S SKJrJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJrJrJr  SSKJrJrJrJr  SSKJrJrJrJrJrJrJr  SS	KJr  SS
KJ r J!r!   " S S\	RD                  5      r# " S S\	RD                  5      r$ " S S\	RD                  5      r% " S S\	RD                  5      r&g)    N)partial)ListOptionalTuple)	LayerNorm)checkpoint_sequentialpermute_final_dimstensor_tree_map   )	AttentionTriangleAttentionEndingTriangleAttentionStartinggen_attn_mask)LinearSimpleModuleList
Transitionbias_dropout_residualchunk_layerresidualtri_mul_residual)build_template_pair_feat_v2)TriangleMultiplicationIncomingTriangleMultiplicationOutgoingc                     ^  \ rS rSrU 4S jrS\R                  S\R                  S\R                  S\S\R                  4
S jr  SS\R                  S\R                  S	\	\R                     S\	\   S\R                  4
S
 jjr
SrU =r$ )TemplatePointwiseAttention   c           	      \   > [         [        U ]  5         XPl        [	        UUUUUSS9U l        g )NF)gating)superr   __init__infr   mha)self
d_templated_paird_hid	num_headsr!   kwargs	__class__s          r/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/science/unifold/modules/template.pyr    #TemplatePointwiseAttention.__init__   s4    ($8:
    ztmask
chunk_sizereturnc           
      h    UUUUS.n[        U R                  UU[        UR                  S S 5      S9$ )N)qkvr/   )r0   num_batch_dims)r   r"   lenshape)r#   r-   r.   r/   r0   
mha_inputss         r*   _chunk!TemplatePointwiseAttention._chunk(   sE     	

 HH!qwws|,	
 	
r,   template_maskc                 2   Uc  UR                  UR                  S S 5      n[        X0R                  * 5      SS S S S S S 24   nUR	                  S5      n[        US5      nUb  U R                  X!XT5      nOU R                  X!XS9nUR                  S5      nU$ )N.r6   )r      r      )r/   )	new_onesr9   r   r!   	unsqueezer	   r;   r"   squeeze)r#   r.   r-   r=   r0   r/   s         r*   forward"TemplatePointwiseAttention.forward<   s      JJqwws|4M]XXI6sD$7;Q8? @KKOq,/!A$3Aq,AIIbMr,   )r!   r"   NN)__name__
__module____qualname____firstlineno__r    torchTensorintr;   r   rE   __static_attributes____classcell__r)   s   @r*   r   r      s    

<<
 <<
 ll	

 
 

0 15$(<< <<  -	
 SM 
 r,   r   c                   J   ^  \ rS rSrU 4S jrS\R                  4S jrSrU =r	$ )TemplateProjectionV   c                    > [         [        U ]  5         X l        [        R
                  " 5       U l        [        XSS9U l        g )Nrelu)init)	r   rS   r    r%   nnReLUactr   output_linear)r#   r$   r%   r(   r)   s       r*   r    TemplateProjection.__init__X   s2     $02779#JVDr,   r1   c                     UcD  UR                   nU R                  US'   [        R                  " X2R                  UR
                  S9nU R                  U5      nU R                  U5      nU$ )N)dtypedevice)r9   r%   rL   zerosr_   r`   rZ   r[   )r#   r.   r-   r9   z_ts        r*   rE   TemplateProjection.forward_   sW    9GGEE"IEBAHHQK  #
r,   )rZ   r%   r[   )
rH   rI   rJ   rK   r    rL   rM   rE   rO   rP   rQ   s   @r*   rS   rS   V   s    Eu||  r,   rS   c                      ^  \ rS rSrS\S\S\S\S\S\S\S	\4U 4S
 jjr  SS\R                  S\R                  S\R                  S\R                  S\
\   S\
\   4S jjrSrU =r$ )TemplatePairStackBlockj   r$   d_hid_tri_attd_hid_tri_mulr'   pair_transition_ndropout_ratetri_attn_firstr!   c	                   > [         [        U ]  5         [        UUU5      U l        [        UUU5      U l        [        UU5      U l        [        UU5      U l
        [        UU5      U l        Xpl        X`l        SU l        SU l        g )Nr?   r6   )r   re   r    r   tri_att_startr   tri_att_endr   tri_mul_outr   
tri_mul_inr   pair_transitionrk   dropoutrow_dropout_share_dimcol_dropout_share_dim)r#   r$   rg   rh   r'   ri   rj   rk   r!   r(   r)   s             r*   r    TemplatePairStackBlock.__init__l   s     	$d466

 3
 :
 9

  * 
 -#%'"%'"r,   sr/   tri_start_attn_masktri_end_attn_maskr0   
block_sizec           
         U R                   (       Ga  [        U R                  UU R                  XUS9U R                  U R                  U R
                  5      n[        U R                  UU R                  XUS9U R                  U R                  U R
                  5      n[        U R                  UU R                  XUS9U R                  U R                  U R
                  US9n[        U R                  UU R                  XUS9U R                  U R                  U R
                  US9nGO[        U R                  UU R                  XUS9U R                  U R                  U R
                  US9n[        U R                  UU R                  XUS9U R                  U R                  U R
                  US9n[        U R                  UU R                  XUS9U R                  U R                  U R
                  5      n[        U R                  UU R                  XUS9U R                  U R                  U R
                  5      n[        XR                  UUS9U R
                  5      nU$ )N)	attn_maskr0   )r/   ry   )ry   )r0   )rk   r   rm   rs   rr   trainingrn   rt   r   ro   rp   r   rq   )r#   rv   r/   rw   rx   r0   ry   s          r*   rE   TemplatePairStackBlock.forward   sl    %"""" # M**A &    z ! K**A !    * E**%A !D**%A !    * E**%A !D**%A &"""" # M**A &    z ! K**A Q,,! - 
 == r,   )	rt   rr   rq   rs   rn   rm   rk   rp   ro   rG   )rH   rI   rJ   rK   rN   floatboolr    rL   rM   r   rE   rO   rP   rQ   s   @r*   re   re   j   s    )()( )( 	)(
 )( )( )( )( )(b %)$(\<<\ ll\ #\\	\
 !<<\ SM\ SM\ \r,   re   c                      ^  \ rS rSr SU 4S jjrS\\R                     S\R                  S\R                  S\R                  S\	S\	S	\	S
\
4S jrSrU =r$ )TemplatePairStack   c
                    > [         [        U ]  5         [        5       U l        [        U5       H,  nU R                  R                  [        UUUUUUU	US95        M.     [        U5      U l	        g )N)r$   rg   rh   r'   ri   rj   r!   rk   )
r   r   r    r   blocksrangeappendre   r   
layer_norm)r#   r$   rg   rh   
num_blocksr'   ri   rj   rk   r!   r(   _r)   s               r*   r    TemplatePairStack.__init__   sl     	/1&(z"AKK&)"/"/'&7!-#1	
 # $J/r,   single_templatesr/   rw   rx   	templ_dimr0   ry   return_meanc	                   ^ ^^^^^^ UUUU UUU4S jn	[        T5      n
U
S:  a  U	" S5      /nU(       a  T R                  US   5      n[        SU
5       HK  nU	" U5      nU(       a(  [        WT R                  U5      T R                  5      nM:  UR                  U5        MM     U(       a  U
S:  a  WU
-  nU$ S n U$ [        R                  " W Vs/ s H  oR                  U5      PM     snUS9nT R                  U5      nU$ s  snf )Nc                    > [        TR                   Vs/ s H  n[        UTT	TTTS9PM     snTU    4S9u  nU$ s  snf )N)r/   rw   rx   r0   ry   )	functionsinput)r   r   r   )
ibrv   ry   r0   r/   r#   r   rx   rw   s
      r*   one_template/TemplatePairStack.forward.<locals>.one_template#  sd    )  ${{	  +! !,?*;#-#-  +	 (*-EQ H	s   ;r   r   )dim)	r8   r   r   r   r|   r   rL   catrC   )r#   r   r/   rw   rx   r   r0   ry   r   r   n_templnew_single_templatesr.   r   rv   s   ````` ``       r*   rE   TemplatePairStack.forward  s    	 	  &'Q;$0O#4 OO$8$;<1g& O DOOA$6FA(//2 ' {W    		1EF1EAY'1EFA "A	 Gs   D)r   r   )g    eA)rH   rI   rJ   rK   r    r   rL   rM   tensorrN   r   rE   rO   rP   rQ   s   @r*   r   r      sz     0>3-3 ll3 #\\	3
 !<<3 3 3 3 3 3r,   r   )'math	functoolsr   typingr   r   r   rL   torch.nnrX   unicore.modulesr   unicore.utilsr   r	   r
   
attentionsr   r   r   r   commonr   r   r   r   r   r   r   featurizationr   triangle_multiplicationr   r   Moduler   rS   re   r    r,   r*   <module>r      s      ( (   %, ,C C' ' ' 7F; ;| (IRYY IXT		 Tr,   