
    9iB                         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	  SSK
Jr  SSKJr  SS	KJrJrJrJrJr  SS
KJrJr  SSKJrJrJrJrJrJr  SSKJr  SSK J!r!J"r"J#r#   " S S\RH                  5      r%g)    N)tensor_tree_map   )residue_constants   )gen_msa_attn_maskgen_tri_attn_mask)AuxiliaryHeads)residual)ExtraMSAEmbedderInputEmbedderRecyclingEmbedderTemplateAngleEmbedderTemplatePairEmbedder)EvoformerStackExtraMSAStack)atom14_to_atom37build_extra_msa_featbuild_template_angle_featbuild_template_pair_featbuild_template_pair_feat_v2pseudo_beta_fn)StructureModule)TemplatePairStackTemplatePointwiseAttentionTemplateProjectionc                      ^  \ rS rSrU 4S jrS rU 4S jrU 4S jrS rS r	S r
S	 rS
 rS rS r SS jrS rSrU =r$ )	AlphaFold   c                   > [         [        U ]  5         UR                  U l        UR                  nUR
                  nUR                  n[        S0 US   DSUR                  0D6U l	        [        S0 US   D6U l        UR
                  R                  (       a:  [        S0 US   D6U l        [        S0 US   D6U l        [#        S0 US   D6U l        OS U l        US   R                  U l        U R&                  (       a  [)        S0 US   D6U l        O[-        S0 US   D6U l        [1        S0 US   D6U l        [5        S0 US	   D6U l        [9        S0 US
   D6U l        [=        S0 US   D6U l        [A        US   5      U l!        Xl"        [F        RH                  U l%        U R                  RL                  U l&        U R                  RN                  (       a  U RO                  5         g g )Ninput_embedderuse_chain_relativerecycling_embeddertemplate_angle_embeddertemplate_pair_embeddertemplate_pair_stacktemplate_pointwise_attentionextra_msa_embedderextra_msa_stackevoformer_stackstructure_moduleheads )(superr   __init__globalsmodeltemplate	extra_msar   is_multimerr    r   r"   enabledr   r#   r   r$   r   r%   #enable_template_pointwise_attentionr   template_pointwise_attr   template_projr   r'   r   r(   r   	evoformerr   r*   r	   	aux_headsconfigtorchfloatdtypeinfalphafold_original_mode)selfr:   template_configextra_msa_config	__class__s       s/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/science/unifold/modules/alphafold.pyr.   AlphaFold.__init__   s   i')~~ //!+++ 
%&
%11
 #4 #.)*#.??""+@ ,@!";<,@D(*> +?!":;+?D''8 (<!"78(<D$ (,D$3B*4,,3G 	033*D +E!"@A+ED' "4 "E!"@A"ED"2 #834#8,  501 5'F&1B*CF / O&9K2L O'w:[[
<<##<<//((* 0    c                     U R                   R                  5       U l         U R                  R                  5       U l        g )N)r    r<   r"   )r@   s    rD   __make_input_float__AlphaFold.__make_input_float__H   s0    "11779"&"9"9"?"?"ArF   c                    > [         TU ]  5         [        U SS5      (       d  U R                  5         [        R                  U l        U $ N	inferenceF)r-   halfgetattrrH   r;   r=   r@   rC   s    rD   rM   AlphaFold.halfL   s7    k511%%'ZZ
rF   c                    > [         TU ]  5         [        U SS5      (       d  U R                  5         [        R                  U l        U $ rK   )r-   bfloat16rN   rH   r;   r=   rO   s    rD   rR   AlphaFold.bfloat16S   s9    k511%%'^^
rF   c                 ,    S nU R                  U5        g )Nc                     [        U S5      (       a  U R                  5         [        U S5      (       a  [        R                  " 5       U l        g g )Napply_alphafold_original_modeact)hasattrrV   nnReLUrW   modules    rD   set_alphafold_original_modeFAlphaFold.alphafold_original_mode.<locals>.set_alphafold_original_mode\   s;    v>??446vu%%WWY
 &rF   apply)r@   r]   s     rD   r?   !AlphaFold.alphafold_original_modeZ   s    	' 	

./rF   c                 ,    S nU R                  U5        g )Nc                     [        U SS5        g )NrL   T)setattrr[   s    rD   set_inference_mode4AlphaFold.inference_mode.<locals>.set_inference_modef   s    FK.rF   r_   )r@   re   s     rD   inference_modeAlphaFold.inference_moded   s    	/ 	

%&rF   c                     U HH  nX   R                   U R                   :w  d  M!  SU;   d  M)  X   R                  U R                   5      X'   MJ     U$ )Nmask)r=   type)r@   batchkeys      rD   __convert_input_dtype__!AlphaFold.__convert_input_dtype__k   sC    Cz4::-&C-"Z__TZZ8
  rF   c                    U R                   R                  R                  R                  (       a  [	        U4U R                   R                  R
                  U R                   R                  R                  US.U R                   R                  R                  D6nUS   R                  S   n	[        U	5       V
Vs/ s H4  n
U R                  U Vs/ s H  nUSU
S S 2S S 2S S 24   PM     snU5      PM6     nn
nO[        U4U R                   R                  R
                  U R                   R                  R                  S.U R                   R                  R                  D6n[        R                  " XS9 Vs/ s H  nU R                  X5      PM     nnU R                  UUUUUU R                  R                  U R                  R                   U R"                  (       + S9nU$ s  snf s  snn
f s  snf )N)r>   epsmultichain_mask_2dr   .)r>   rq   dim)tri_start_attn_masktri_end_attn_mask	templ_dim
chunk_size
block_sizereturn_mean)r:   r1   r$   
v2_featurer   r>   rq   	distogramshaperanger   r;   unbindr%   r/   ry   rz   r5   )r@   rl   z	pair_maskrv   rw   rx   rr   tnum_templatetixsingle_templatess                rD   embed_templates_pair_core#AlphaFold.embed_templates_pair_corer   s    ;;66AA+KK((,,KK((,,#5	
 ++&&00A Q4::b>L  -  .B ++67-967 ./sB1a/?-@67-9:;=-    )KK((,,KK((,, ++&&00	A a7 7A ++A17   
 $$ 3/||..||.. DDD % 	
 5-9  s   :G)G$)G)8G/$G)c           	        ^ ^^^^^^^^ T R                   R                  R                  R                  (       a3  SU;   a-  US   SS S 2S 4   US   SS S S 24   :H  mTR	                  S5      mOS mT R
                  (       d  T R                  (       a  T R                  UTTTTTT5      nT R                  (       ai  T R                  UTUS   T R                  R                  S9n[        R                  " US   SSS9S:  nUS	   R                  UR                  5      nXx-  nU$ T R                  UT5      n U$ US
   R                   n	[#        U	5      S:X  a  SOSmUS
   R                   T   n
U
S::  a  S nOtUR%                  5        VVs0 s H  u  pUR'                  S5      (       d  M  X_M!     snnmUUUU UUUUU4	S jnU" S5      n[)        SU
5       H  nX}" U5      -  nM     Xz-  nT R                  UT5      nU$ s  snnf )Nasym_id.r   template_mask)r   ry   T)ru   keepdims).NNtemplate_aatype   r   	template_c           	      ^   >	^  UU 4S jn[        UT	5      nTR                  UTTTT
TT5      nU$ )Nc                    > U R                    Vs/ s H  n[        S 5      PM     nn[        TTS-   5      UT'   X   $ s  snf )Nr   )r~   slice)r   _sbatch_templ_dimis      rD   slice_template_tensorYAlphaFold.embed_templates_pair.<locals>.embed_one_template.<locals>.slice_template_tensor   s?    23'':'QU4[':-21a!e_/* t ;s   =)r   r   )r   r   template_featsr   r   rr   r   r@   rx   template_batchrw   rv   r   s   `   rD   embed_one_template:AlphaFold.embed_templates_pair.<locals>.embed_one_template   sF    $
 &5-&&N 66&96I)96HJA HrF   )r:   r1   r$   r|   	unsqueezetrainingr5   r   r6   r/   ry   r;   sumrk   r=   r7   r~   lenitems
startswithr   )r@   rl   r   r   rv   rw   rx   r   t_masktemplate_aatype_shapen_templkvr   r   r   rr   r   s   ` `````        @@@rD   embed_templates_pairAlphaFold.embed_templates_pair   s)   ;;66AAiSXFXi a.%	2B3CGDK 3L L  "4!=!=a!@!%==DDD..ua/B/@)/ACA 77//"'"8#||66	 0  /*TCEFG055agg>N K &&q!,J G %**;$<$B$B!#&'<#=#BaO-.44_EG!| !&" -k1J AD -"
   'q)q'*A+A..A +""1a(A7"s   G;&G;c                     [        UU R                  R                  R                  R                  S9u  p#U R                  U5      nXC4$ )N)r|   )r   r:   r1   r$   r|   r#   )r@   rl   template_angle_feattemplate_angle_maskr   s        rD   embed_templates_angleAlphaFold.embed_templates_angle   sI    3L{{++BBMM4O0 (()<=%%rF   c                    US   R                   S S nUS   R                   S   nUS   nUS   USS S S 24   -  nUS   n	U R                  US   US   5      u  pUc5  U
R                  / UQUPU R                  R                  R                  P7SS	9nUc7  UR                  / UQUPUPU R                  R                  R
                  P7SS	9nUc'  UR                  / UQUP[        R                  PS
P7SS	9n[        US   US 5      nXR                  R                  U5      -  nU R                  UU5      u  pU
SSS S 2S S 24==   U-  ss'   X-  nXR                  R                  US   R                  5       UR                  SS 5      UR                  SS 5      UR                  SS 5      UR                  SS 5      5      -  nU
R                  U R                  5      n
UR                  U R                  5      n[!        XR"                  5      u  pU R                  R$                  R&                  (       aI  US   n[(        R*                  " U5      (       a)  [-        UU R/                  UUUUUSS9U R0                  5      nU R                  R2                  R&                  (       au  U R5                  [7        U5      5      n[9        US   U R"                  SS9nU R;                  UUUS   U R<                  R>                  U R<                  R@                  UUS UUS9
nU R                  R$                  RB                  (       aE  U RE                  U5      u  nn[(        RF                  " U
U/SS9n
[(        RF                  " US   U/SS9n	[9        U	U R"                  S9u  nnU RI                  U
UU	UUUUUU R<                  R>                  U R<                  R@                  S9
u  pnXUXU4$ )Ntarget_featseq_mask).N.msa_maskmsa_featF)requires_gradr   aatyper   residue_indexsym_idr   	entity_idnum_symr   rs   )rx   extra_msa_mask)r>   gen_col_mask)r   ry   rz   r   msa_row_attn_maskmsa_col_attn_maskrv   rw   rt   )r>   )r   r   r   r   rv   rw   ry   rz   )%r~   r    	new_zerosr:   d_msad_pairr   atom_type_numr   r"   
recyle_pos
relpos_emblonggetrk   r=   r   r>   r1   r4   r;   anyr
   r   r   r2   r'   r   r   r(   r/   ry   rz   embed_anglesr   catr8   )r@   featsm_1_prevz_prevx_prev
batch_dimsnr   r   r   mr   m_1_prev_emb
z_prev_embrv   rw   r   aextra_msa_row_masktemplate_1d_feattemplate_1d_maskmsa_row_maskmsa_col_maskr   s                           rD   iteration_evoformerAlphaFold.iteration_evoformer   s   =)//4
- &&r*$Y'(3a<*@@	$""- *

 {{B*BaB!;!;!A!AB# # H >[[F*FaFFDKK$>$>$E$EF# ! F >[[D*DaD!2!@!@D!D# ! F  h>	$$//77#'#:#:$
 
 	
#q!Q,<'		  ++/"'')IIh%IIi&IIk4(IIi&
 	
 FF4::FF4::1Bxx2!. ;;''!/2Myy''--!+)"$ .  MM ;;  ((''(<U(CDA!2&'HH""
 $$/0<<22<<22#"4"&$7"3 % A ;;,,151K1K2..		1./R8Ayy%
"35E!FBOH%6&
"l
 ..** 3/||..||.. ! 
a Q
::rF   c                   ^ Su  pUS   R                   S   n
US:  d   e[        U5       H>  nXW-  U-   mU4S jn[        X5      nU R                  XX45      u  pnnnnX-  nU	U-  n	AAM@     US:  a  U[	        U5      -  nU	[	        U5      -  n	0 nWSS U
2S S 2S S 24   US'   UUS'   U	US	'   [        U S
S5      (       dU  XeS-   :X  aM  UnUSSS S 2S S 24   WR                  5       -
  USSS S 2S S 24'   UWR                  5       -
  nUUS'   UUS'   WUS'   U R                  U	UWS   US   S9US'   [        US   S   U5      US'   US   US'   US   S   S   US'   [        U S
S5      (       d?  USSS S 2S S 24   R	                  5       nUR	                  5       nUS   R	                  5       nOUSSS S 2S S 24   nUnUS   nUX#U4$ )N)r   r   r   r   r   c                 F   > U [        U R                  S   S-
  T5      S4   $ )Nr   r   .)minr~   )r   idxs    rD   fetch_cur_batchGAlphaFold.iteration_evoformer_structure_module.<locals>.fetch_cur_batche  s&    QWWQZ!^S13677rF   .msapairsinglerL   Fr   	delta_msa
delta_pairmsa_norm_maskr   r   )rj   sm	positionsfinal_atom_positionsatom37_atom_existsfinal_atom_maskframesr   pred_frame_tensor)	r~   r   r   r   r<   rN   detachr*   r   )r@   rl   r   r   r   cycle_nonum_recyclingnum_ensemblesr   r   n_seqensemble_nor   r   r   z0s0r   r   r   outputsr   r   r   s                          @rD   $iteration_evoformer_structure_module.AlphaFold.iteration_evoformer_structure_moduleV  st    j!''+!!! /K*[8C8 $O;E<@<T<T=19A2xzGAGAB 0 1}%%A}%%A31,- k $1l$CI!*3+,a,3 "46B6I6I6K"L cA  Z..00J#,GK $.GL!'/GO$--(Oz"	 . 
 +;DM+&+/&'%*+?%@!"'.t}X'>r'B#$ k511aA,,.HWWYF34::<FaAHF34F&00rF   c                    UR                  SS 5      nUR                  SS 5      nUR                  SS 5      n[        R                  " 5       n[        US   5      S-   n[        US   R                  S   5      U-  nU R
                  (       a  US:X  d   eU R                  U5      n[        U5       HV  nXS-
  :H  n	[        R                  " U=(       a    U	5         U R                  UUUUUUUS9u  n
nnnS S S 5        U	(       a  MU  A
MX     S	U;   a  US	   S
   W
S	'   W
R                  U R                  U
5      5        U
$ ! , (       d  f       NO= f)Nr   r   r   num_recycling_itersr   r   r   )r   r   r   r   )r   .)r   r;   is_grad_enabledintr~   r   rn   r   set_grad_enabledr   updater9   )r@   rl   r   r   r   r   	num_itersr   r   is_final_iterr   s              rD   forwardAlphaFold.forward  sV   99Z.8T*8T*//13459	E*-33A679D== A%%% ,,U3i(H$Q7M''(IMJ ==%"+"/ >  K !=% )( !&y!1&!9GIt~~g./+ KJs   D==
E	)r9   r:   r=   r5   r8   r'   r(   r/   r>   r    r"   r*   r#   r$   r%   r6   r7   )r   )__name__
__module____qualname____firstlineno__r.   rH   rM   rR   r?   rg   rn   r   r   r   r   r   r  __static_attributes____classcell__)rC   s   @rD   r   r      sW    ,+\B0''R@D&p;r <=C1J' 'rF   r   )&r;   torch.nnrY   unicore.utilsr   datar   
attentionsr   r   auxillary_headsr	   commonr
   	embeddersr   r   r   r   r   r8   r   r   featurizationr   r   r   r   r   r   r*   r   r1   r   r   r   Moduler   r,   rF   rD   <module>r     sX      ) $ < + E E 4I I .+ +j		 jrF   