Team Ai
Modelpublic

OneScience-Group/DiffDock

sourceHugging Facemitupdated 2mo agoView on Hugging Face
0likes52downloads
cg_model.cpython-311.pyc329 linesDownload Raw Back to __pycache__
1�

2�aOj?����ddlZddlZddlZddlZddlmZddlmZddlm	Z	ddl3mZddl
mZmZddlmZmZddlmZmZmZdd	lmZmZd4dlmZmZd5dlmZmZd
�Z 	ddl!m"Z"n
#e#$rdZ"YnwxYwGd�dej	j$��Z%dS)�N)�o3)�Linear)�nn)�6functional)�radius�radius_graph)�scatter�scatter_mean)�lig_feature_dims�rec_atom_feature_dims�rec_residue_feature_dims)�so3�torus�)�AtomEncoder�GaussianSmearing)�TensorProductConvLayer�
get_irrep_seqc�j�tj�|d�����dvS)N�>�1�on�yes�true)�os�environ�get�lower)�names �;/public/home/liuyx19/modelscope/diffdock/models/cg_model.py�	_env_flagr!s*��
�:�>�>�$��#�#�)�)�+�+�/I�I�I�)�load_model_and_alphabetc����eZdZ																																											d�fd�	Zed���Zd�Zd�Zd�Zd�Z	d�Z7d�Zd�Zd�Z
d�Zd�Zd�Zd�Zd�Zd�Z�xZS) �CGModel�� ������FT�Nrr�mean max min stdc/�2��tt|�����| dks8Jd���|%r|�9Jd���||_||_||rdndz}||_|10|_||_|&|_||_	||_11|
|_||_||_
tj�|���|_||c|_|_||_||_||_||_||_||_||_||_||_|	|_|)|_||_||_ |$|_!|%|_"|'|_#|*|_$|,|_%|#|_&|-|_'||_(|�d}/n�|dkrd}/n�tR�tUd	���tS|��\}0}1|1�+��|_,tZj.�/��|0_0tZj.�/��|0_1|0j2}/|0|_3th}2|2|tj|�12��|_6t]j7t]j8||z|z|��t]j9��t]j:|��t]j8||����|_;|2|txd|/���|_=t]j7t]j8||��t]j9��t]j:|��t]j8||����|_>t]j7t]j8||��t]j9��t]j:|��t]j8||����|_?|j�rP|2|t�|�13��|_At]j7t]j8||z|��t]j9��t]j:|��t]j8||����|_Bt]j7t]j8||z|��t]j9��t]j:|��t]j8||����|_Ct]j7t]j8||z|��t]j9��t]j:|��t]j8||����|_Dt]j7t]j8||z|��t]j9��t]j:|��t]j8||����|_Et�d|14|��|_Gt�d||��|_Ht�d||��|_It�||||*��}3|jr15Jd
���g}4t�|)��D]�}5|3t�|5t�|3��dz16��}6|3t�|5dzt�|3��dz17��}7t�|6|j|7d|zd|zd|||dko||(d|.���}8|4�O|8����t]jP|4��|_Q|+|_R|+r�g}9t�|)��D]�}5|3t�|5t�|3��dz18��}6|3t�|5dzt�|3��dz19��}7t�|6|j|7d|zd|zd|||dko||(d|.���}8|9�O|8����t]jP|9��|_Sg}:t�|)|)|	z��D]�}5|3t�|5t�|3��dz20��}6|3t�|5dzt�|3��dz21��}7t�|6|j|7d|zd|zd|||dko||(|'sdn|5|)|	zdz22krdnd|.���}8|:�O|8����t]jP|:��|_T|-r?tq|3t�|)|	zt�|3��dz23��ddd���|_U|j�r24|	|)zdkr	||*r|n|zn|};|j%r�t]j7t]j8|;|��|st]jV|��nt]j/��t]j9��t]j:|��t]j8||��|st]jV|��nt]j/��t]j9��t]j:|��t]j8||#|z���	�	|_W|};t]j7t]j8|;|��|st]jV|��nt]j/��t]j9��t]j:|��t]j8||��|st]jV|��nt]j/��t]j9��t]j:|��t]j8||"|j rdndz���	�	|_XdSt�d|
|��|_Yt]j7t]j8||z|��t]j9��t]j:|��t]j8||����|_Zt�|jTdj[|j|jsdndd|zd||���|_\t]j7t]j8d|z|��t]j:|��t]j9��t]j8|d����|_]t]j7t]j8d|z|��t]j:|��t]j9��t]j8|d����|_^|�sEt]j7t]j8||��t]j9��t]j:|��t]j8||����|__tj`|jd��|_at�|jTdj[|jajb|js|�d|�d�n|�d�d|zd||���|_ct]j7t]j8|jsd|zn||d���t]jd��t]j:|��t]j8|dd�����|_edSdS)Nrznot implementedz(no language model emb without identities�)�lmaxr�precomputedizIesm is required when lm_embedding_type is not None and not 'precomputed'.)�emb_dim�feature_dims�sigma_embed_dim)r3r4r5�lm_embedding_dimr-zcurrently not supportedT)�	in_irreps�	sh_irreps�25out_irreps�n_edge_features�hidden_features�residual�26batch_norm�dropout�faster�tp_weights_layers�edge_groups�	depthwiser(r&z4x0e + 2x1e + 4x0o + 2x1o)�	irreps_in�27irreps_out�internal_weights�shared_weights�����z2x1o + 2x1ez1x1o + 1x1eF)r7r8r9r:r<r>r=�2ezx0o + �x0e�x0o)�bias)f�superr%�__init__�28t_to_sigma�in_lig_edge_featuresr5�lig_max_radius�rec_max_radius�include_miscellaneous_atoms�cross_max_distance�dynamic_max_cross�center_max_distance�distance_embed_dim�cross_distance_embed_dimr�Irreps�spherical_harmonicsr8�ns�nv�scale_by_sigma�
norm_by_sigma�device�29no_torsion�smooth_edges�30odd_parity�timestep_emb_func�separate_noise_schedule�confidence_mode�num_conv_layers�num_prot_emb_layers�asyncronous_noise_schedule�affinity_prediction�fixed_center_conv�no_aminoacid_identities�differentiate_convolutions�reduce_pseudoscalars�atom_confidence�atom_num_confidence_outputs�sidechain_pred�lm_embedding_typer#�ImportError�get_batch_converter�batch_converter�torchr�Identity�lm_head�contact_head�	embed_dim�lmrr�lig_node_embedding�31Sequentialr�ReLU�Dropout�lig_edge_embeddingr
�rec_node_embedding�rec_edge_embedding�rec_sigma_embeddingr�misc_atom_node_embedding�misc_atom_edge_embedding�ar_edge_embedding�la_edge_embedding�cross_edge_embeddingr�lig_distance_expansion�rec_distance_expansion�cross_distance_expansionr�range�min�lenr�append�32ModuleList�rec_emb_layers�embed_also_ligand�lig_emb_layers�conv_layers�sidechain_predictor�BatchNorm1d�atom_confidence_predictor�confidence_predictor�center_distance_expansion�center_edge_embeddingr9�33final_conv�tr_final_layer�rot_final_layer�final_edge_embedding�FullTensorProduct�final_tp_torrD�
tor_bond_conv�Tanh�tor_final_layer)=�selfrNr^rbrOr5�sh_lmaxrZr[rerPrQrSrUrVrWr_r\r]�use_second_order_reprr=rTr>r`rarcrprd�confidence_dropout�confidence_no_batchnormrgrh�parallel�parallel_aggregators�num_confidence_outputsrnrirjrRrkr@rfrlr�rmro�depthwise_convolutionr6ry�alphabet�atom_encoder_class�	irrep_seqr��ir7r9�layerr�r��34input_size�	__class__s=                                                            �r rMzCGModel.__init__"s����b	�g�t���%�%�'�'�'��1�}�}�}�/�}�}�}�+�	6��%�%�5�
&�%�35�%���$8��!�� 7�>�1�1�Q�>��.���,���,���+F��(�"4���!2���#6�� �"4���(@��%���6�6�G�6�D�D����r������,���*������$���(���$���!2���'>��$�.���.���#6�� �*D��'�#6�� �!2���'>��$�*D��'�$8��!�.���+F��(�,���!2����$� ���
�-�
/�
/�#���&�.�!�_����3�3D�E�E�L�B��#+�#?�#?�#A�#A�D� ���*�*�,�,�B�J�#�h�/�/�1�1�B�O�!�|���D�G�(��"4�"4��)�+�#36�#37�#38���39#%�-��I�*�_�<�?Q�Q�SU�V�V��G�I�I��J�w����I�b�"���	#40�#41���#5�"4��1��-�	#42�#43�#44���#%�-��I�(�"�-�-��G�I�I��J�w����I�b�"���	#45�#46���$&�=��I�o�r�*�*��G�I�I��J�w����I�b�"���	$47�$48�� ��+�	�,>�,>��2� /�-�-�-�D�)�49-/�M��	�/�,>�>��C�C���	�	��50�7�#�#��	�"�b�!�!�	-�-�D�)�&(�]��	�/�,>�>��C�C���	�	��51�7�#�#��	�"�b�!�!�	&�&�D�"�&(�]��	�/�,D�D�b�I�I���	�	��52�7�#�#��	�"�b�!�!�	&�&�D�"�%'�M��I�o�(@�@�"�E�E��G�I�I��J�w����I�b�"���	%53�%54��!�'7�s�N�L^�&_�&_��#�&6�s�N�L^�&_�&_��#�(8��#�%=�)55�)56��%�"�"�b�*?�AU�V�V�	��3�N�N�5N�N�N�3����*�+�+�	)�	)�A�!�#�a��Y���!�);�"<�"<�=�I�"�3�q�1�u�c�)�n�n�q�.@�#A�#A�B�J�*�#��.�%� !�B�� !�B���%���!�|�A�,A�(A�"3��/�
�
�
�E�
�!�!�%�(�(�(�(� �m�N�;�;���!2����	@��N��.�/�/�
-�
-��%�c�!�S��^�^�a�-?�&@�&@�A�	�&�s�1�q�5�#�i�.�.�1�2D�'E�'E�F�57�.�'�"�n�)�$%��F�$%��F�!�)�#�"�a�<�E�0E�,E�&7� !�3�
�
�
���%�%�e�,�,�,�,�"$�-��"?�"?�D�����*�,?�/�,Q�R�R�	&�	&�A�!�#�a��Y���!�);�"<�"<�=�I�"�3�q�1�u�c�)�n�n�q�.@�#A�#A�B�J�*�#��.�%� !�B�� !�B���%���!�|�A�,A�(A�"3�6�V�A�A� �$7�/�$I�A�$M�M�M�!�!�ST�/�!���E�$
���u�%�%�%�%��=��5�5����	�'-�#�C�(;�o�(M�s�S\�~�~�`a�Oa�$b�$b�c�6�!%�#�	(�(�(�D�$���X	�#�%8�8�A�=�=��0�8�b�b�b�9�9��
��#�
 �13���I�j�"�-�-�.E�X�B�N�2�&�&�&�2�;�=�=��G�I�I��J�1�2�2��I�b�"�%�%�.E�X�B�N�2�&�&�&�2�;�=�=��G�I�I��J�1�2�2��I�b�"=��"B�C�C�582�592��.� �60�(*�
��	�*�b�)�)�*A�T���r�"�"�"�r�{�}�}���	�	��61�-�.�.��	�"�b�!�!�*A�T���r�"�"�"�r�{�}�}���	�	��62�-�.�.��	�"�4�T�=U�8\���[\�]�^�^�63)�64)�D�%�%�%�.>��(�*<�.�.�D�*�*,���	�,��>��C�C���	�	��65�7�#�#��	�"�b�!�!�	*�*�D�&�5��*�2�.�9��.�04��R�=�=�]� !�B����%����D�O�#%�-��	�!�o�-�r�2�2��66�7�#�#���	�	��	�"�a� � �	#�#�D��$&�=��	�!�o�-�r�2�2��67�7�#�#���	�	��	�"�a� � �	$�$�D� ��
�,.�M��I�0�"�5�5��G�I�I��J�w�'�'��I�b�"�%�%�	-�-��)�%'�$8����$N�$N��!�%;�"�.�r�2�=�"�/�:�;?�?�Z�"�3�3�B�3�3�3�3�SU�PZ�PZ�PZ�$%��F�"�#�)�&�&�&��"�(*�}��I�D�O�C�a�"�f�f��R�e�T�T�T��G�I�I��J�w�'�'��I�b�!�%�0�0�0�	(�(��$�$�$�#
�
r"c��t|dd��}||vr||S||vr||S	||S#t$r||cYSwxYw)N�68edge_types�)�getattr�	Exception)�data�primary_key�fallback_keyr�s    r �_resolve_edge_storezCGModel._resolve_edge_store~s{���T�<��4�4�69��*�$�$���$�$��:�%�%���%�%�	&���$�$���	&�	&�	&���%�%�%�%�	&���s�3�A�Ac�0�|�|dd��S)N)�ligandr�)r��lig_bondr��r��r�r�s  r �_ligand_edge_storezCGModel._ligand_edge_store�s#���'�'�� �,�70�71�	72r"c�0�|�|dd��S)N)�receptorr�)r��rec_contactr�r�r�s  r �_receptor_edge_storezCGModel._receptor_edge_store�s#���'�'��$�3�73�74�	75r"c	��|�|��\}}}}}|�|��}|�|��}|js76Jd���t	t|j����D]_}tj|||dd|j	�f||dd|j	�fgd��}|j||||||���}�`|||||fS)Nzotherwise reimplement paddingrrrG��edge_weight)77�build_lig_conv_graphrzr~r�r�r�r�rt�catrZ)	r�r��
lig_node_attr�lig_edge_index�
lig_edge_attr�lig_edge_sh�lig_edge_weight�l�78edge_attr_s	         r �ligand_embeddingzCGModel.ligand_embedding�s��UY�Un�Un��V79�V80�R�
�~�}�k�?��/�/�
�>�>�
��/�/�
�>�>�
��%�F�F�'F�F�F�%��s�4�.�/�/�0�0�	�	�A���!�!�.��"3�Y�t�w�Y�">�?�!�.��"3�Y�t�w�Y�">�?��81�
��J�3�D�/��2�����+����M�M��n�m�[�/�Y�Yr"c82�b��|�|��}t|dd���s)|jdv�r)d�|djD���t	�dt83��rd��D���d�t
���D���|����\}}}|�|�	|dj84j��|jjgd�	��}tj�fd85�t
|d|jj��D��d���}tj|dj86|gd
���|d_87|�|��\}}	}88}|�|��}|�|	��}	t%t'|j����D]n}tj|	||jdd|j�f||jdd|j�fgd
��}
|j|||j|
|89|���}�o||d_|	|_|90|_||_|�|�|jd����}|djdz}|dd�d|j�f||djz|dd�d|j�f<|j||dj|jdz}	|�|��\}}}}}|||||||j|	|j|jf91S)Nr��
rec_node_attr)Nr2c��g|]	}|D]}|���92Sr�r���.0r��ss   r �93<listcomp>z%CGModel.embedding.<locals>.<listcomp>�s%��M�M�M�1�1�M�M�a�Q�M�M�M�Mr"rc��g|]	}|D]}|���94Sr�r�r�s   r r�z%CGModel.embedding.<locals>.<listcomp>�s%�� A� A� A�q�q� A� A�!�� A� A� A� Ar"c��g|]	\}}||f��95Sr�r�)r�r�r�s   r r�z%CGModel.embedding.<locals>.<listcomp>�s ��E�E�E���1�a��V�E�E�Er"F)�repr_layers�return_contactsc�\��g|](\}}|dt�|d�����)S)Nr)r�)r�r��t�	sequencess   �r r�z%CGModel.embedding.<locals>.<listcomp>�sH������ �A�q��0�C�	�!��Q��0�0�0�1���r"�representations��dimrGrr��tr) r��hasattrrp�sequence�96isinstance�list�	enumeratersry�to�xr^�97num_layersrtr��build_rec_conv_graphrr�r�r�r��98edge_indexrZr��
rec_edge_attr�edge_shr�r�rb�	complex_t�batchr�)r�r��receptor_edge_store�batch_labels�99batch_strs�batch_tokens�out�100rec_lm_embr�r��rec_edge_sh�rec_edge_weightr�r��
rec_sigma_embr�r�r�r�r�r�s                    @r �	embeddingzCGModel.embedding�s����"�7�7��=�=���t�J�'��9�9�-	>��%�-B�B�B�M�M��Z�(8�(A�M�M�M�	��i��l�D�1�1�B� A� A�I� A� A� A�I�E�E�	�)�0D�0D�E�E�E�	�9=�9M�9M�i�9X�9X�6��j�,��g�g� �O�O�D��$4�$6�$=�>�>�!%��!3� 4�$)�����101#�Y�����$-�c�2C�.D�T�W�EW�.X�$Y�$Y��������102�&+�Y��Z�0@�0B�J�/O�UW�%X�%X�%X��Z� �"�IM�Ib�Ib�cg�Ih�Ih�F�M�=�+�� �3�3�M�B�B�M� �3�3�M�B�B�M��3�t�2�3�3�4�4�
�
��"�Y�%�%�&9�&D�Q�&G��4�7��&R�S�%�&9�&D�Q�&G��4�7��&R�S��103�
��104�!7�� 3�A� 6�!�'�2��� /�!�!�!�
�
�.;�D���*�0=��-�*5��'�.=��+��0�0��1G�1G���W[�H\�1]�1]�^�^�
��Z�(�6��:�
�&3�A�A�A�y���y�L�&A�M�RV�Wa�Rb�Rh�Di�&i�
�a�a�a��4�7��l�#�+�9�M����"�#6�#A�!�#D�E�=105�106�
�VZ�Uj�Uj��V107�V108�R�
�~�}�k�?�109
�������*���'��+�110�	111r"c112�L����jr�djdz�d_�js�j�fd�dD���\}}}n�fd�dD��\}}}�����\113}}}}}	}114}}}
}�jr|dzdz�d��}n�j}���|��\}}}}}��	|��}tj||115gd�	��}|dt|��z|d<tj|||t|��ztj
|dg�116��gd�	��}tj||||gd�	��}tj|||
|gd�	��}tj|	��rtj|	|||gd�	��n/tjt|d��df|j���}t|d��t|d��t|d��zt|d��t|d��zt|d��z}}}t#t�j����D�]M}|t�j��dz117kr�tj|||dd�j�f||dd�j�fgd��}�jr&|d|�|||�|||�||d�g}�j||||||�
��}��tj|d|�||dd|�fd�j�f||dd|�fd�j�fgd��}�jr|d|�|||�g}�j|||dd�d|�f||d|�|d|��
��}��O|dt|���}�j�r#�j�jzdkrItj|dd�d�j�f|dd��jr�jn�jd�fgd�	��n|dd�d�j�f}�jr<��|��}|dd�d�j�f} |dd��jd�f}n)tjt|��f|j���} ��t=|�djd�	����� d�	��}!|!| fS��!���\}"}#}$��"|#��}#�j#r-tj|#||"dd�j�fgd��}#n,tj|#||"dd�j�fgd��}#��$||"|#|$�j%���}%|%dd�dd�f�j&s|%dd�dd�fndz}&|%dd�dd�f�j&s|%dd�dd�fndz}'�j'r)tj��fd�dD��d�	���_(nR�j)r&��*�j+d���_(n%��*�j+d���_(tj,�-|&d�	���d��}(|&|(z��.tj|(�j(gd�	����z}&tj,�-|'d�	���d��})|'|)z��/tj|)�j(gd�	����z}'�j0rw|&|�d��z}&|'tcj2|�3�����d���4�djj��z}'d}*�j5rI|t|��d�}118��6|119��}*|*dd�dd�f|*dd�dd�fz}*�j7s#�dj8�9��dkr|&|'tj:d�j���|*fS��;���\}+},}-}.}/�dj<|+d�dj<|+dz120}0||+d||+dz}1t{j>d|0dd���}2��?|.|2|,d��}.tj|-||,dd�j�f|1|,dd�j�fgd��}-��@||,|-|.�dj8�9��d|/���}3��A|3��� d��}3��B���}4|�dj|4jCd�dj8}5�j0r�|3tjDtjEt�j2|5�3���G�������H���4�djj����z}3|&|'|3|*fS)Nr�rc�*��g|]}�j|��Sr��r��r��121noise_typer�s  �r r�z#CGModel.forward.<locals>.<listcomp>s ���T�T�T��$�.��,�T�T�Tr"�r��rot�torc�*��g|]}�j|��Sr�r�r�s  �r r�z#CGModel.forward.<locals>.<listcomp>s-���.�.�.�/9���z�*�.�.�.r"r0�rr�)�dims�r^rGr�r�)�	out_nodes��	c�P��g|]"}���j|����#Sr��rbr��r�rr�r�s  ��r r�z#CGModel.forward.<locals>.<listcomp>��.���k�k�k�122��'�'���z�(B�C�C�k�k�kr"r�r��123rHT�	component��	normalize�
normalization�mean�r�reducer�)Irjr�rdrNr�rT�	unsqueezerS�build_cross_conv_graphr�rtr�r��flip�	is_tensor�onesr^r�r�rZrkrerfrlr[rmr�rn�zerosr�r124r��squeeze�build_center_conv_graphr�rir��125num_graphsrarc�graph_sigma_embrgrbr��linalg�vector_normr�r�r\r�126score_norm�cpur�ror�r_�	edge_mask�sum�empty�build_bond_conv_graph�posrrYr�r�r�r�r��sqrt�tensorr�numpy�float)6r�r��tr_sigma�	rot_sigma�	tor_sigmar�r�r�r�r�r��rec_edge_indexr�r�r��cross_cutoff�
lr_edge_index�lr_edge_attr�127lr_edge_sh�rev_lr_edge_sh�lr_edge_weight�	node_attrr��	edge_attrr�r��s1�s2�s3r�r��scalar_lig_attrrm�128confidence�center_edge_index�center_edge_attr�center_edge_sh�global_pred�tr_pred�rot_pred�tr_norm�rot_normro�	tor_bonds�tor_edge_index�
tor_edge_attr�tor_edge_sh�tor_edge_weight�tor_bond_vec�
tor_bond_attr�tor_bonds_sh�tor_pred�ligand_edge_store�129edge_sigmas6``                                                    r �forwardzCGModel.forward�s"�����'�	8�!%�j�!1�!3�a�!7�D�����#�	�-<�T�_�T�T�T�T�?S�T�T�T�.�*�H�i���.�.�.�.�=Q�.�.�.�*�H�i��
�N�N�4� � �	130������������!�	3�$�q�L�2�-�8�8��;�;�L�L��2�L�RV�Rm�Rm��,�S131�S132�O�
�|�Z����0�0��>�>���I�}�m�<�!�D�D�D�	�(��+�c�-�.@�.@�@�
�a���Y�����]�!3�!3�3��133�=��s�3�3�3�	
��134�135�136�137��I�}�l�M�<�X�^_�`�`�`�	��)�[�*�k�>�R�XY�Z�Z�Z�����/�/�
O�E�I�����X�^_�`�`�`�`���S��A��/�/��3�J�<M�N�N�N�	�
��q�!�"�"���q�!�"�"�S��q�)9�%:�%:�:���q�!�"�"�S��q�)9�%:�%:�:�S��PQ�AR�=S�=S�S��B���s�4�+�,�,�-�-�$	�$	�A��3�t�'�(�(�1�,�,�,�"�Y�!�!�*�Q�-��4�7��":�;�!�*�Q�-��4�7��":�;��138�
��139��2�j�",�S�b�S�/�:�b��e�3D�j�QS�TV�QV�FW�Yc�df�dg�dg�Yh�!i�J�/�D�,�Q�/����� +����	�	�#�Y�!�#�2�#��!�*�Q����V�"4�i���i�"?�@�!�*�Q����V�"4�i���i�"?�@��140�
��141��2�F�",�S�b�S�/�:�b��e�3D�!E�J�/�D�,�Q�/���q�q�q�#�2�#�v�&���C�R�C�L� +�C�R�C� 0����	�	�"�"6�C�
�$6�$6�"6�7�
���	/��'�$�*B�B�a�G�G��	�%�a�a�a��4�7��l�3�%�a�a�a�d�6O�+\�4�7�7�UY�U\�)]�)_�)_�&_�`�������#�1�1�1�i���i�<�0�
��#�
b�"&�"@�"@��"Q�"Q��"1�!�!�!�5W�t�7W�5W�2W�"X��"1�!�!�!�T�5U�5W�5W�2W�"X���"'�+�s�=�/A�/A�.C�M�L`�"a�"a�"a���2�2��_�d�8�n�.B��J�J�J����g�"�g�o�o�
���.�.�>B�>Z�>Z�[_�>`�>`�;��+�^��5�5�6F�G�G���!�	�$�y�!�=�1B�1�1E�y���y�1P�#Q�R�TV� � ��� %�y�!�=�1B�1�1E�y���y�1P�#Q�R�TV� � ���o�o������o�&�142�143���a�a�a��!��e�$�4�?�(Y��A�A�A�q��s�F�(;�(;�XY�Z���q�q�q�!�A�#�v�&�D�O�*Z�+�a�a�a����e�*<�*<�YZ�[���'�	P�#(�9�k�k�k�k�k�Vj�k�k�k��$�$�$�D� � ��
,�	P�#'�#9�#9�$�.��:M�#N�#N�D� � �#'�#9�#9�$�.��:N�#O�#O�D� ��,�*�*�7��*�:�:�D�D�Q�G�G���G�#�d�&9�&9��I�w�� 4�5�1�=�=�=�'144�'145�146���<�+�+�H�!�+�<�<�F�F�q�I�I���h�&��)=�)=��I�x��!5�6�A�>�>�>�*147�*148�149����	��� 2� 2�1� 5� 5�5�G��#�.������"A�"A�"K�"K�A�"N�"N�"Q�"Q��X�� �'�#�#��H�����	M�%�c�-�&8�&8�&:�&:�;�M�!�5�5�m�D�D�N�+�A�A�A�s��s�F�3�n�Q�Q�Q����V�6L�L�N��?�	Y�d�8�n�6�:�:�<�<��A�A��H�e�k�!�D�K�&H�&H�&H�.�X�X�QU�Qk�Qk��R150�R151�N�	�>�=�+���H�~�)�)�A�,�7�$�x�.�:L�Y�WX�\�:Z�Z��%�i��l�3�m�I�a�L�6Q�Q�
��-��,�$�k�152�153�154���'�'��\�.�QR�BS�5T�U�U���	���n�Q�/��4�7��:�;��n�Q�/��4�7��:�;�
�155
�
156�157�
��%�%������8�n�.�2�2�4�4��'�&�158�159���'�'��1�1�9�9�!�<�<�� �3�3�D�9�9���t�H�~�3�4�5F�5Q�RS�5T�U���N�$�160�161���	��%�*���U�-�j�n�n�.>�.>�.D�.D�.F�.F�G�G�H�H�N�N�P�P�S�S���N�$�+���#�#��H�162��(�N�:�:r"c	��������jd��}�����\}}}}}�jr)t	j��fd�dD��d����_nR�jr&���jd���_n%���jd���_��	���\}}	}163}}�dj164|d�dj165|d	z166}
||d	||dz}tjd167|
dd�
��}��
|||	d	��}t	j|168||	dd�j�f||	d	d�j�fgd��}169��||	|170|�dj���d|���}��|���d��}�����}|�dj|jd	�dj}�jr�|t	jt	jt5j|���������������dj j!����z}d	d	|d	fS)Nrc�P��g|]"}���j|����#Sr�rr
s  ��r r�z-CGModel.torsional_forward.<locals>.<listcomp>�rr"rrr�r�r�r�rrHTrrrGrr)"rNr�r�rcrtr�r rgrbr(r)rrYr�rZr�r%r&r�rr�r�r�r\r*r+rr#r$r,r-r�r�r^)r�r�r0r�r�r�r�r�rGrHrIrJrKrLrMrNrOrPrQs``                 r �torsional_forwardzCGModel.torsional_forward�s	�����O�O�D�N�5�$9�:�:�	�UY�Uj�Uj��V171�V172�R�
�~�}�k�?��'�	P�#(�9�k�k�k�k�k�Vj�k�k�k��$�$�$�D� � ��
,�	P�#'�#9�#9�$�.��:M�#N�#N�D� � �#'�#9�#9�$�.��:N�#O�#O�D� �QU�Qk�Qk��R173�R174�N�	�>�=�+���H�~�)�)�A�,�7�$�x�.�:L�Y�WX�\�:Z�Z��%�i��l�3�m�I�a�L�6Q�Q�
��-��,�$�k�175�176�177���'�'��\�.�QR�BS�5T�U�U���	���n�Q�/��4�7��:�;��n�Q�/��4�7��:�;�
�178
�
179�180�
��%�%������8�n�.�2�2�4�4��'�&�181�182���'�'��1�1�9�9�!�<�<�� �3�3�D�9�9���t�H�~�3�4�5F�5Q�RS�5T�U���N�$�183�184���	��%�*���U�-�j�n�n�.>�.>�.D�.D�.F�.F�G�G�H�H�N�N�P�P�S�S���N�$�+���#�#��H�185�!�X�q� � r"c���|jrqtj|�d���tjz|ztj���}dtj|��dz�d��zSdS)NrGr�)�maxg�?g�?)r`rt�clip�norm�np�pi�cosr)r��edge_vec�max_norm�normalised_norms    r �get_edge_weightzCGModel.get_edge_weightsm����	J�#�j����2��)>�)>���)F��)Q�WY�W\�]�]�]�O��%�)�O�4�4�s�:�E�E�b�I�I�I�I��sr"c	�B����jr/tj��fd�dD��d����d_nj�jr2���djd���d_n1���djd���d_�����}t�dj	�j186�dj��}tj|j|gd���
��}tj|jtj|jd�j�djj�	��gd187��}�dj|d188�
��}tj||gd��}tj�dj�djgd��}|\}}	�dj	|	�
���dj	|�
��z189}190��|191�d�����}tj||gd��}t-j�j|192dd�
��}��|193�j194��}
|||||
fS)Nc�\��g|](}���dj|����)S)r��rb�node_tr
s  ��r r�z0CGModel.build_lig_conv_graph.<locals>.<listcomp>s3���r�r�r�z��'�'��X��(=�j�(I�J�J�r�r�rr"rrr�r�r�r�rGrrTrr)rcrtr��node_sigma_embrgrbrdr�rr)rPr�r��longr9r�shaperOr�r^r�rYrrYr8r`)r�r�rP�radius_edgesr�r9�edge_sigma_embr8�src�dstr]�edge_length_embr�r�s``            r r�zCGModel.build_lig_conv_graphsz�����'�	`�,1�I�r�r�r�r�r�]q�r�r�r��-�-�-�D��N�)�)��
,�	`�,0�,B�,B�4��>�CX�Y\�C]�,^�,^�D��N�)�)�,0�,B�,B�4��>�CX�Y]�C^�,_�,_�D��N�)� �3�3�D�9�9��#�D��N�$6��8K�T�RZ�^�Ma�b�b���Y� 1� <�l�K�Q�O�O�T�T�V�V�195��I�!�+��� �&�r�*��-���>�+�2����
�
�196197�198199�	��h��6�z�!�}�7I�7I�7K�7K�L���I�y�.�9�1�=�=�	��I�t�H�~�/��h��1N�O�QR�S�S�	����S���>�%�c�h�h�j�j�1�D��N�4F�s�x�x�z�z�4R�R���5�5�h�m�m��m�6K�6K�L�L���I�y�/�:�A�>�>�	��(��N�H��K�200�201�202���*�*�8�T�5H�I�I���*�i��+�E�Er"c���|jr|js203Jd���|dj}|�|��}|j}|\}}|dj|���|dj|���z204}|�|�d�����}|}	tj205|j|dd���}206|�||j
��}||	|207|fS)Nz removed support in this functionr�rGr�Trr)rcrgr�r�r�r)rfr�rYrrYr8r`rQ)r�r�r8r�r�rjrkr]rlr9r�r�s            r r�zCGModel.build_rec_conv_graphEs����/�v�4�3R�v�v�Tv�v�v�R���$�&�	�"�7�7��=�=��(�3�208����S��209�#�'����210�211�3�d�:�6F�6J�3�8�8�:�:�6V�V���5�5�h�m�m��m�6K�6K�L�L��#�	��(��N�H��K�212�213�214���*�*�8�T�5H�I�I���)�W�k�9�9r"c�����jr/tj��fd�dD��d����d_nj�jr2���djd���d_n1���djd���d_tj�dj�djgd��}�dj}|\}}�dj	|�215���dj	|�216��z217}��|�d	�����}�dj|d218�219��}tj||gd��}	tj�j|dd�
��}220��|�j��}|||	|221|fS)Nc�\��g|](}���dj|����)S)�	misc_atomrcr
s  ��r r�z6CGModel.build_misc_atom_conv_graph.<locals>.<listcomp>Zs5���u�u�u�R\��'�'��[�(9�(@��(L�M�M�u�u�ur"rrr�rpr�r�)rprprGrTrr)rcrtr�rergrbrdr�r�r)rfr�rYrrYr8r`rP)r�r�r8r�rjrkr]rlrir9r�r�s``          r �build_misc_atom_conv_graphz"CGModel.build_misc_atom_conv_graphWs������'�	f�/4�y�u�u�u�u�u�`t�u�u�u��0�0�0�D���,�,��
,�	f�/3�/E�/E�d�;�FW�F^�_b�Fc�/d�/d�D���,�,�/3�/E�/E�d�;�FW�F^�_c�Fd�/e�/e�D���,��I�t�K�0�2�D��4E�4T�U�WX�Y�Y�	��2�3�>�222����S���$�(������4�t�K�7H�7L�S�X�X�Z�Z�7X�X���5�5�h�m�m��m�6K�6K�L�L���k�*�9�*�Q�-�:L�:L�:N�:N�O���I�~��?��C�C�	��(��N�H��K�223�224�225���*�*�8�T�5H�I�I���*�i��+�E�Er"c�6�td��}tj|���r|dj}|dj}|dj}|dj}|}|r�|������}|������}|������}|������}|������}t|||z|||zd||d���}	n�|dj}|dj}|dj}|dj}|r�|������}|������}|������}|������}t|||||d���}	|r%|	�|djj	��}	|	\}226}|dj|�227��|dj|228�229��z230}|�|�d�����}
|dj
|231�232��}tj||
gd��}tj|j|d	d233���}tj|j|d	d234���}tj|��r+||dj|235���n|}|�||��}|	||||fS)N�DIFFDOCK_RADIUS_ON_CPUr�r�r�'��max_num_neighborsrGr�Trr)r!rtrr)r��detachr$rr�r^rfr�rYrer�rrYr8rr`)r�r��cross_distance_cutoff�
radius_on_cpu�receptor_pos�236ligand_pos�receptor_batch�ligand_batch�cutoffr�rjrkr]rlrir9r��rev_edge_sh�cutoff_dr�s                    r rzCGModel.build_cross_conv_graphqsc��!�":�;�;�
��?�0�1�1�%	��237�+�/�L��h��+�J�!�*�-�3�N���>�/�L�*�F��
/�+�2�2�4�4�8�8�:�:��'�.�.�0�0�4�4�6�6�238�!/�!6�!6�!8�!8�!<�!<�!>�!>��+�2�2�4�4�8�8�:�:�������,�,�.�.����v�n�5�5��V�L�1�1����"'�
���J�J� �239�+�/�L��h��+�J�!�*�-�3�N���>�/�L��
;�+�2�2�4�4�8�8�:�:��'�.�.�0�0�4�4�6�6�240�!/�!6�!6�!8�!8�!<�!<�!>�!>��+�2�2�4�4�8�8�:�:�����%���"'�
���J��	B�#���t�H�~�'9�'@�A�A�J����S��241�#�'����242�243�3�d�8�n�6H������6T�T���7�7��
�
�"�
�8M�8M�N�N���h��6�s�x�x�z�z�B���I�~��?��C�C�	��(��N�H��K�244�245�246���,��N�X�I��[�247�248�249����4�5�5�
'�!�$�x�.�"6�s�";�<�D�D�F�F�F�&�	�250�*�*�8�X�>�>���9�g�{�K�G�Gr"c�p�tj|��rjt|dj||djz|dj||djzd|dj|djd���}nAt|dj|dj||dj|djd���}|dj|d���|dj|d���z251}|�|�d�����}|dj|d���}tj	||gd��}tj|j|d	d252���}tj|��r1||dj|d�
��n|}	|�||	��}253t|dj|dj|j|dj|djd���}|dj|d���|dj|d���z254}|�|�d�����}
|dj|d���}tj	||
gd��}tj|j|d	d255���}|�||j��}|d
j}|dj|d���|dj|d���z256}|�|�d�����}|dj|d���}tj	||gd��}tj|j|d	d257���}d}||||258||||||||fS)Nr�r�rrtrurrGr�Trrrp)rpr�)rtrrr)r�rfr�rYrer�rrYr8rr`rPr�r�)r�r��lr_cross_distance_cutoffr3�lr_edge_vec�lr_edge_length_emb�lr_edge_sigma_embr4r5r�r7�
la_edge_index�la_edge_vec�la_edge_length_emb�la_edge_sigma_emb�la_edge_attr�259la_edge_sh�la_edge_weight�
ar_edge_index�ar_edge_vec�ar_edge_length_emb�ar_edge_sigma_emb�ar_edge_attr�260ar_edge_sh�ar_edge_weights                         r �build_misc_cross_conv_graphz#CGModel.build_misc_cross_conv_graph�s+���?�3�4�4�	�"��Z� �$�'?��Z�@P�@V�'W�W��X��"�%=�d�8�n�>R�%S�S���Z� �&��X��$�"'�
���M�M�#��Z� �$��X��"�(��Z� �&��X��$�"'�
���M��:�&�*�=��+;�+@�+@�+B�+B�C�d�8�n�FX�Yf�gh�Yi�Yn�Yn�Yp�Yp�Fq�q��!�:�:�;�;K�;K�PR�;K�;S�;S�T�T�� ��N�9�-��:J�:O�:O�:Q�:Q�R���y�"3�5G�!H�!�L�L���+��N�K�4�{�261�262�263�264���7�8�8�
*�$�T�(�^�%9�-��:J�%K�L�T�T�V�V�V�)�	�265�-�-�k�8�D�D������!���N�������#���N� �#�
266�267�268�
��;�'�+�M�!�,<�,A�,A�,C�,C�D�t�H�~�GY�Zg�hi�Zj�Zo�Zo�Zq�Zq�Gr�r��!�:�:�;�;K�;K�PR�;K�;S�;S�T�T�� ��N�9�-��:J�:O�:O�:Q�:Q�R���y�"3�5G�!H�!�L�L���+��N�K�4�{�269�270�271�272��-�-�k�4�;N�O�O���4�5�@�
��:�&�*�=��+;�+@�+@�+B�+B�C�d�;�FW�F[�\i�jk�\l�\q�\q�\s�\s�Ft�t��!�8�8��9I�9I�b�9I�9Q�9Q�R�R�� ��-�<�]�1�=M�=R�=R�=T�=T�U���y�"3�5G�!H�!�L�L���+��N�K�4�{�273�274�275�276���
������������
277�
	278r"c	�V�tj|dj�d��tjt|dj�����|djj���d��gd���}tj	|j279df���|djj��tj	|j280df���|djj��}}|�d|dj|dj���|tj
|dj���d��z}|dj|d||dz281}|�|�d�����}|dj|d���}tj||gd��}t%j|j|dd	�282��}|||fS)Nr�rr�r0)�index�sourcerrGTrr)rtr�r�r�aranger�r�r�r^rr�283index_add_r)�bincountr�rYrerfrrYr8)	r�r�r��284center_pos�countr]r9rir�s	         r rzCGModel.build_center_conv_graphs����Y��X��$�.�.�q�1�1���S��h��!5�6�6�7�7�:�:�4��>�;K�;R�S�S�]�]�^_�`�`�
��285�286�287�288�"�K���!�(<�=�=�@�@��h��AQ�AX�Y�Y�[`�[f�
�_�a� �\289�\290�291�"�T�(�^�
�
$�292%�293%��294�	���a�t�H�~�';�D��N�DV��W�W�W��%�.��h��1E�"F�"F�"P�"P�QR�"S�"S�S�295���>�%�j��m�4�z�*�Q�-�7P�P���2�2�8�=�=�R�=�3H�3H�I�I�	��h��6�z�!�}�7I�7I�7K�7K�L���I�y�.�9�1�=�=�	��(��N�H��K�296�297�298���9�g�-�-r"c���|�|��}|jdd�|djf���}|dj|d|dj|dzdz}|dj|d}t
|dj||j|dj|���}|dj|d||dz299}|�|�	d�����}|�300|��}tj|j
|dd	�301��}	|�||j��}302||||	|303fS)Nr�rrr()�batch_x�batch_yrGr�Trr)r�r�r%rfr)r�rrPr�rYr�rrYr8r`)r�r�rP�bonds�bond_pos�304bond_batchr�r]r9r�r�s           r r(zCGModel.build_bond_conv_graphs^�� �3�3�D�9�9��!�,�Q�Q�Q��X��0H�-H�I�N�N�P�P����N�&�u�Q�x�0�4��>�3E�e�A�h�3O�O�ST�T���(�^�)�%��(�3�305����N�������N�(��306�307�308�309���>�%�j��m�4�x�310�1�
�7N�N���/�/��
�
�"�
�0E�0E�F�F�	��-�-�i�8�8�	��(��N�H��K�311�312�313���*�*�8�T�5H�I�I���j�)�W�k�A�Ar")+r&r'r(r)r&r(r*r+r,r+r'r'FTTFTFr-FFFNFrFFFrr.rrFFFTr(rFFFFF)�__name__�314__module__�__qualname__rM�staticmethodr�r�r�r�r�rRrUr`r�r�rqrr�rr(�
__classcell__)r�s@r r%r%!s�����������
��������!#����#������ %���� %�#(�!��/� �$%�� %�$)�#'���"����#�_Z�Z�Z�Z�Z�Z�x315�	&�	&��\�	&�316�317�318�319�320�321�Z�Z�Z�6G322�G323�G324�R\;�\;�\;�|9!�9!�9!�v���(F�(F�(F�T:�:�:�$F�F�F�4?H�?H�?H�BL325�L326�L327�\.�.�.�0B�B�B�B�B�B�Br"r%)&�mathrr,rZrt�e3nnr�e3nn.o3rr�torch.nnr�F�
torch_clusterrr�
torch_scatterr	r328�*onescience.datapipes.diffdock.process_molsrrr
�onescience.utils.diffdockrr�layersrr�
tensor_layersrrr!�esm.pretrainedr#rq�Moduler%r�r"r �<module>r�s�������	�	�	�	���������������������������$�$�$�$�$�$�.�.�.�.�.�.�.�.�/�/�/�/�/�/�/�/�����������3291�0�0�0�0�0�0�0�1�1�1�1�1�1�1�1�@�@�@�@�@�@�@�@�J�J�J�#�6�6�6�6�6�6�6���#�#�#�"����#����MB�MB�MB�MB�MB�e�h�o�MB�MB�MB�MB�MBs�A&�&A0�/A0