
    sg                         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      _/var/www/html/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  A53v||+<#<Aq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FK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7O+,MN!/0U!V()GH))MM!!/26*"**R,B,H,H",MRrR.&..Z0J0P0PQTRT0UZWY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6M$Y/-T12MM &
'CIIs3a<(3sD!Q+??AE2W[\ENN7GWSZZHAMEIIuQRy%"2"2C5"9:CEem.44U[[AE(34I')}}'<'< 
(N
 #$**2.E;^Cq!O4;;f^=Q=QRUSU=VfX]f_afcefg8^CqL188c.:N:NsPR:ScUWcY^c`bcd*:;Qa ;HAr10012319=23CQJ?12319=	F T1a0Fy!..v6I++cEIIil,K&KL/0JsAv&CG)<<z#q&?QQM$Y/-T12MM-0@@1)<<K!C'U\\+c4l";DE%i01
))I2
&C
 +
+CJ9 <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!6u[7I2!NH"#--b1$%//3H
 99X2&&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s5;;s+;'< <AqABFF6N II}v}}?ekk#2&6??B?GRPE y113@@BHHIHHY-HY =.HY HS!QRZ""58)Dd#KLJ$V,$V,$V,!&)'//0CD'//0CD'//0CDyysBQBw&&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    %))ASUBV 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     63;'J ,.==+@+@"((, ,A , #tQ,*<< *778VW &#+&004I "&#+.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    ) (    % ( ( 
 u5<< uU\\ u[_ udidpdp u 
 u 
,LL,.3ll,LQLL,
5<<%&, 
,
*
U\\ 
$sELL7H2I 
ell 
d33D.E %,, . ":U\\!":[[: [[: 	:
 : 
: 
: \\:z'S%,,%6 7 'ELL '; ; <<;  LL;  <<	; 
 ; |LL LL ||	
 || << \\r   