Ë
    S^(h°   ã                   óÔ  — d dl mZmZ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)&é    )ÚDictÚTupleÚoverloadN)Únné   )Úresidue_constants)ÚRigidÚRotation)Úbatched_gatherÚaatypeÚall_atom_positionsÚall_atom_masksÚreturnc                  ó   — y ©N© ©r   r   r   s      új/var/www/skyplay_api_hub/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_atom37r5   :   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é   r0   é   r   ©r1   )r"   Úcatr   Ú
functionalÚone_hotÚreshaper&   )r6   r8   Útorsion_angles_sin_cosÚalt_torsion_angles_sin_cosÚtorsion_angles_maskÚtemplate_angle_feats         r   Úbuild_template_angle_featrG   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)r1   Úkeepdim)Údevicer   r>   r8   r0   )ÚNr   ÚCÚtemplate_all_atom_positions)Ún_xyzÚca_xyzÚc_xyzrL   Útemplate_all_atom_maskg        )r"   ÚsumÚlinspacerS   r?   Ú
new_tensorÚtypeÚdtyper   r@   rA   r   Úrestype_numr&   Úappendr$   r!   r	   Úmake_transform_from_referenceÚ	get_transÚinvert_applyÚrsqrtÚextendÚunbind)r-   rH   rI   rJ   rK   rL   rM   Ú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_featr|   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@   rA   Ú	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   rQ   r   ).r   r0   r>   ).r   r   ).r   r   ).r   ).r   rQ   )Ú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"   r[   )Úxs    r   ú<lambda>z?frames_and_literature_positions_to_atom14_pos.<locals>.<lambda>ó   s   € Ä%Ç)Á)ÈAÐSUÔBV€ r   r   )r   r@   rA   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   r   r"   Útorch.typesr   Ú r   r   Úrigid_utilsr	   r
   Útensor_utilsr   ÚTensorr   Ústrr5   rG   ÚtypesÚNumberÚintÚboolÚfloatr|   r…   r¢   r³   r   r   r   ú<module>rÀ      sF  ð÷  )Ñ (ã Û Ý å %ß (Ý (ð 
Ø 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   