CoolFace
Modelpublic

OneScience-Group/DiffDock

sourceHugging Facemitupdated 1mo agoView on Hugging Face
0likes32downloads
cg_model.cpython-310.pyc245 linesDownload Raw Back to __pycache__
1o

2�aOj?��@s�ddlZddlZddlZddlZddlmZddlmZddlm	Z	ddl3mZddl
mZmZddlmZmZddlmZmZmZdd	lmZmZd4dlmZmZd5dlmZmZd
d�Z zddl!m"Z"Wne#yqdZ"YnwGdd�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_seqcCstj�|d���dvS)N�>Zon�1�trueZyes)�os�environ�get�lower)�name�r�&modelscope/diffdock/models/cg_model.py�	_env_flagsr)�load_model_and_alphabetcs�eZdZ																						7										
		
	
												d/�fdd�	Zedd��Zdd�Zdd�Zdd�Zdd�Z	dd�Z8dd�Zdd �Zd!d"�Z
d#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Z�ZS)0�CGModel�� ������FT�Nrr�mean max min stdc/<s<tt|���| dksJd��|%r|dusJd��||_||_||r$dnd9}||_|9|_||_|&|_||_	||_10|
|_||_||_
tjj|d�|_|||_|_||_||_||_||_||_||_||_||_||_|	|_|)|_||_||_ |$|_!|%|_"|'|_#|*|_$|,|_%|#|_&|-|_'||_(|dur�d}/n,|dkr�d}/n%t)dur�t*d	��t)|�\}0}1|1�+�|_,t-j.�/�|0_0t-j.�/�|0_1|0j2}/|0|_3t4}2|2|t5|d11�|_6t.�7t.�8||||�t.�9�t.�:|�t.�8||��|_;|2|t<d|/d�|_=t.�7t.�8||�t.�9�t.�:|�t.�8||��|_>t.�7t.�8||�t.�9�t.�:|�t.�8||��|_?|j�rp|2|t@|d12�|_At.�7t.�8|||�t.�9�t.�:|�t.�8||��|_Bt.�7t.�8|||�t.�9�t.�:|�t.�8||��|_Ct.�7t.�8|||�t.�9�t.�:|�t.�8||��|_Dt.�7t.�8|||�t.�9�t.�:|�t.�8||��|_EtFd|13|�|_GtFd||�|_HtFd||�|_ItJ||||*�}3|j�r�Jd
��g}4tK|)�D];}5|3tL|5tM|3�d�}6|3tL|5dtM|3�d�}7tN|6|j|7d|d|d|||dk�o�||(d|.d�}8|4�O|8��q�t.�P|4�|_Q|+|_R|+�rBg}9tK|)�D];}5|3tL|5tM|3�d�}6|3tL|5dtM|3�d�}7tN|6|j|7d|d|d|||dk�o/||(d|.d�}8|9�O|8��qt.�P|9�|_Sg}:tK|)|)|	�D]K}5|3tL|5tM|3�d�}6|3tL|5dtM|3�d�}7tN|6|j|7d|d|d|||dk�oz||(|'�s�dn|5|)|	dk�r�dnd|.d�}8|:�O|8��qKt.�P|:�|_T|-�r�t8|3tL|)|	tM|3�d�dddd�|_U|j�rL|	|)dk�r�||*�r�|n|n|};|j%�r14t.�7t.�8|;|�|�s�t.�V|�nt.�/�t.�9�t.�:|�t.�8||�|�s�t.�V|�nt.�/�t.�9�t.�:|�t.�8||#|��	|_W|};t.�7t.�8|;|�|�st.�V|�nt.�/�t.�9�t.�:|�t.�8||�|�s0t.�V|�nt.�/�t.�9�t.�:|�t.�8||"|j �rDdnd��	|_XdStFd|
|�|_Yt.�7t.�8|||�t.�9�t.�:|�t.�8||��|_ZtN|jTdj[|j|j�sydndd|d||d�|_\t.�7t.�8d||�t.�:|�t.�9�t.�8|d��|_]t.�7t.�8d||�t.�:|�t.�9�t.�8|d��|_^|�st.�7t.�8||�t.�9�t.�:|�t.�8||��|__t�`|jd�|_atN|jTdj[|jajb|j�s�|�d|�d�n|�d�d|d||d�|_ct.�7t.j8|j�sd|n||dd�t.�d�t.�:|�t.j8|ddd��|_edSdS)Nrznot implementedz(no language model emb without identities�)Zlmaxr�precomputedizIesm is required when lm_embedding_type is not None and not 'precomputed'.)�emb_dim�feature_dims�sigma_embed_dim)r,r-r.�lm_embedding_dimr(zcurrently not supportedT)�	in_irreps�	sh_irreps�15out_irreps�n_edge_featuresZhidden_features�residual�16batch_norm�dropoutZfaster�tp_weights_layersZedge_groupsZ	depthwiser#r!z4x0e + 2x1e + 4x0o + 2x1o)Z	irreps_in�17irreps_outZinternal_weightsZshared_weights�����z2x1o + 2x1ez1x1o + 1x1eF)r0r1r2r3r4r6r5�2ezx0o + Zx0eZx0o)Zbias)f�superr �__init__�18t_to_sigma�in_lig_edge_featuresr.�lig_max_radius�rec_max_radius�include_miscellaneous_atoms�cross_max_distance�dynamic_max_cross�center_max_distance�distance_embed_dim�cross_distance_embed_dimrZIrreps�spherical_harmonicsr1�ns�nv�scale_by_sigma�
norm_by_sigma�device�19no_torsion�smooth_edges�20odd_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�ImportErrorZget_batch_converter�batch_converter�torchrZIdentityZlm_headZcontact_headZ	embed_dim�lmrr21�lig_node_embeddingZ22SequentialrZReLUZDropout�lig_edge_embeddingr�rec_node_embedding�rec_edge_embedding�rec_sigma_embeddingrZmisc_atom_node_embeddingZmisc_atom_edge_embeddingZar_edge_embeddingZla_edge_embedding�cross_edge_embeddingr�lig_distance_expansion�rec_distance_expansion�cross_distance_expansionr�range�min�lenr�appendZ23ModuleList�rec_emb_layers�embed_also_ligand�lig_emb_layers�conv_layers�sidechain_predictorZBatchNorm1d�atom_confidence_predictor�confidence_predictor�center_distance_expansion�center_edge_embeddingr2�24final_conv�tr_final_layer�rot_final_layer�final_edge_embeddingZFullTensorProduct�final_tp_torr8�
tor_bond_convZTanh�tor_final_layer)<�selfr=rLrPr>r.Zsh_lmaxrHrIrSr?r@rBrDrErFrMrJrKZuse_second_order_reprr5rCr6rNrOrQr^rRZconfidence_dropoutZconfidence_no_batchnormrUrVZparallelZparallel_aggregatorsZnum_confidence_outputsr\rWrXrArYr7rTrZrqr[r]Zdepthwise_convolutionr/rbZalphabetZatom_encoder_classZ	irrep_seqrp�ir0r2ZlayerrrrsZ25input_size��	__class__rrr<"s(126��27�28��2930�3132��33�34�35�36���������3738�394041�
�42�43�	44�45�4647�48 �	49��zCGModel.__init__cCsRt|dd�}||vr||S||vr||Sz||WSty(||YSw)N�50edge_typesr)�getattr�	Exception)�dataZprimary_keyZfallback_keyr�rrr�_resolve_edge_store~s51�zCGModel._resolve_edge_storecC�|�|dd�S)N)�ligandr�)r�Zlig_bondr��r��r�r�rrr�_ligand_edge_store��52�zCGModel._ligand_edge_storecCr�)N)�receptorr�)r�Zrec_contactr�r�r�rrr�_receptor_edge_store�r�zCGModel._receptor_edge_storec		Cs�|�|�\}}}}}|�|�}|�|�}|jsJd��tt|j��D])}t�|||dd|j	�f||dd|j	�fgd�}|j||||||d�}q"|||||fS)Nzotherwise reimplement paddingrrr9��edge_weight)53�build_lig_conv_graphrcrdrqrlrnrrra�catrH)	r�r��
lig_node_attr�lig_edge_index�
lig_edge_attr�lig_edge_sh�lig_edge_weight�l�54edge_attr_rrr�ligand_embedding�s,�5556���zCGModel.ligand_embeddingc57s6|�|�}t|dd�s�|jdvrqdd�|djD��t�dt�r)dd��D��dd�t��D��|���\}}}|j|�	|dj58j�|jjgd	d59�}t
j�fdd�t|d|jj�D�dd
�}t
j|dj60|gdd
�|d_61|�|�\}}	}62}|�|�}|�|	�}	tt|j��D],}t
�|	||jdd|j�f||jdd|j�fgd�}
|j|||j|
|63|d�}q�||d_|	|_|64|_||_|�|�|jd��}|djd}|dd�d|j�f||dj|dd�d|j�f<|j||dj|jd}	|�|�\}}}}}|||||||j|	|j|jf65S)Nr��
rec_node_attr)Nr+cS�g|]	}|D]}|�qqSrr��.0r��srrr�66<listcomp>��z%CGModel.embedding.<locals>.<listcomp>rcSr�rrr�rrrr��r�cSsg|]\}}||f�qSrr)r�r�r�rrrr��sF)Zrepr_layersZreturn_contactscs(g|]\}}|dt�|d���qS)Nr)rn)r�r��t��	sequencesrrr��s��Zrepresentations�Zdimr9rr��tr) r��hasattrr^Zsequence�67isinstance�list�	enumerater`rb�to�xrLZ68num_layersrar��build_rec_conv_graphrerfrlrnrp�69edge_indexrHr��
rec_edge_attr�edge_shr�rgrP�	complex_t�batchr�)r�r��receptor_edge_storeZbatch_labelsZ70batch_strsZbatch_tokens�outZ71rec_lm_embr�r��rec_edge_sh�rec_edge_weightr�r�Z
rec_sigma_embr�r�r�r�r�rr�r�	embedding�s|7273�74��7576���776���zCGModel.embeddingc678s��jr
�djd�d_�js �j�fdd�dD��\}}}n�fdd�dD�\}}}����\79}}}}}	}80}}}
}�jrH|dd�d	�}n�j}���|�\}}}}}��	|�}t81j||82gdd83�}|d	t|�|d	<t84j|||t|�t85j
|dgd�gd	d86�}t87j||||gdd88�}t89j|||
|gdd90�}t91�|	�r�t92j|	|||gdd93�n
t94jt|d�d	f|jd�}t|d�t|d�t|d�t|d�t|d�t|d�}}}tt�j��D]�}|t�j�d	k�r2t95�|||dd�j�f||d	d�j�fgd
�}�j�r%|d|�|||�|||�||d�g}�j||||||d�}q�t96�|d|�||dd|�fd�j�f||d	d|�fd�j�fgd
�}�j�ri|d|�|||�g}�j|||dd�d|�f||d|�|d|�d�}q�|dt|��}�j�r	�j�jdk�r�t97j|dd�d�j�f|dd��j�r��jn�jd�fgd	d98�n99|dd�d�j�f}�j�r��|�}|dd�d�j�f} |dd��jd�f}nt100jt|�f|jd�} ��t|�djdd101��j d
d102�}!|!| fS��!��\}"}#}$��"|#�}#�j#�r,t103�|#||"d	d�j�fgd
�}#nt104�|#||"dd�j�fgd
�}#�j$||"|#|$�j%d�}%|%dd�dd�f�j&�s_|%dd�dd�fnd}&|%dd�dd�f�j&�sy|%dd�dd�fnd}'�j'�r�t105j��fdd�dD�d	d106��_(n�j)�r���*�j+d��_(n	��*�j+d��_(t107j,j-|&d	d108��d	�}(|&|(��.t109j|(�j(gd	d110��}&t111j,j-|'d	d112��d	�})|'|)��/t113j|)�j(gd	d114��}'�j0�r�|&|�d	�}&|'t1�2|�3���d	��4�djj�}'d}*�j5�r%|t|�d�}115��6|116�}*|*dd�dd�f|*dd�dd�f}*�j7�s3�dj8�9�dk�r?|&|'t117j:d�jd�|*fS��;��\}+},}-}.}/�dj<|+d	�dj<|+d}0||+d||+d	}1t=j>d|0ddd�}2��?|.|2|,d�}.t118�|-||,d	d�j�f|1|,dd�j�fgd
�}-�j@||,|-|.�dj8�9�d|/d�}3��A|3�� d	�}3��B��}4|�dj|4jCd�dj8}5�j0�r�|3t119�Dt120�EtF�2|5�3��G����H��4�djj��}3|&|'|3|*fS)Nr�rc�g|]}�j|�qSr�r��r�Z121noise_type�r�rrr�sz#CGModel.forward.<locals>.<listcomp>�r�Zrot�torcr�rr�r�r�rrr�s122�r*�rr�)Zdims�rLr9r�r�)�	out_nodes��	c�g|]123}���j|��qSr�rPr�r��r�r�rrr���r�r��124r:T�	component��	normalizeZ
normalization�mean�r��reducer�)IrXr�rRr=r�rC�	unsqueezerB�build_cross_conv_graphrhrar�rnZflip�	is_tensorZonesrLrlrsrHrYrSrTrZrIr[rur\�zerosrvr	r��squeeze�build_center_conv_graphrxrWry�125num_graphsrOrQ�graph_sigma_embrUrPr�ZlinalgZvector_normrzr{rJr
�126score_norm�cpur�r]rtrM�	edge_mask�sum�empty�build_bond_conv_graph�posrrGr}r~rr�r��sqrt�tensorr�numpy�float)6r�r�Ztr_sigmaZ	rot_sigma�	tor_sigmar�r�r�r�r�r�Zrec_edge_indexr�r�r�Zcross_cutoff�
lr_edge_index�lr_edge_attr�127lr_edge_shZrev_lr_edge_sh�lr_edge_weight�	node_attrr��	edge_attrr�r��s1�s2Zs3r�r�Zscalar_lig_attrr[Z128confidenceZcenter_edge_indexZcenter_edge_attrZcenter_edge_shZglobal_predZtr_predZrot_predZtr_normZrot_normr]�	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_sigmarr�r�forward�sv�130���131132��	��133"134���,�135��136137�	�$���138��139���44140�141�142�143�144(�$����	145�146��zCGModel.forwardc	s����jd�}����\}}}}}�jr&tj��fdd�dD�dd��_n�jr3���jd��_n	���jd��_��	��\}}	}147}}�d	j148|d�d	j149|d150}
||d151||d}tjd|
dd
d�}��
|||	d152�}t�|153||	dd�j�f||	d154d�j�fgd�}155�j||	|156|�d	j��d|d�}��|��d�}����}|�d	j|jd157�d	j}�jr�|t�t�t�|����������d	j j!��}d158d159|d160fS)Nr�cr�rr�r�r�rrr��r�z-CGModel.torsional_forward.<locals>.<listcomp>r�rr�r�r�r�rr:Tr�r�r9r�r�)"r=r�r�rQrar�r�rUrPr�r�rrGr}rHr~r�r�rr�r�r�r�rJr�r�rr�r�r�r�r�r�rL)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�torsional_forward�sb�161��$����	162�163��zCGModel.torsional_forwardcCsD|jr tj|jdd�tj|tjd�}dt�|�d�d�SdS)Nr9r�)�maxg�?g�?)rNraZclip�norm�npZpiZcosr�)r��edge_vecZmax_normZnormalised_normrrr�get_edge_weights"zCGModel.get_edge_weightcs��jrtj��fdd�dD�dd��d_n�jr'���djd��d_n
���djd��d_����}t�dj	�j164�dj�}t�|j|gd��
�}t�|jtj|jd	�j�djjd165�gd�}�dj|d�
�}t�||gd�}t��dj�djgd�}|\}}	�dj	|	�
��dj	|�
�}166��|167jd	d��}t�||gd�}tj�j|168dd
d�}��|169�j170�}
|||||
fS)Nc� g|]}���dj|��qS)r��rP�node_tr�r�rrr�� z0CGModel.build_lig_conv_graph.<locals>.<listcomp>r�rr�r�r�r�r9r�rTr�r�)rQrar��node_sigma_embrUrPrr�rr�r?r�r��longr�r��shaper>r�rLrir�rrGr1r�)r�r�r�Zradius_edgesr�r��edge_sigma_embr��src�dstr��edge_length_embr�r�rr�rr�sB�171172���$173�zCGModel.build_lig_conv_graphcCs�|jr174|js175Jd��|dj}|�|�}|j}|\}}|dj|��|dj|��}|�|jdd��}|}	t	j176|j|ddd�}177|�||j
�}||	|178|fS)Nz removed support in this functionr�r9r�Tr�r�)rQrUr�r�r�r�rrjr�rrGr1r�r@)r�r�r�r�r�rrr�rr�r�r�rrrr�Es179180$181�zCGModel.build_rec_conv_graphcs"�jrtj��fdd�dD�dd��d_n�jr'���djd��d_n
���djd��d_t��dj�djgd�}�d	j}|\}}�dj	|�182��dj	|�183�}��|jd184d��}�dj|d�185�}t�||gd�}	t
j�j|dd
d�}186��|�j�}|||	|187|fS)Ncr�)�	misc_atomr�r�r�rrr�Zrz6CGModel.build_misc_atom_conv_graph.<locals>.<listcomp>r�rr�r	r�r�)r	r	r9rTr�r�)rQrar�rrUrPrr�r�r�rrir�rrGr1r�r?)r�r�r�r�rrr�rrr�r�r�rr�r�build_misc_atom_conv_graphWs(�188$189�z"CGModel.build_misc_atom_conv_graphcCs�td�}t�|�rR|dj}|dj}|dj}|dj}|}|r?|����}|����}|����}|����}|����}t||||||d||dd�}	n8|dj}|dj}|dj}|dj}|r�|����}|����}|����}|����}t|||||dd�}	|r�|	�|djj	�}	|	\}190}|dj|�191�|dj|192193�}|�|jdd��}
|dj
|194195�}t�||
gd�}tj|j|d	d196d�}tj|j|d	d197d�}t�|�r�||dj|198��n|}|�||�}|	||||fS)NZDIFFDOCK_RADIUS_ON_CPUr�r�r�'�Zmax_num_neighborsr9r�Tr�r�)rrar�r�r��detachr�rr�rLrrkr�rr�rrGr1r�r�)r�r�Zcross_distance_cutoffZ
radius_on_cpuZreceptor_posZ199ligand_posZreceptor_batchZligand_batch�cutoffr�rrr�rrr�r�Zrev_edge_sh�cutoff_dr�rrrr�qsr200201202203204205206�207	208209210�$211����zCGModel.build_cross_conv_graphcCs�t�|�r*t|dj||dj|dj||djd|dj|djdd�}nt|dj|dj||dj|djdd�}|dj|d��|dj|d��}|�|jdd��}|dj|d��}t�	||gd�}t212j|j|d	d213d�}t�|�r�||dj|d�
�n|}	|�||	�}214t|dj|dj|j|dj|djdd�}|dj|d��|dj|d��}|�|jdd��}
|dj|d��}t�	||
gd�}t215j|j|d	d216d�}|�||j�}|d
j}|dj|d��|dj|d��}|�|jdd��}|dj|d��}t�	||gd�}t217j|j|d	d218d�}d}||||219||||||||fS)Nr�r�rrrrr9r�Tr�r�r	)r	r�)rar�rr�r�rrkr�rr�rrGr1r�r�r?r�rj)r�r�Zlr_cross_distance_cutoffr�Zlr_edge_vecZlr_edge_length_embZlr_edge_sigma_embr�r�rr�Z
la_edge_indexZla_edge_vecZla_edge_length_embZla_edge_sigma_embZla_edge_attrZ220la_edge_shZla_edge_weightZ
ar_edge_indexZar_edge_vecZar_edge_length_embZar_edge_sigma_embZar_edge_attrZ221ar_edge_shZar_edge_weightrrr�build_misc_cross_conv_graph�s�222�	�,	223����,	224�225,226��z#CGModel.build_misc_cross_conv_graphc	Cs*tj|dj�d�t�t|dj���|djj��d�gdd�}t�	|j227df��|djj�t�	|j228df��|djj�}}|jd|dj|djd�|t�
|dj��d�}|dj|d||d}|�|jdd��}|dj|d��}t�||gd�}tj|j|dd	d229�}|||fS)Nr�rr�r*)�index�sourcerr9Tr�r�)rar�r�r�Zarangernr�r�rLr�r�Z230index_add_r�Zbincountrwr�rrrrGr1)	r�r�r�Z231center_pos�countr�r�rr�rrrr�s*&�� ��232�233zCGModel.build_center_conv_graphcCs�|�|�}|jdd�|djf��}|dj|d|dj|dd}|dj|d}t|dj||j|dj|d�}|dj|d||d}|�|j	dd��}|�234|�}tj|j
|dd	d235�}	|�||j�}236||||	|237fS)Nr�rrr#)Zbatch_xZbatch_yr9r�Tr�r�)r�r�r�rr�r�rr?rir�r|rrGr1r�)r�r�r�ZbondsZbond_posZ238bond_batchr�r�r�r�r�rrrr�s&239(�240241�zCGModel.build_bond_conv_graph)+r!r"r#r$r!r#r%r&r'r&r"r"FTTFTFr(FFFNFrFFFrr)rrFFFTr#rFFFFF)�__name__�242__module__�__qualname__r<�staticmethodr�r�r�r�r�r�r�r�r�r�r243r�rr�r��
__classcell__rrr�rr !s��^244I_;*ANr )&Zmathrr�r�raZe3nnrZe3nn.o3rrZtorch.nnr�FZ
torch_clusterrrZ
torch_scatterrr	Z*onescience.datapipes.diffdock.process_molsr245rrZonescience.utils.diffdockr
rZlayersrrZ
tensor_layersrrrZesm.pretrainedrr_ZModuler rrrr�<module>s*�