Ë
    ÛÓ^j£   ã                   óÌ  — d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ edej                  d	ej                  d
ddej                  fd„«       Zedej                  d	ej                  d
ej                  deej                  ej                  f   fd„«       Zd„ Zdej                  deeej                  f   dej                  fd„Zdeeej                  f   dej                  fd„Z	 	 	 d%deeej                  f   dej(                  j*                  dej(                  j*                  dededededej                  fd„Zdeeej                  f   dej                  fd„Zde	dej                  dej                  dej                  de	f
d„Zde	dej                  d ej                  d!ej                  d"ej                  d#ej                  dej                  fd$„Zy)&é    )ÚoverloadN)Únné   )Úresidue_constants)ÚRigidÚRotation)Úbatched_gatherÚaatypeÚall_atom_positionsÚall_atom_masksÚreturnc                  ó   — y ©N© ©r
   r   r   s      úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/esm/openfold_utils/feats.pyÚpseudo_beta_fnr      s   € Øruó    c                  ó   — y r   r   r   s      r   r   r      s   € ð ),r   c           	      óp  — | t         j                  d   k(  }t         j                  d   }t         j                  d   }t        j                   |d   j
                  g dt        |j                  «      z  ¢d‘­Ž |d|d d …f   |d|d d …f   «      }|�%t        j                  ||d|f   |d|f   «      }||fS |S )NÚGÚCAÚCB©.N)éÿÿÿÿé   .)ÚrcÚrestype_orderÚ
atom_orderÚtorchÚwhereÚexpandÚlenÚshape)r
   r   r   Úis_glyÚca_idxÚcb_idxÚpseudo_betaÚpseudo_beta_masks           r   r   r   %   sÎ   € Ø”r×'Ñ'¨Ñ,Ñ,€FÜ�]‰]˜4Ñ €FÜ�]‰]˜4Ñ €FÜ—+‘+Ø ˆˆyÑ× Ñ ÐA 5¬3¨v¯|©|Ó+<Ñ#<ÐA¸qÒAØ˜3 ª˜>Ñ*Ø˜3 ª˜>Ñ*ó€Kð Ð!Ü Ÿ;™;ØØ˜3 ˜;Ñ'Ø˜3 ˜;Ñ'ó
Ðð
 Ð,Ð,Ð,àÐr   Úatom14Úbatchc           
      ól   — t        | |d   dt        | j                  d d «      ¬«      }||d   d   z  }|S )NÚresidx_atom37_to_atom14éþÿÿÿ)ÚdimÚno_batch_dimsÚatom37_atom_existsr   )r	   r#   r$   )r*   r+   Úatom37_datas      r   Úatom14_to_atom37r3   :   sK   € Ü ØØÐ'Ñ(ØÜ˜&Ÿ,™, s¨Ð+Ó,ô	€Kð  Ð&:Ñ ;¸IÑ FÑF€KàÐr   Útemplate_featsc           
      ó  — | d   }| d   }| d   }| d   }t        j                  t        j                  j	                  |d«       |j
                  g |j                  d d ¢d‘­Ž  |j
                  g |j                  d d ¢d‘­Ž |gd¬	«      }|S )
NÚtemplate_aatypeÚtemplate_torsion_angles_sin_cosÚ#template_alt_torsion_angles_sin_cosÚtemplate_torsion_angles_maské   r.   é   r   ©r/   )r    Úcatr   Ú
functionalÚone_hotÚreshaper$   )r4   r6   Útorsion_angles_sin_cosÚalt_torsion_angles_sin_cosÚtorsion_angles_maskÚtemplate_angle_feats         r   Úbuild_template_angle_featrE   G   sº   € Ø$Ð%6Ñ7€OØ+Ð,MÑNÐØ!/Ð0UÑ!VÐØ(Ð)GÑHÐÜŸ)™)ä�M‰M×!Ñ! /°2Ó6Ø*Ð"×*Ñ*ÐRÐ,B×,HÑ,HÈÈ"Ð,MÐRÈrÒRØ.Ð&×.Ñ.ÐZÐ0J×0PÑ0PÐQTÐRTÐ0UÐZÐWYÒZØð		
ð ôÐð Ðr   Úmin_binÚmax_binÚno_binsÚuse_unit_vectorÚepsÚinfc           	      óà  — | d   }|d   |dd d d …f   z  }| d   }	t        j                  |	dd d d …f   |	dd d d …d d …f   z
  dz  dd¬«      }
t        j                  ||||	j                  ¬	«      dz  }t        j                  |d
d  |j                  |g«      gd¬«      }|
|kD  |
|k  z  j                  |
j                  «      }
|
|d   g}t        j                  j                  | d   t        j                  dz   «      }| d   j                  d   }|j                   |dd d d …d d …f   j                  g |j                  d d ¢|‘d‘d‘­Ž «       |j                   |dd d d …f   j                  g |j                  d d ¢d‘|‘d‘­Ž «       dD �cg c]  }t        j                   |   ‘Œ c}\  }}}t#        j$                  | d   d|d d …f   | d   d|d d …f   | d   d|d d …f   |¬«      }|j'                  «       dd d d …d d …f   }|d   j)                  |«      }t        j*                  |t        j                  |dz  d¬«      z   «      }| d   }|d|f   |d|f   z  |d|f   z  }|d   |dd d d …f   z  }||z  }||d   z  }|s|dz  }|j-                  t        j.                  |dd d d …f   d¬«      «       |j                  |d   «       t        j                  |d¬«      }||d   z  }|S c c}w )NÚtemplate_pseudo_beta_maskr   .Útemplate_pseudo_betaé   r   T)r/   Úkeepdim)Údevicer   r<   r6   r.   )ÚNr   ÚCÚtemplate_all_atom_positions)Ún_xyzÚca_xyzÚc_xyzrJ   Útemplate_all_atom_maskg        )r    ÚsumÚlinspacerQ   r=   Ú
new_tensorÚtypeÚdtyper   r>   r?   r   Úrestype_numr$   Úappendr"   r   r   Úmake_transform_from_referenceÚ	get_transÚinvert_applyÚrsqrtÚextendÚunbind)r+   rF   rG   rH   rI   rJ   rK   Útemplate_maskÚtemplate_mask_2dÚtpbÚdgramÚlowerÚupperÚ	to_concatÚaatype_one_hotÚn_resÚaÚnÚcaÚcÚrigidsÚpointsÚ	rigid_vecÚinv_distance_scalarÚ
t_aa_masksÚunit_vectorÚacts                              r   Úbuild_template_pair_featrz   Y   sX  € ð Ð5Ñ6€MØ$ YÑ/°-ÀÀTÊ1ÀÑ2MÑMÐð Ð&Ñ
'€CÜ�I‰I�s˜3 ¢a˜<Ñ(¨3¨s°Dº!ºQ¨Ñ+?Ñ?ÀAÑEÈ2ÐW[Ô\€EÜ�N‰N˜7 G¨W¸S¿Z¹ZÔHÈAÑM€EÜ�I‰I�u˜Q˜R�y %×"2Ñ"2°C°5Ó"9Ð:ÀÔC€EØ�e‰m ¨¡Ñ.×4Ñ4°U·[±[ÓA€EàÐ(¨Ñ3Ð4€Iä')§}¡}×'<Ñ'<ØÐÑ Ü
�‰˜Ñó(€Nð
 Ð#Ñ$×*Ñ*¨2Ñ.€EØ×ÑÐ;�^ C¨ªq²! OÑ4×;Ñ;Ðf¸^×=QÑ=QÐRUÐSUÐ=VÐfÐX]ÐfÐ_aÐfÐceÒfÔgØ×ÑÐ8�^ C¨ªq LÑ1×8Ñ8Ðc¸.×:NÑ:NÈsÐPRÐ:SÐcÐUWÐcÐY^ÐcÐ`bÒcÔdà*:Ö; Q”—‘˜aÓ Ò;�H€A€rˆ1Ü×0Ñ0ØÐ1Ñ2°3¸º1°9Ñ=ØÐ2Ñ3°C¸ºQ°JÑ?ØÐ1Ñ2°3¸º1°9Ñ=Øô	€Fð ×ÑÓ  Tª1ªa Ñ0€FØ�yÑ!×.Ñ.¨vÓ6€IäŸ+™+ c¬E¯I©I°iÀ±lÈÔ,KÑ&KÓLÐàÐ/Ñ0€JØ˜s A˜vÑ&¨°C¸°GÑ)<Ñ<¸zÈ#ÈqÈ&Ñ?QÑQ€MØ$ YÑ/°-ÀÀTÊ1ÀÑ2MÑMÐà-Ð0@Ñ@ÐØÐ1°)Ñ<Ñ<€KáØ! CÑ'ˆà×Ñ”U—\‘\ +¨c°4º¨lÑ";ÀÔDÔEØ×ÑÐ% iÑ0Ô1ä
�)‰)�I 2Ô
&€CØ
Ð  Ñ+Ñ
+€Cà€Jùò9 <s   ÆK+c                 óÈ   — t         j                  j                  | d   d«      }|| d   j                  d«      | d   j                  d«      g}t	        j
                  |d¬«      S )NÚ	extra_msaé   Úextra_has_deletionr   Úextra_deletion_valuer<   )r   r>   r?   Ú	unsqueezer    r=   )r+   Úmsa_1hotÚmsa_feats      r   Úbuild_extra_msa_featrƒ   –   sb   € Ü!#§¡×!6Ñ!6°u¸[Ñ7IÈ2Ó!N€HàØÐ"Ñ#×-Ñ-¨bÓ1ØÐ$Ñ%×/Ñ/°Ó3ð€Hô
 �9‰9�X 2Ô&Ð&r   ÚrÚalphaÚrrgdfc           	      ó^  — ||df   }| j                  |«      }|j                  g dt        |j                  d d «      z  ¢d‘­«      }d|d<   t	        j
                   |j                  g |j                  d d ¢d‘d‘­Ž |gd¬«      }|j                  |j                  «       j                  «       j                  «      }d|d	<   |d   |d
<   |d    |d<   ||dddd …f<   |j                  t        t        |¬«      d «      «      }|d   }	|d   }
|d   }|d   }|j                  |	«      }|j                  |
«      }|j                  |«      }t        j
                  |dd d…f   |j                  d«      |j                  d«      |j                  d«      gd¬«      }| d   j                  |«      }|S )N.)r   r   rO   r   ).r   r.   r<   ).r   r   ).r   r   ).r   ).r   rO   )Úrot_mats).é   ).é   ).é   ).é   r‰   r   )Úfrom_tensor_4x4Ú	new_zerosr#   r$   r    r=   r"   Úget_rotsÚget_rot_matsÚcomposer   r   r€   )r„   r…   r
   r†   Údefault_4x4Ú	default_rÚbb_rotÚall_rotsÚ
all_framesÚchi2_frame_to_frameÚchi3_frame_to_frameÚchi4_frame_to_frameÚchi1_frame_to_bbÚchi2_frame_to_bbÚchi3_frame_to_bbÚchi4_frame_to_bbÚall_frames_to_bbÚall_frames_to_globals                     r   Útorsion_angles_to_framesr        sæ  € ð ˜ ˜Ñ$€Kð
 ×!Ñ! +Ó.€Ià�_‰_ÐA ¤s¨5¯;©;°s¸Ð+;Ó'<Ñ <ÐA¸qÑAÓB€FØ€Fˆ6�Nô �I‰I�}�v—}‘}Ð? e§k¡k°#°2Ð&6Ð?¸Ð?¸BÒ?ÀÐGÈRÔP€Eð �‰˜y×1Ñ1Ó3×@Ñ@ÓB×HÑHÓI€HØ€HˆYÑØ ™-€HˆYÑØ  ™=˜.€HˆYÑØ €HˆS�!�Q‘RˆZÑà×"Ñ"¤5¬¸8Ô)DÀdÓ#KÓL€Jà$ VÑ,ÐØ$ VÑ,ÐØ$ VÑ,Ðà! &Ñ)ÐØ'×/Ñ/Ð0CÓDÐØ'×/Ñ/Ð0CÓDÐØ'×/Ñ/Ð0CÓDÐä—y‘yà�s˜B˜Q˜B�wÑØ×&Ñ& rÓ*Ø×&Ñ& rÓ*Ø×&Ñ& rÓ*ð		
ð ôÐð ˜Y™<×/Ñ/Ð0@ÓAÐàÐr   Údefault_framesÚ	group_idxÚ	atom_maskÚlit_positionsc                 ó  — ||df   }t         j                  j                  ||j                  d   ¬«      }| dd d d …f   |z  }|j	                  d„ «      }||df   j                  d«      }||df   }|j                  |«      }	|	|z  }	|	S )N.éýÿÿÿ)Únum_classesc                 ó0   — t        j                  | d¬«      S )Nr   r<   )r    rY   )Úxs    r   ú<lambda>z?frames_and_literature_positions_to_atom14_pos.<locals>.<lambda>ó   s   € Ä%Ç)Á)ÈAÐSUÔBV€ r   r   )r   r>   r?   r$   Úmap_tensor_fnr€   Úapply)
r„   r
   r¡   r¢   r£   r¤   Ú
group_maskÚgroup_mask_one_hotÚt_atoms_to_globalÚpred_positionss
             r   Ú-frames_and_literature_positions_to_atom14_posr±   Þ   s·   € ð ˜6 3˜;Ñ'€Jô ,.¯=©=×+@Ñ+@ØØ"×(Ñ(¨Ñ,ð ,Aó ,Ðð ˜#˜t¢Q˜,™Ð*<Ñ<Ðð *×7Ñ7Ñ8VÓWÐð ˜& #˜+Ñ&×0Ñ0°Ó4€Ið " &¨# +Ñ.€MØ&×,Ñ,¨]Ó;€NØ# iÑ/€NàÐr   )Fg#B’¡œÇ;g    „×—A)Útypingr   r    Útorch.typesr   Ú r   r   Úrigid_utilsr   r   Útensor_utilsr	   ÚTensorr   ÚtupleÚdictÚstrr3   rE   ÚtypesÚNumberÚintÚboolÚfloatrz   rƒ   r    r±   r   r   r   ú<module>rÀ      sC  ðõ  ã Û Ý å %ß (Ý (ð 
Ø u˜5Ÿ<™<Ð u¸U¿\¹\Ð uÐ[_Ð uÐdi×dpÑdpÒ uó 
Ø uð 
ð,Ø�L‰Lð,Ø.3¯l©lð,ØLQÏLÉLð,à
ˆ5�<‰<˜Ÿ™Ð%Ñ&ò,ó 
ð,ò
ð*
˜UŸ\™\ð 
°$°s¸E¿L¹LÐ7HÑ2Ið 
ÈeÏlÉló 
ð¨d°3¸¿¹Ð3DÑ.Eð È%Ï,É,ó ð. "ØØñ:Ø��U—\‘\Ð!Ñ"ð:à�[‰[×Ñð:ð �[‰[×Ñð:ð ð	:ð
 ð:ð 
ð:ð 
ð:ð ‡\�\ó:ðz'  S¨%¯,©,Ð%6Ñ 7ð '¸E¿L¹Ló 'ð; Øð; à�<‰<ð; ð �L‰Lð; ð �<‰<ð	; ð
 ó; ð|Øðà�L‰Lðð —L‘Lðð �|‰|ð	ð
 �|‰|ðð —<‘<ðð ‡\�\ôr   