Ë
    ÛÓ^jÚ,  ã                   óÂ  — d Z ddlZddlZddlZddlmZmZmZ ddl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j                  dz  dej                  dz  dedz  dee   dz  dee   dz  defd„Zy) zProtein data type.é    N)ÚIteratorÚMappingÚSequence)ÚAnyé   )Ú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j
                  dz  ed<   dZe	dz  ed	<   dZ
ee	   dz  ed
<   dZee   dz  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   Ústrr   r   r   Úint© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/esm/openfold_utils/protein.pyr   r   "   s‘   … á+ð —J‘JÓð �J‰JÓð �z‰zÓð —:‘:Óð
 �z‰zÓð &*€K�—‘˜dÑ"Ó)ð €FˆC�$‰JÓð %)€GˆX�c‰]˜TÑ!Ó(ð 15Ð˜ #™¨Ñ-Ô4r   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                  «       }|D �cg c]  }|t
        j                  v r|n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 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Úzipr   Úrestypesr   ÚarrayÚrestype_orderÚgetÚrestype_numÚrangeÚ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ÚcharÚ
res_symbolÚtertiaryÚaxisÚtertiary_npÚiÚatomÚmasks                       r    Úfrom_proteinnet_stringrU   H   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Øó )ˆØˆQ‰4�;ÒØ�A‘$�q‘'—-‘-“/ˆCàSVÖWÈ4˜4Ô#4×#=Ñ#=Ñ=‘4À3ÑFÐWˆCÐWÜ—X‘XØruÖvÐdnÔ"×0Ñ0×4Ñ4°ZÔAR×A^ÑA^Õ_Òvó‰Fð ˆ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Øˆq‰T�XÔÜ—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ð7)ð: ÐÐÐäØ%ØØÜ—i‘i¤ F£Ó,Øôð ùòM `ùÚ>aùò Xùâvs   ›L5¯L5ÁL:
Â*L?Ã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   r8   r   r   r1   r/   Újoin)rV   rW   Úpdb_headersr   r   r   rR   Úps           r    Úget_pdb_headersr`   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„ |D «       «      }	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 )zWAdd pdb headers to an existing PDB string. Useful during multi-chain
    recycling
    r%   rY   r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r   )Ú.0Ú	chain_idxs     r    ú	<genexpr>z"add_pdb_headers.<locals>.<genexpr>¡   s   è ø€ ÒF¨Yœ#˜iŸ.ÑFùs   ‚r   rZ   r_   r"   c                 ó*   — ddj                  | «      › �S )Nr[   r\   )r]   )r_   s    r    Úmake_parent_linez)add_pdb_headers.<locals>.make_parent_lineª   s   € Ø˜Ÿ™ !›˜Ð&Ð&r   ÚPARENTÚREMARKÚTERÚEND)r.   r   r8   r   r/   r   r1   Ú
setdefaultr   Úmaxr7   r5   r9   r   r@   r]   )rV   ra   Úout_pdb_linesÚlinesr   Úparents_per_chainÚparent_dictr_   rR   Úmax_idxÚchain_parentsrh   Úchain_counterrH   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Õ-ð.ô ÑF¸+ÔFÓFˆ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�]Ó#Ð#r   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_1to3r5   )rx   r2   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>2Trk   z      rl   r%   )r   r2   r   r   Ú
atom_typesr   r   r   r   r>   r   Úint32r   r   Úanyr6   Ú
ValueErrorr`   r/   ÚextendÚshapeÚstringÚascii_uppercaser7   r1   r8   r]   )"rV   r|   r�   Ú	pdb_linesr   r   r   r   r   r   ÚheadersÚnÚ
atom_indexÚprev_chain_indexÚ
chain_tagsÚ	chain_tagrR   Ú
res_name_3Ú	atom_nameÚposrT   Úb_factorÚrecord_typeÚnameÚalt_locÚinsertion_codeÚ	occupancyÚelementÚchargeÚ	atom_lineÚshould_terminateÚ	chain_endÚchain_termination_liner2   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   )rV   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   Údataclassesr-   r‡   Úcollections.abcr   r   r   Útypingr   Únumpyr   r   r   r   r   ÚFeatureDictÚModelOutputrC   Ú	dataclassr   rU   r   r9   r`   rv   rŸ   r¢   r©   r   r   r    ú<module>r±      sv  ðñ  ã Û 	Û ß 7Ñ 7Ý ã å ð �c˜2Ÿ:™:�oÑ&€Ø�c˜3�hÑ€ØÐ ð €×Ñ˜dÔ#÷"5ð "5ó $ð"5ðJ.¨3ð .°7ó .ñb˜'ð ¨Sð ¸¸c¹ó ð(/$˜'ð /$¨Cð /$°Có /$ðdZ �ð Z ˜Só Z ðz=˜'ð = b§j¡jó =ð$ $(Ø%)ØØ$(Ø04ñØðàðð �z‰z˜DÑ ðð —‘˜dÑ"ð	ð
 �$‰Jðð �c‰]˜TÑ!ðð " #™¨Ñ-ðð ôr   