
    9iC"                     &   S SK JrJr  S SKrS SKJr  S SKJr  S SKJ	r	  SSK
JrJrJr   " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      rg)    )OptionalTupleN)	LayerNorm)one_hot   )LinearSimpleModuleListresidualc                     ^  \ rS rSr  SS\S\S\S\S\S\S\\   4U 4S	 jjjr   SS
\R                  S\\R                     S\\R                     S\\R                     4S jjr
    SS
\R                  S\\R                     S\\R                     S\\R                     S\\R                     4
S jjrS\R                  S\R                  S\\R                  \R                  4   4S jrSrU =r$ )InputEmbedder   tf_dimmsa_dimd_paird_msarelpos_kuse_chain_relativemax_relative_chainc                   > [         [        U ]  5         Xl        X l        X0l        X@l        [        X5      U l        [        X5      U l	        [        X5      U l
        [        X$5      U l        XPl        X`l        Xpl        U R                  (       d  SU R                  -  S-   U l        OGSU R                  -  S-   U l        U =R                  S-  sl        U =R                  SU-  S-   -  sl        [        U R                  U5      U l        g )N   r   )superr   __init__r   r   r   r   r   linear_tf_z_ilinear_tf_z_jlinear_tf_mlinear_msa_mr   r   r   num_binslinear_relpos)
selfr   r   r   r   r   r   r   kwargs	__class__s
            s/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/science/unifold/modules/embedders.pyr   InputEmbedder.__init__   s     	mT+-
#F3#F3!&0"72 !"4"4&&-1DM-1DMMMQMMMQ!33a77M#DMM6:    res_idsym_idasym_id	entity_idc                    U R                   nUS   USS S S 24   -
  nUR                  U* U5      U-   nU R                  (       d  U$ USS S 2S 4   USS S S 24   :H  nSU-  S-   Xg) '   USS S 2S 4   USS S S 24   :H  nUR                  UR                  5      S   n	USS S 2S 4   USS S S 24   -
  n
U R
                  n[        R                  " X-   SSU-  S9nSU-  S-   X) '   XiU4$ )N).N.r   r   r   )minmax)r   clipr   typedtyper   torchclamp)r   r%   r&   r'   r(   max_rel_resrpasym_id_sameentity_id_samerp_entity_id
rel_sym_idmax_rel_chainclipped_rel_chains                r"   _relpos_indicesInputEmbedder._relpos_indices5   s%    mmIT1!55WWk\;/+=&&I"34<0GCqL4IIL !K! 3B}&sAt|4	#tQ,8OON)..rxx8CLQ-sD!|0DDJ 33M %*q=7H!J 23]1BQ1Fo.%666r$   num_symc                    U R                   R                  R                  nU R                  (       d2  U R	                  US9nU R                  [        XpR                  US95      $ U R	                  UUUUS9u  pxn	[        USU R                  -  S-   US9nUR                  U5      n[        U	SU R                  -  S-   US9n	U R                  [        R                  " XxU	/SS95      $ )N)r%   )num_classesr.   )r%   r&   r'   r(   r   dim)r   weightr.   r   r9   r   r   r   r-   r   r/   cat)
r   r%   r&   r'   r(   r;   r.   r2   r5   rp_rel_chains
             r"   
relpos_embInputEmbedder.relpos_embR   s     ""))//&&%%V%4B%%UCE E .2-A-A#	 .B .%*Bl
 !dmm*;a*?NB',,U3L"!8!881<L %%		2\:CE Er$   tfmsareturnc                 N   U R                   S:X  a	  USSS 24   nUR                  U R                  R                  R                  5      nUR                  U R                  R                  R                  5      nUR
                  S   nU R                  U5      nU R                  U5      R                  S5      R                  S[        UR
                  S S 5      -  USS4-   5      nXE-  nU R                  U5      nU R                  U5      nUSS S S 24   USS S S 2S S 24   -   nXH4$ )N   .r   )r>   r>   )r   r-   r   rA   r.   shaper   r   	unsqueezeexpandlenr   )	r   rF   rG   n_clustmsa_embtf_mtf_emb_itf_emb_jpair_embs	            r"   forwardInputEmbedder.forwardo   s!    ;;"CGBWWT''..445hht))00667))B-##C( R **2.55#bhhsm,,2r"#% 	 	%%b)%%b)CqL)HS$1_,EE  r$   )r   r   r   r   r   r   r   r   r   r   r   r   r   )FN)NNN)NNNN)__name__
__module____qualname____firstlineno__intboolr   r   r/   Tensorr9   rD   r   rW   __static_attributes____classcell__r!   s   @r"   r   r      se    $),0#;#; #; 	#;
 #; #; !#; %SM#; #;P *.*.,077 &7 %,,'	7
 ELL)7@ *.*.,0*.EE &E %,,'	E
 ELL)E %,,'E:!LL! \\! 
u||U\\)	*	! !r$   r   c                     ^  \ rS rSr SS\S\S\S\S\S\4U 4S jjjrS	\R                  S
\R                  S\	\R                  \R                  4   4S jr
S\R                  S\	\R                  \R                  4   4S jrSrU =r$ )RecyclingEmbedder   r   r   min_binmax_binr   infc                 2  > [         [        U ]  5         Xl        X l        X0l        X@l        XPl        X`l        S U l	        [        U R                  U R                  5      U l        [        U R                  5      U l        [        U R                  5      U l        g N)r   rd   r   r   r   rf   rg   r   rh   squared_binsr   linearr   layer_norm_mlayer_norm_z)	r   r   r   rf   rg   r   rh   r    r!   s	           r"   r   RecyclingEmbedder.__init__   sq     	/1
  T]]DKK8%djj1%dkk2r$   mzrH   c                 L    U R                  U5      nU R                  U5      nX44$ rj   )rm   rn   )r   rp   rq   m_updatez_updates        r"   rW   RecyclingEmbedder.forward   s-     $$Q'$$Q'!!r$   xc           	         U R                   cv  [        R                  " U R                  U R                  U R
                  U R                  (       a  [        R                  OUR                  UR                  SS9nUS-  U l         [        R                  " U R                   SS  U R                   R                  U R                  /5      /SS9nU R                  (       a  UR                  5       n[        R                  " USS S S 24   USS S S 2S S 24   -
  S-  SSS	9nX@R                   :  XC:  -  R                  U R                  R                   R                  5      nU R                  U5      nU$ )
NF)r.   devicerequires_gradr   r   r>   r?   .T)r@   keepdims)rk   r/   linspacerf   rg   r   trainingfloatr.   rx   rB   
new_tensorrh   sumr-   rl   rA   )r   rv   binsupperds        r"   
recyle_posRecyclingEmbedder.recyle_pos   s0   
 $>>%)]]ekkxx#D !%aD		qr"))488*57 ==	AIIsD!|_qdAq11A52N###i$t{{11778 	
KKNr$   )
r   r   rh   rm   rn   rl   rg   rf   r   rk   )g    חA)rY   rZ   r[   r\   r]   r}   r   r/   r_   r   rW   r   r`   ra   rb   s   @r"   rd   rd      s     33 3 	3
 3 3 3 32	"<<	" <<	" 
u||U\\)	*		"<< 
u||U\\)	* r$   rd   c                   n   ^  \ rS rSrS\S\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	TemplateAngleEmbedder   d_ind_outc                   > [         [        U ]  5         X l        Xl        [        U R                  U R                  SS9U l        [        R                  " 5       U l	        [        U R                  U R                  SS9U l
        g Nrelu)init)r   r   r   r   r   r   linear_1nnGELUactlinear_2r   r   r   r    r!   s       r"   r   TemplateAngleEmbedder.__init__   sZ     	#T35
	tyy$**6B779tzz4::FCr$   rv   rH   c                     U R                  UR                  U R                   R                  R                  5      5      nU R	                  U5      nU R                  U5      nU$ rj   )r   r-   rA   r.   r   r   r   rv   s     r"   rW   TemplateAngleEmbedder.forward   sI    MM!&&!5!5!;!;<=HHQKMM!r$   )r   r   r   r   r   rY   rZ   r[   r\   r]   r   r/   r_   rW   r`   ra   rb   s   @r"   r   r      s=    DD D %,,  r$   r   c                   h   ^  \ rS rSr SS\S\S\S\S\4
U 4S jjjrS\R                  4S	 jr
S
rU =r$ )TemplatePairEmbedder   r   v2_d_inr   r   
v2_featurec           	        > [         [        U ]  5         X0l        XPl        U R                  (       a  X l        [        5       U l        U R
                   H0  nU R                  R                  [        XR                  SS95        M2     [        U5      U l        [        X@R                  SS9U l        g Xl        [        U R
                  U R                  SS9U l        g r   )r   r   r   r   r   r   r	   rl   appendr   r   z_layer_normz_linear)r   r   r   r   r   r   r    r!   s          r"   r   TemplatePairEmbedder.__init__   s     	"D24
$??I*,DK		""6$

#HI " )& 1D"6::FCDMI DJJVDDKr$   rH   c           	      B   U R                   (       d@  U R                  UR                  U R                  R                  R                  5      5      nU$ U R
                  R                  R                  nU R                  S   " US   R                  U5      5      n[        USS  5       H@  u  pV[        X@R                  US-      " UR                  U5      5      U R                  5      nMB     [        X@R                  U R                  U5      5      U R                  5      nU$ )Nr   r   )
r   rl   r-   rA   r.   r   	enumerater
   r|   r   )r   rv   rq   r.   tiss          r"   rW   TemplatePairEmbedder.forward  s    
 AFF4;;#5#5#;#;<=AHMM((..EAqtyy/0A!!AB%(QAE 2166%= A!]], ) MM$*;*;A*>?OAHr$   )r   r   rl   r   r   r   )F)rY   rZ   r[   r\   r]   listr^   r   r/   r_   rW   r`   ra   rb   s   @r"   r   r      sa     !EE E 	E
 E E E0 
	 r$   r   c                   n   ^  \ rS rSrS\S\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	ExtraMSAEmbedderi  r   r   c                    > [         [        U ]  5         Xl        X l        [        U R                  U R                  5      U l        g rj   )r   r   r   r   r   r   rl   r   s       r"   r   ExtraMSAEmbedder.__init__  s3     	.0	
TYY

3r$   rv   rH   c                 ~    U R                  UR                  U R                   R                  R                  5      5      $ rj   )rl   r-   rA   r.   r   s     r"   rW   ExtraMSAEmbedder.forward!  s*    {{166$++"4"4":":;<<r$   )r   r   rl   r   rb   s   @r"   r   r     s:    
4
4 
4= =%,, = =r$   r   )typingr   r   r/   torch.nnr   unicore.modulesr   unicore.utilsr   commonr   r	   r
   Moduler   rd   r   r   r    r$   r"   <module>r      ss    #   % ! 6 6{!BII {!|@		 @FBII 0)299 )X=ryy =r$   