CoolFace
Modelpublic

OneScience-Group/DiffDock

sourceHugging Facemitupdated 1mo agoView on Hugging Face
0likes31downloads
tensor_layers.cpython-310.pyc139 linesDownload Raw Back to __pycache__
1o

2�aOj�<�
@s:ddlZddlZddlmZmZmZddlZddlZddl	m3Z4ddlm5mZ
ddlmZddlmZddlmZmZddlmZmZddlmZd	d6�Zdd�ZGd
d�dej7j�Z			ddd�Z			ddejdee8je9jfdej dej deej dej fdd�Z!Gdd�dej10j�Z"Gdd�dej11j�Z#dS) �N)�List�Tuple�Union)�o3)�	BatchNorm)�Linear�
TensorProduct)�scatter�scatter_mean�)�FCBlockcCs�|r;|�d�|�d|�d|�d�|�d|�d|�d|�d|�d�12|�d|�d|�d|�d|�d|r3|n|�d	�g}|S|�d�|�d|�d13�|�d|�d|�d�|�d|�d|�d|r]|n|�d	�g}|S)NZx0ezx0e + zx1o + Zx2ezx2e + zx1e + Zx2ozx2o + Zx0oZx1oZx1e�)�nsZnvZuse_second_order_reprZreduce_pseudoscalarsZ	irrep_seqr
r
�+modelscope/diffdock/models/tensor_layers.py�
get_irrep_seqs .�
�"�rcCsJ|�d�}d}|D]}|�d�\}\}}|t|�dt|�d7}q	|S)Nz + r�x�r)�split�int)ZirrepZirreps�size�ir�m�l�pr
r
r�
irrep_to_size#s14rcs$eZdZ�fdd�Zdd�Z�ZS)�FasterTensorProductc	s t���t�|�t�d�ksJd��t�|�|_t�|�|_ddddd�}ddddd�}|jD]15\}}||t|�<q0|jD]16\}}||t|�<q>|d|d|df|d|d|d|df|d|d|d|df|d|d|dfd�|_td	d17�|j�	�D��|_18dS)Nz	1x0e+1x1oz7sh_irreps don't look like 1st order spherical harmonicsr��0e�1o�1e�0orrrr css�|]	\}}||VqdS)Nr
)�.0�a�br
r
r�	<genexpr>Cs�z/FasterTensorProduct.__init__.<locals>.<genexpr>)�super�__init__r�Irreps�	in_irreps�19out_irreps�str�
weight_shapes�sum�values�weight_numel)	�selfr(�	sh_irrepsr)�kwargsZin_mulsZout_mulsrr��	__class__r
rr&.s$20��zFasterTensorProduct.__init__cCsPiggggd�}}t|j|j���D]2\\}}}|d|f|t|�<|ddkrE|t|��t|t|�j�dd�ddg�|t|�<q|d|ddd�f}	}21d|vrv|d�|d|	�d��|d	�|d�d�|22�d23��d	|vr�|d�|d	|24�d25��	d�t26�d��|d	�|d	|	�d��d��|d�tj
j|d	|27�d28�dd�t29�d
��d|vr�|d	�tj
j|d|30�d31�dd�t32�d
��|d�|d|	�d��d��|d�|d|33�d34��	d�t35�d��d|v�r |d�|d�d�|36�d37��|d�|d|	�d��i}d}|jD]1}
|j|
\}}|d||||�f�t|j�dd�||g�t38�|�||
<|||7}�q'|d�r{tj|ddd�|d<t�|d�d39�|d��d40�|d<|d	�r�tj|d	d41d�|d	<|d	�d42�|d	�d��	d�|d	<|d	�t|d	j�dd43�dg�|d	<|d�r�tj|dd44d�|d<|d�d45�|d�d��	d�|d<|d�t|dj�dd46�dg�|d<|d�r
tj|ddd�|d<t�|d�d47�|d��d48�|d<g}|jD]\}}|�|t|���qtj|dd�S)Nr.rr������).rrr�����r��dimrr �����)�zipr(Zslicesr*Zreshape�list�shape�appendZ	unsqueezer,�npZsqrt�torchZlinalgZcrossr+�cat�matmulZsqueezer))r/Zin_�shZweightZin_dictZout_dictrr�slZsh_0eZsh_1oZweight_dict�start�key�out�_r
r
r�forwardEs� ��","$�$�",49"50��51��52�*53�*54��zFasterTensorProduct.forward��__name__�55__module__�__qualname__r&rH�
__classcell__r
r
r2rr,sr�mean��?c	Cszt|tj�s56Jd��|j}	|j}57|\}}||��|	��|58�}
|
�|�|||||
�}|p1|jd}t||d||d�}|S)z�59    Perform TensorProduct + scatter operation, aka graph convolution.60 61    This function is only for edge_groups == 1. For multiple edge groups, and for larger graphs,62    use tp_scatter_multigroup instead.63    z\This function is only for a single edge group, so edge_attr must be a tensor and not a list.r�r8Zdim_size�reduce)	�64isinstancer?�Tensor�device�dtype�to�mul_r<r	)�tp�fc_layer�	node_attr�65edge_index�	edge_attr�edge_sh�	out_nodesrQ�edge_weight�_device�_dtype�edge_src�edge_dstr)rFr
r
r�tp_scatter_simple�s��66rdrXrYrZr[�edge_attr_groupsr]c		Cs�t|t�s	Jd��|dvsJd��|j}	|j}67|\}}dd�|D�}
t|
�}||jdks1Jd��t|�}t|d�}|p@|jd	}td68d�|jD��}t	j69||f|	|70d�}t	j71||	|72d�}d	}t|�D]c}|
|}||}t||�}||||}}t|t
j�r�||n|}|||�}|r�|�||�n|�|�|||dd�f||dd�f|�}|t||d	|d
d�7}|t	j||d�7}|}~~qc|dkr�t	�|t	�|73�j�}||dd�df}|S)a'74    Perform TensorProduct + scatter operation, aka graph convolution.75 76    To keep the peak memory usage reasonably low, this function does not concatenate the edge_attr_groups.77    Rather, we sum the output of the tensor product for each edge group, and then divide by the number of edges78    z/This function is only for a list of edge groups>r,rNz.Only 'mean' and 'sum' are supported for reducecSsg|]}|jd�qS)r)r<)r!Z79_edge_attrr
r
r�80<listcomp>�sz)tp_scatter_multigroup.<locals>.<listcomp>rz<Sum of edge_attr_groups must be equal to edge_index.shape[1]�__getitem__rcSsg|]}|j�qSr
r7)r!rr
r
rrf�s)rTrUNr,rP)Z	minlengthrN)rRr;rTrUr,r<�len�hasattr�81irreps_outr?�zeros�range�slice�nn�82ModuleListrWr	ZbincountZclampZfinfoZeps)rXrYrZr[rer]r^rQr_r`rarbrcZedge_attr_lengthsZ83total_rowsZnum_edge_groupsZedge_weight_is_indexableZtotal_output_dimZ	final_outZdiv_factorsZ	cur_start�iiZ84cur_lengthZcur_endZcur_edge_rangeZcur_edge_srcZcur_edge_dstZcur_fcZcur_out_irrepsZsummandr
r
r�tp_scatter_multigroup�sH�858687$rqcs@eZdZ									d�fdd	�	Z		88	ddd
�Z�ZS)�TensorProductConvLayerT�NFrr�reluc89s�tt����|�_|�_|�_|�_|90�_t|��_	|
�_91�dur$��|
r�t�|�}t�|�}t�|�}g}g}t
|�D]1\}\}}t
|�D]&\}\}}||D]}||vrlt|�}|�||f�|�|||ddf�qQqGq=t�|�}|��\}�}�fdd�|D�}t||||ddd��_t|��|ddd��_n|	r�td�t|||��_n92tj|||dd	��_|93d94kr�t���jj�����_n������fdd�t|95�D��_t��j��_|r�t|��_ dSd�_ dS)NZuvuTcs(g|]\}}}}}||�|||f�qSr
r
)r!Zi_in1Zi_in2Zi_out�modeZtrain)rr
rrfs��z3TensorProductConvLayer.__init__.<locals>.<listcomp>F)�shared_weights�internal_weights)Z	irreps_inrjrwrvzFaster Tensor Product�rvrc	s"g|]
}t���jj�����qSr
)rrXr.)r!rG)�96activation�dropout�hidden_features�n_edge_featuresr/�tp_weights_layersr
rrfCs	���)!r%rrr&r(r)r0�residual�edge_groupsr�out_size�	depthwiserr'�	enumeraterhr=�sortrrXrZsimplify�linear_2�printr�FullyConnectedTensorProductrr.�fcrlrnror�97batch_norm)r/r(r0r)r|r~r�rzr{Zfasterrr}ryr�Z98irreps_midZinstructions�i�mulZir_in�jrGZir_edgeZir_out�kr2)ryrzr{r|rr/r}rr&�s�99100101102���103104��	105���		�zTensorProductConvLayer.__init__rNrOc106Cs�|jddkr|jddkrtd��|j}|jddkr,tj|jd|jf||jd�}	n2|jdkr@t|j	|j107|||||||�	}	nt|j	|j108|||||||�	}	|jrV|�
|	�}	|jr^|�|	�}	|jrut�|d|	jd|jdf�}109|	|110}	|	�|�}	|	S)NrrzNo edges and no nodes)rUrTr4)r<�111ValueErrorrUr?rkr�rTrrdrXr�rqr�r�r�r~�F�padrV)r/rZr[r\r]r^rQr_rarF�paddedr
r
rrHRsJ112 113��114115 116zTensorProductConvLayer.forward)	TTrsNFrrrtF�NrNrOrIr
r
r2rrr�s�j�rrcs2eZdZ				d117�fdd�	Z	ddd	�Z�ZS)�OldTensorProductConvLayerTrsNc	118	s�tt|���||_||_||_||_|dur|}tj|||dd�|_	}	t119�t120�||�t121�
�t122�|�t123�||	j��|_|rEt|�|_dSd|_dS)NFrx)r%r�r&r(r)r0r~rr�rXrnZ124SequentialrZReLUZDropoutr.r�rr�)125r/r(r0r)r|r~r�rzr{rXr2r
rr&�s"�126�z"OldTensorProductConvLayer.__init__rNrOc127s�d}�jd}	|	|dkr|	|n|	|d}128t�t�|	�|129�}�fdd�|D�}t|j|j|||||||�	}
|jrNt�	|d|
jd|jdf�}|
|}
|j130rV|�131|
�}
|
�|j�}
|
S)Ni��rrcsg|]}�|�qSr
r
)r!Z	cur_range�r\r
rrf�sz5OldTensorProductConvLayer.forward.<locals>.<listcomp>r4)
r<r>Zarray_splitZarangerqrXr�r~r�r�r�rVrU)r/rZr[r\r]r^rQr_Zedge_chunk_sizeZ	num_edgesZ132num_chunksZedge_rangesrerFr�r
r�rrH�s4133�134�� 135z!OldTensorProductConvLayer.forward)TTrsNr�rIr
r
r2rr��s� �r�r�)$Zlogging�os�typingrrrZnumpyr>r?Ztorch.nnrnZtorch.nn.functionalZ136functionalr�Ze3nnrZe3nn.nnrZe3nn.o3rrZ
torch_scatterr	r137ZlayersrrrZModulerrdrorSrqrrr�r
r
r
r�<module>sL	e138�(������139�B