Ë
    S^(hã,  ã                   óÊ  — d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZ ddlZddlmZ e	eej$                  f   Ze	eef   ZdZ ej,                  d¬«       G d	„ d
«      «       Zdedefd„Zddededee   fd„Zdededefd„Zdedefd„Zdedej$                  fd„Z	 	 	 	 	 ddedede
ej$                     de
ej$                     de
e   de
ee      de
ee      defd„Zy)zProtein data type.é    N)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚSequenceÚTupleé   )Úresidue_constantsg{®Gáz„?T)Úfrozenc                   ó  — e Zd ZU dZej
                  ed<   ej
                  ed<   ej
                  ed<   ej
                  ed<   ej
                  ed<   dZeej
                     ed<   dZ	ee
   ed	<   dZeee
      ed
<   dZeee      ed<   y)ÚProteinz!Protein structure representation.Úatom_positionsÚaatypeÚ	atom_maskÚresidue_indexÚ	b_factorsNÚchain_indexÚremarkÚparentsÚparents_chain_index)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnpÚndarrayÚ__annotations__r   r   r   Ústrr   r	   r   Úint© ó    úl/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/esm/openfold_utils/protein.pyr   r   !   s‘   … á+ð —J‘JÓð �J‰JÓð �z‰zÓð —:‘:Óð
 �z‰zÓð )-€K�˜"Ÿ*™*Ñ%Ó,ð !€FˆH�S‰MÓ ð (,€GˆX�h˜s‘mÑ$Ó+ð 48Ð˜ (¨3¡-Ñ0Ô7r#   r   Úproteinnet_strÚreturnc                 óª  — d}t        j                  || «      D �cg c]!  }t        |«      dkD  sŒ|j                  «       ‘Œ# }}t	        |dd d…   |dd d…   D �cg c]  }|j                  d«      ‘Œ c}«      }g d¢}d }d }d }	|D �]Ž  }
d|
d   k(  rš|
d   d   j                  «       }t        t        |«      «      D ]  }||   t        j                  vsŒd||<   Œ t        j                  |D �cg c]0  }t        j                  j                  |t        j                  «      ‘Œ2 c}«      }Œ¦d	|
d   k(  �rg }t        d
«      D ]>  }|j                  t        t        t         |
d   |   j                  «       «      «      «       Œ@ t        j                  |«      }t        j"                  t        |d   «      d
z  t        j$                  d
f«      j'                  t        j(                  «      }t+        |«      D ]?  \  }}t        j,                  |d d …|d d
…f   «      |d d …t        j.                  |   d d …f<   ŒA |t0        z  }�Œ¼d|
d   k(  s�ŒÆt        j                  t        t        dddœj                  |
d   d   j                  «       «      «      «      }t        j"                  t        |«      t        j$                  f«      j'                  t        j(                  «      }	t+        |«      D ]  \  }}d|	d d …t        j.                  |   f<   Œ! |	|d   z  }	�Œ‘ |€J ‚t3        ||	|t        j4                  t        |«      «      d ¬«      S c c}w c c}w c c}w )Nz(\[[A-Z]+\]\n)r   é   r   ú
)ÚNÚCAÚCz	[PRIMARY]ÚXz
[TERTIARY]é   z[MASK])ú-ú+).N)r   r   r   r   r   )ÚreÚsplitÚlenÚstripÚzipÚranger   Úrestypesr   ÚarrayÚrestype_orderÚgetÚrestype_numÚappendÚlistÚmapÚfloatÚzerosÚatom_type_numÚastypeÚfloat32Ú	enumerateÚ	transposeÚ
atom_orderÚPICO_TO_ANGSTROMr   Úarange)r%   Útag_reÚtagÚtagsÚlÚgroupsÚatomsr   r   r   ÚgÚseqÚiÚ
res_symbolÚtertiaryÚaxisÚtertiary_npÚatomÚmasks                      r$   Úfrom_proteinnet_stringrX   G   s!  € Ø€FÜ.0¯h©h°v¸~Ó.NÖ_ sÔRUÐVYÓRZÐ]^ÓR^�s—y‘y•{Ð_€DÐ_Ü.1°$°q°t¸!°t±*ÐVZÐ[\Ð[_Ð^_Ð[_ÑV`Ö>aÐQR¸q¿w¹wÀt½}Ò>aÓ.b€Fâ'€EØ€FØ€NØ€IØó )ˆØ˜!˜A™$ÒØ�A‘$�q‘'—-‘-“/ˆCÜœ3˜s›8“_ò !�Ø�q‘6Ô!2×!;Ñ!;Ò;Ø �C˜’Fð!ô —X‘XØruÖvÐdnÔ"×0Ñ0×4Ñ4°ZÔAR×A^ÑA^Õ_Òvó‰Fð ˜Q˜q™TÓ!Ø*,ˆHÜ˜a›ò F�Ø—‘¤¤S¬°°!±°T±
×0@Ñ0@Ó0BÓ%CÓ DÕEðFäŸ(™( 8Ó,ˆKÜŸX™X¤s¨8°A©;Ó'7¸1Ñ'<Ô>O×>]Ñ>]Ð_`Ð&aÓb×iÑiÔjl×jtÑjtÓuˆNÜ$ UÓ+ò n‘��4ÜKMÏ<É<ÐXcÒdeÐghÐgkÐjkÐgkÐdkÑXlÓKm�šqÔ"3×">Ñ">¸tÑ"DÂaÐGÒHðnàÔ.Ñ.ŠNØ˜˜1™ÔÜ—8‘8œD¤¨1°1Ñ%5×%9Ñ%9¸1¸Q¹4À¹7¿=¹=»?Ó!KÓLÓMˆDÜŸ™ä˜“IÜ%×3Ñ3ðó÷
 ‰f”R—Z‘ZÓ ð ô % UÓ+ò E‘��4ØCD�	š!Ô.×9Ñ9¸$Ñ?Ð?Ò@ðEà˜˜i™Ñ(ŠIð9)ð< ÐÐÐäØ%ØØÜ—i‘i¤ F£Ó,Øôð ùòO `ùÚ>aùò ws   ›M¯MÁM
Ã-5M
ÚprotÚchain_idc                 óF  — g }| j                   }|�|j                  d|› �«       | j                  }| j                  }|�&|�$t	        ||«      D ��cg c]  \  }}||k(  sŒ|‘Œ }}}|�t        |«      dk(  rdg}|j                  ddj                  |«      › �«       |S c c}}w )NúREMARK r   úN/AúPARENT ú )r   r<   r   r   r5   r3   Újoin)rY   rZ   Úpdb_headersr   r   r   rQ   Úps           r$   Úget_pdb_headersrc   y   s³   € Ø€Kà�[‰[€FØÐØ×Ñ˜W V HÐ-Ô.à�l‰l€GØ×2Ñ2ÐØÐÐ2Ð>Ü!$Ð%8¸'Ó!B×T™˜˜AÀaÈ8Ãm’1ÐTˆÑTà€œ#˜g›,¨!Ò+Ø�'ˆà×Ñ˜ §¡¨'Ó!2Ð 3Ð4Ô5àÐùó Us   ÁBÁBÚpdb_strc                 ó  — g }|j                  d«      }| j                  }|�|j                  d|› �«       | j                  ��t	        | j                  «      dkD  røg }| j
                  �Åi }t        | j                  | j
                  «      D ]=  \  }}|j                  t        |«      g «       |t        |«         j                  |«       Œ? t        |D �	cg c]  }	t        |	«      ‘Œ c}	«      }
t        |
dz   «      D ]/  }|j                  t        |«      dg«      }|j                  |«       Œ1 n)|j                  t        | j                  «      «       ndgg}dt        t           dt        fd„}|j                   ||d   «      «       d}t        |«      D ]a  \  }}d	|vrd
|vr|j                  |«       d|v sŒ$d||dz      vsŒ/|dz  }|t	        |«      k\  s||   }ndg}|j                   ||«      «       Œc dj!                  |«      S c c}	w )zWAdd pdb headers to an existing PDB string. Useful during multi-chain
    recycling
    r)   r\   r   r   r]   rb   r&   c                 ó*   — ddj                  | «      › �S )Nr^   r_   )r`   )rb   s    r$   Úmake_parent_linez)add_pdb_headers.<locals>.make_parent_lineª   s   € Ø˜Ÿ™ !›˜Ð&Ð&r#   ÚPARENTÚREMARKÚTERÚEND)r2   r   r<   r   r3   r   r5   Ú
setdefaultr    Úmaxr!   r6   r:   r=   r	   rD   r`   )rY   rd   Úout_pdb_linesÚlinesr   Úparents_per_chainÚparent_dictrb   rQ   Ú	chain_idxÚmax_idxÚchain_parentsrg   Úchain_counterrL   s                  r$   Úadd_pdb_headersrv   �   s  € ð  "€MØ�M‰M˜$Ó€Eà�[‰[€FØÐØ×Ñ˜w v hÐ/Ô0ð ‡|�|Ñ¤C¨¯©Ó$5¸Ò$9ØÐØ×#Ñ#Ð/Ø02ˆKÜ˜DŸL™L¨$×*BÑ*BÓCò .‘��1Ø×&Ñ&¤s¨1£v¨rÔ2ØœC ›FÑ#×*Ñ*¨1Õ-ð.ô ¸;ÖG¨iœ3˜y�>ÒGÓHˆGÜ˜7 Q™;Ó'ò 8�Ø +§¡´°A³¸¸Ó @�Ø!×(Ñ(¨Õ7ñ8ð ×$Ñ$¤T¨$¯,©,Ó%7Õ8à#˜W˜IÐð'œH¤S™Mð '¬có 'ð ×ÑÑ)Ð*;¸AÑ*>Ó?Ô@à€MÜ˜%Ó ò 
B‰ˆˆ1Ø˜1Ñ °Ñ!2Ø× Ñ  Ô#Ø�AŠ:˜% u¨Q°©U¡|Ò3Ø˜QÑˆMØ ¤CÐ(9Ó$:Ò:Ø 1°-Ñ @‘à!& �à× Ñ Ñ!1°-Ó!@ÕAð
Bð �9‰9�]Ó#Ð#ùò7 Hs   ÃH
c                 óB  ‡!— t         j                  dgz   Š!dt        dt        fˆ!fd„}t         j                  }g }| j
                  }| j                  }| j                  }| j                  j                  t        j                  «      }| j                  }| j                  }	t        j                  |t         j                  kD  «      rt!        d«      ‚t#        | «      }
t%        |
«      dkD  r|j'                  |
«       |j(                  d   }d}d}t*        j,                  }d}t/        |«      D �]@  } |||   «      }t1        |||   ||   ||   «      D ]’  \  }}}}|d	k  rŒd
}t%        |«      dk(  r|nd|› �}d}d}d}|d   }d}d}|	�||	|      }|d›|d›d|d›|d›|d›d|d›||   d›|d›d|d   d›|d   d›|d   d›|d›|d›d|d›|d›�}|j3                  |«       |dz  }Œ” ||dz
  k(  }|	�||dz
  k7  r|	|dz      |k7  r
d}|	|dz      }|sŒåd}|d›|d›d |||   «      d›d|d›||   d›�} |j3                  | «       |dz  }||dz
  k7  s�Œ&|j'                  t#        | |«      «       �ŒC |j3                  d«       |j3                  d«       d j5                  |«      S )!z‰Converts a `Protein` instance to a PDB string.

    Args:
      prot: The protein to convert to PDB.

    Returns:
      PDB string.
    r-   Úrr&   c                 óJ   •— t         j                  j                  ‰|    d«      S )NÚUNK)r   Úrestype_1to3r:   )rx   r7   s    €r$   Úres_1to3zto_pdb.<locals>.res_1to3Ê   s    ø€ Ü ×-Ñ-×1Ñ1°(¸1±+¸uÓEÐEr#   zInvalid aatypes.r   r   Ng      à?ÚATOMé   r_   Ú g      ð?ÚAz<6z>5z<4z>1z>3z>4z   z>8.3fr(   z>6.2fz
          z>2Trj   z      rk   r)   )r   r7   r!   r    Ú
atom_typesr   r   r   r   rB   r   Úint32r   r   Úanyr;   Ú
ValueErrorrc   r3   ÚextendÚshapeÚstringÚascii_uppercaser6   r5   r<   r`   )"rY   r|   r�   Ú	pdb_linesr   r   r   r   r   r   ÚheadersÚnÚ
atom_indexÚprev_chain_indexÚ
chain_tagsÚ	chain_tagrQ   Ú
res_name_3Ú	atom_nameÚposrW   Úb_factorÚrecord_typeÚnameÚalt_locÚinsertion_codeÚ	occupancyÚelementÚchargeÚ	atom_lineÚshould_terminateÚ	chain_endÚchain_termination_liner7   s"                                    @r$   Úto_pdbrŸ   ¿   sM  ø€ ô !×)Ñ)¨S¨EÑ1€HðF”Cð FœCõ Fô #×-Ñ-€Jà€Ià—‘€IØ�[‰[€FØ×(Ñ(€NØ×&Ñ&×-Ñ-¬b¯h©hÓ7€MØ—‘€IØ×"Ñ"€Kä	‡v�vˆfÔ(×4Ñ4Ñ4Ô5ÜÐ+Ó,Ð,ä˜dÓ#€GÜ
ˆ7ƒ|�aÒØ×Ñ˜Ô!à�‰�Q‰€AØ€JØÐÜ×'Ñ'€JØ€Iä�1‹Xó 0JˆÙ˜f Q™iÓ(ˆ
Ü.1°*¸nÈQÑ>OÐQZÐ[\ÑQ]Ð_hÐijÑ_kÓ.lò 	Ñ*ˆI�s˜D (Ø�cŠzØà ˆKÜ # I£°!Ò 3‘9¸1¸Y¸K¸ˆDØˆGØˆNØˆIØ ‘lˆGØˆFàˆIØÐ&Ø& {°1¡~Ñ6�	ð ˜rÐ" :¨b /°°4¸°)¸GÀB¸<Ø˜b�/  9¨R .Ø  Ñ# BÐ'¨°rÐ':¸#Ø�q‘6˜%�.  Q¡¨ ¨s°1©v°e¨nØ˜UÐ# H¨UÐ#3°:Ø˜2�,˜v b˜kð+ð ð ×Ñ˜YÔ'Ø˜!‰O‰Jð5	ð8   A¡™:ÐØÐ"Ø�A˜‘EŠz˜k¨!¨a©%Ñ0Ð4DÒDØ#'Ð Ø#.¨q°1©uÑ#5Ð âàˆIà˜R�. ¨B ¨v±h¸vÀa¹yÓ6IÈ"Ð5MÈQÈyÐY[ÈnÐ]jÐklÑ]mÐnpÐ\qÐrð #ð ×ÑÐ3Ô4Ø˜!‰OˆJà�A˜‘EŒzð × Ñ ¤°Ð7GÓ!HÖIða0Jðd ×Ñ�UÔØ×Ñ�RÔØ�9‰9�YÓÐr#   c                 ó<   — t         j                  | j                     S )ao  Computes an ideal atom mask.

    `Protein.atom_mask` typically is defined according to the atoms that are reported in the PDB. This function
    computes a mask according to heavy atoms that should be present in the given sequence of amino acids.

    Args:
      prot: `Protein` whose fields are `numpy.ndarray` objects.

    Returns:
      An ideal atom mask.
    )r   ÚSTANDARD_ATOM_MASKr   )rY   s    r$   Úideal_atom_maskr¢     s   € ô ×/Ñ/°·±Ñ<Ð<r#   ÚfeaturesÚresultr   r   r   r   r   c                 ó|   — t        | d   |d   |d   | d   dz   |�|nt        j                  |d   «      ||||¬«	      S )aª  Assembles a protein from a prediction.

    Args:
      features: Dictionary holding model inputs.
      result: Dictionary holding model outputs.
      b_factors: (Optional) B-factors to use for the protein.
      chain_index: (Optional) Chain indices for multi-chain predictions
      remark: (Optional) Remark about the prediction
      parents: (Optional) List of template names
    Returns:
      A protein instance.
    r   Úfinal_atom_positionsÚfinal_atom_maskr   r   )	r   r   r   r   r   r   r   r   r   )r   r   Ú
zeros_like)r£   r¤   r   r   r   r   r   s          r$   Úfrom_predictionr©   +  s]   € ô* Ø˜Ñ!ØÐ4Ñ5ØÐ*Ñ+Ø˜Ñ/°!Ñ3Ø(Ð4‘)¼"¿-¹-ÈÐO`ÑHaÓ:bØØØØ/ô
ð 
r#   )r   )NNNNN)r   Údataclassesr1   r‡   Útypingr   r   r   r   r   r   r	   r
   Únumpyr   r   r   r    r   ÚFeatureDictÚModelOutputrG   Ú	dataclassr   rX   r!   rc   rv   rŸ   r¢   r©   r"   r#   r$   ú<module>r°      sv  ðñ  ã Û 	Û ß P× PÓ Pã å ð �c˜2Ÿ:™:�oÑ&€Ø�c˜3�hÑ€ØÐ ð €×Ñ˜dÔ#÷"8ð "8ó $ð"8ðJ/¨3ð /°7ó /ñd˜'ð ¨Sð ¸¸c¹ó ð(/$˜'ð /$¨Cð /$°Có /$ðdZ �ð Z ˜Só Z ðz=˜'ð = b§j¡jó =ð$ '+Ø(,Ø Ø'+Ø37ñØðàðð ˜Ÿ
™
Ñ#ðð ˜"Ÿ*™*Ñ%ð	ð
 �S‰Mðð �h˜s‘mÑ$ðð " (¨3¡-Ñ0ðð ôr#   