
     `i                         d dl 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dS ))    )overloadN)nn   )residue_constants)RigidRotation)batched_gatheraatypeall_atom_positionsall_atom_masksreturnc                     d S N r
   r   r   s      /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/models/esm/openfold_utils/feats.pypseudo_beta_fnr      s    ruru    c                     d S r   r   r   s      r   r   r      s	     ),r   c           	      z   | t           j        d         k    }t           j        d         }t           j        d         }t          j         |d         j        g dt          |j                  z  dR  |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AA3>*3>* K ! ;3;'3;'
 

 ,,,r   atom14batchc           
          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_atom37r3   :   sX     '(&,ss+,,	  K &: ;I FFKr   template_featsc           
         | d         }| d         }| d         }| d         }t          j        t          j                            |d           |j        g |j        d d         dR   |j        g |j        d d         dR  |gd	          }|S )
Ntemplate_aatypetemplate_torsion_angles_sin_cos#template_alt_torsion_angles_sin_costemplate_torsion_angles_mask   r.      r   r/   )r    catr   
functionalone_hotreshaper$   )r4   r6   torsion_angles_sin_cosalt_torsion_angles_sin_costorsion_angles_masktemplate_angle_feats         r   build_template_angle_featrE   G   s    $%67O+,MN!/0U!V()GH)M!!/266*"*R,B,H",MRrRRR.&.Z0J0PQTRTQT0UZWYZZZ		
    r   F#B;    חAmin_binmax_binno_binsuse_unit_vectorepsinfc           	      d   | 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          |                    |g          gd          }|
|k    |
|k     z                      |
j                  }
|
|d         g}t          j	        
                    | d         t          j        dz             }| d         j        d         }|                     |dd d d d d f         j        g |j        d d         |ddR             |                     |dd d d f         j        g |j        d d         d|dR             d dD             \  }}}t!          j        | d         d|d d f         | d         d|d d f         | d         d|d d f         |          }|                                dd d d d d f         }|d                             |          }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  }|                    t          j        |dd d d f         d                     |                    |d                    t          j        |d          }||d         z  }|S )Ntemplate_pseudo_beta_maskr   .template_pseudo_beta   r   T)r/   keepdim)devicer   r<   r6   r.   c                 2    g | ]}t           j        |         S r   )r   r   ).0as     r   
<listcomp>z,build_template_pair_feat.<locals>.<listcomp>w   s    ;;;Qa ;;;r   )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>   r?   r   restype_numr$   appendr"   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ncacrigidspoints	rigid_vecinv_distance_scalar
t_aa_masksunit_vectoracts                             r   build_template_pair_featr   Y   s    56M$Y/-T1112MM &
'CIs3aaa<(3sD!!!QQQ+??AE2W[\\\EN7GWSZHHHAMEIuQRRy%"2"2C5"9"9:CCCEem.44U[AAE(34I')}'<'< 
( (N
 #$*2.E;^Cqqq!!!O4;f^=QRUSURU=VfX]f_afcefffggg8^CqqqL18c.:NsPRs:ScUWcY^c`bcccddd;;*:;;;HAr101231119=23CQQQJ?1231119=	  F T111aaa0Fy!..v66I+cEIil,K,K,K&KLL/0JsAv&CG)<<z#q&?QQM$Y/-T1112MM-0@@1)<<K (!C'U\+c4l";DDDEEE%i0111
)I2
&
&
&C
 +
+CJr   c                     t           j                            | d         d          }|| d                             d          | d                             d          g}t	          j        |d          S )N	extra_msa   extra_has_deletionr   extra_deletion_valuer<   )r   r>   r?   	unsqueezer    r=   )r+   msa_1hotmsa_feats      r   build_extra_msa_featr      sm    !#!6!6u[7I2!N!NH"#--b11$%//33H
 9X2&&&&r   ralpharrgdfc           	         ||df         }|                      |          }|                    g dt          |j        d d                   z  dR           }d|d<   t	          j         |j        g |j        d d         ddR  |gd          }|                    |                                                                j                  }d|d	<   |d         |d
<   |d          |d<   ||dddd f<   |	                    t          t          |          d                     }|d         }	|d         }
|d         }|d         }|	                    |	          }|	                    |
          }|	                    |          }t          j        |dd df         |                    d          |                    d          |                    d          gd          }| d         	                    |          }|S )N.)r   r   rQ   r   ).r   r.   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s+;'<'< <AqAABBFF6N I}v}?ek#2#&6??B???GRPPPE y1133@@BBHIIHHY-HY =.HY HS!QRRZ""58)D)D)Dd#K#KLLJ$V,$V,$V,!&)'//0CDD'//0CDD'//0CDDysBQBw&&r**&&r**&&r**		
    Y<//0@AAr   default_frames	group_idx	atom_masklit_positionsc                 @   ||df         }t           j                            ||j        d                   }| dd d d f         |z  }|                    d           }||df                             d          }||df         }|                    |          }	|	|z  }	|	S )N.)num_classesc                 .    t          j        | d          S )Nr   r<   )r    r_   )xs    r   <lambda>z?frames_and_literature_positions_to_atom14_pos.<locals>.<lambda>   s    %)ASUBVBVBV r   r   )r   r>   r?   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 , , #tQQQ,*<< *778V8VWW &#+&0044I "&#+.M&,,];;N#i/Nr   )FrF   rG   )typingr   r    torch.typesr    r   r   rigid_utilsr   r   tensor_utilsr	   Tensorr   tupledictstrr3   rE   typesNumberintboolfloatr   r   r   r   r   r   r   <module>r      s                     % % % % % % ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
 u5< uU\ u[_ udidp u u u 
 u 
,L,.3l,LQL,
5<%&, , , 
,
  *
U\ 
$sEL7H2I 
el 
 
 
 
d33D.E %,    . ": :U\!":[: [: 	:
 : 
: 
: \: : : :z'S%,%6 7 'EL ' ' ' '; ; <;  L;  <	; 
 ;  ;  ;  ; |L L |	
 | < \     r   