+
    œ°³jM  ã                   óF   € ^ RI t R R ltR R ltR
R R lltRR R	 lltR# )é    Nc                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )é   Ú
boundariesÚreturn)ÚtorchÚTensor)Úformats   "Úl/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/esm/openfold_utils/loss.pyÚ__annotate__r      s"   € ÷ ñ ¤u§|¡|ð ¼¿¹ñ ó    c                 ó¾   € V ^,          V ^ ,          ,
          pW^,          ,           p\         P                  ! W"R,          V,           P                  R4      .^ R7      pV# ©é   ©Údiméÿÿÿÿ)r   ÚcatÚ	unsqueeze)r   ÚstepÚbin_centerss   &  r
   Ú_calculate_bin_centersr      sN   € Ø�a�=˜: a�=Õ(€DØ a�xÕ'€KÜ—)’)˜[°r­?¸TÕ+A×*LÑ*LÈRÓ*PÐQÐWXÔY€KØÐr   c                ó®   € V ^8„  d   QhR\         P                  R\         P                  R\        \         P                  \         P                  3,          /# )r   Úalignment_confidence_breaksÚaligned_distance_error_probsr   )r   r   Útuple)r	   s   "r
   r   r      s@   € ÷ ñ Ü!&§¡ðä"'§,¡,ðô Œ5�<‰<œŸ™Ð%Õ&ñr   c                 óf   € \        V 4      p\        P                  ! W,          RR7      VR,          3# r   )r   r   Úsum)r   r   r   s   && r
   Ú!_calculate_expected_aligned_errorr      s2   € ô )Ð)DÓE€Kä�	Š	Ð.Õ<À"ÔEØ�B�ðð r   c          
      ó’   € V ^8„  d   QhR\         P                  R\        R\        R\        \        \         P                  3,          /# )r   ÚlogitsÚmax_binÚno_binsr   )r   r   ÚintÚdictÚstr)r	   s   "r
   r   r   &   sB   € ÷  ñ  Ü�L‰Lð äð ô ð ô
 
Œ#Œu�|‰|Ð
Õñ r   c                óÚ   € \         P                  ! ^ W^,
          V P                  R7      p\         P                  P                  P                  V RR7      p\        VVR7      w  rgRVRVRV/# )a   Computes aligned confidence metrics from logits.

Args:
  logits: [*, num_res, num_res, num_bins] the logits output from
    PredictedAlignedErrorHead.
  max_bin: Maximum bin value
  no_bins: Number of bins
Returns:
  aligned_confidence_probs: [*, num_res, num_res, num_bins] the predicted
    aligned error probabilities over bins for each residue pair.
  predicted_aligned_error: [*, num_res, num_res] the expected aligned distance
    error for each pair of residues.
  max_predicted_aligned_error: [*] the maximum predicted error possible.
©ÚstepsÚdevicer   )r   r   Úaligned_confidence_probsÚpredicted_aligned_errorÚmax_predicted_aligned_errorr   )r   Úlinspacer)   ÚnnÚ
functionalÚsoftmaxr   )r    r!   r"   Úkwargsr   r*   r+   r,   s   &&&,    r
   Úcompute_predicted_aligned_errorr2   &   sp   € ô( —’  7¸Qµ;ÈÏÉÔV€Jä$Ÿx™x×2Ñ2×:Ñ:¸6ÀrÐ:ÓJÐÜ;\Ø$.Ø%=ô<Ñ8Ðð 	#Ð$<Ø!Ð#:Ø%Ð'Bðð r   c                óª   € V ^8„  d   QhR\         P                  R\         P                  R,          R\        R\        R\        R\         P                  /# )r   r    Úresidue_weightsNr!   r"   Úepsr   )r   r   r#   Úfloat)r	   s   "r
   r   r   I   sU   € ÷ (ñ (Ü�L‰Lð(ä—\‘\ DÕ(ð(ô ð(ô ð	(ô
 
ð(ô ‡\�\ñ(r   c                 ó@  € Vf#   V P                  V P                  R,          4      p\        P                  ! ^ W#^,
          V P                  R7      p\        V4      p\        P                  ! V4       V P                  R,          p\        V^4      p	RV	^,
          R,          ,          R,
          p
\        P                  P                  P                  V RR7      pR^V^,          V
^,          ,          ,           ,          p\        P                  ! W¼,          RR7      pWVP                  4       ,           ,          p\        P                  ! WÞ,          RR7      pWñ,          pV\        P                  ! V4      8H  P                  4       ^ ,          pV\        V4      ,          # )	Nr'   g×£p=
×ó?g      ð?gÍÌÌÌÌÌü?r   éþÿÿÿgUUUUUUÕ?r   )Únew_onesÚshaper   r-   r)   r   r   Úmaxr.   r/   r0   Únonzeror   )r    r4   r!   r"   r5   r1   r   r   ÚnÚ	clipped_nÚd0ÚprobsÚ
tm_per_binÚpredicted_tm_termÚnormed_residue_maskÚper_alignmentÚweightedÚargmaxs   &&&&&,            r
   Ú
compute_tmrG   I   s4  € ð ÒØ Ÿ/™/¨&¯,©,°rÕ*:Ó;ˆä—’  7¸Qµ;ÈÏÉÔV€Jä(¨Ó4€KÜ	‡I‚IˆoÔØ�‰�RÕ€AÜ�A�r“
€Ià	�˜R• WÕ-Õ	-°Õ	3€Bä�H‰H×Ñ×'Ñ'¨°BÐ'Ó7€Eà˜˜[¨!�^°°AµÕ6Õ6Õ7€JÜŸ	š	 %Õ"4¸"Ô=Ðà)°?×3FÑ3FÓ3HÕ-HÕIÐÜ—I’IÐ/ÕEÈ2ÔN€MàÕ.€Hàœ%Ÿ)š) HÓ-Ñ-×6Ñ6Ó8¸Õ;€FØœ˜v›Õ'Ð'r   )é   é@   )NrH   rI   g:Œ0âŽyE>)r   r   r   r2   rG   © r   r
   Ú<module>rK      s$   ðó" õõ÷ ÷F(ñ (r   