CoolFace
Modelpublic

OneScience-Group/DiffDock

sourceHugging Facemitupdated 1mo agoView on Hugging Face
0likes32downloads
tensor_layers.cpython-311.pyc154 linesDownload Raw Back to __pycache__
12�aOj�<�
���ddlZddlZddlmZmZmZddlZddlZddl	m3Z4ddlm5cmZ
ddlmZddlmZddlmZmZddlmZmZddlmZd	�Zd6�ZGd�dej7j��Z			dd�Z			ddejdee8je9jfdej dej deej dej fd�Z!Gd�dej10j��Z"Gd�dej11j��Z#dS)�N)�List�Tuple�Union)�o3)�	BatchNorm)�Linear�
TensorProduct)�scatter�scatter_mean�)�FCBlockc���|r8|�d�|�d|�d|�d�|�d|�d|�d|�d|�d�12|�d|�d|�d|�d|�d|r|n|�d	�g}n(|�d�|�d|�d13�|�d|�d|�d�|�d|�d|�d|r|n|�d	�g}|S)N�x0ezx0e + zx1o + �x2ezx2e + zx1e + �x2ozx2o + �x0o�x1o�x1e�)�ns�nv�use_second_order_repr�reduce_pseudoscalars�	irrep_seqs     �@/public/home/liuyx19/modelscope/diffdock/models/tensor_layers.py�
get_irrep_seqrs���
14��J�J�J��*�*��*�*�2�*�*�*��>�>��>�>�2�>�>�R�>�>�r�>�>�>��h�h��h�h�2�h�h�R�h�h�r�h�h�G[�Ac���ac�h�h�h�	15�	�	��J�J�J�� � �� � � ��*�*��*�*�2�*�*�*��T�T��T�T�2�T�T�3G�-O�R�R�R�T�T�T�	16�	���c���|�d��}d}|D]E}|�d��\}\}}|t|��dt|��zdzzz
}�F|S)Nz + r�x�r)�split�int)�irrep�irreps�size�ir�m�l�ps       r�
irrep_to_sizer*#sh��
�[�[��
�
�F��D��*�*���H�H�S�M�M�	��6�A�q���A���!�c�!�f�f�*�q�.�)�)����Krc�$��eZdZ�fd�Zd�Z�xZS)�FasterTensorProductc�17��t�����tj|��tjd��ks18Jd���tj|��|_tj|��|_ddddd�}ddddd�}|jD]\}}||t
|��<�|jD]\}}||t
|��<�|d|dz|df|d|dz|dz|df|d|dz|dz|df|d|dz|dfd�|_td	�|j�	��D����|_19dS)20Nz	1x0e+1x1oz7sh_irreps don't look like 1st order spherical harmonicsr��0e�1o�1e�0or/r0r1r2c3�&K�|]\}}||zV��
dS)Nr)�.0�a�bs   r�	<genexpr>z/FasterTensorProduct.__init__.<locals>.<genexpr>Cs*����P�P�&�1�a��A��P�P�P�P�P�Pr)�super�__init__r�Irreps�	in_irreps�21out_irreps�str�
weight_shapes�sum�values�weight_numel)22�selfr;�	sh_irrepsr<�kwargs�in_muls�out_mulsr'r&�	__class__s23         �rr9zFasterTensorProduct.__init__.s����
���������I�i� � �B�I�k�$:�$:�:�:�:�D�
;�:�:���9�-�-����)�J�/�/����!�1�A�6�6���1�A�Q�7�7���~�	!�	!�G�Q�� �G�C��G�G�����	"�	"�G�Q�� !�H�S��W�W����4�=�7�4�=�0�(�4�.�A��4�=�7�4�=�0�7�4�=�@�(�4�.�Q��4�=�7�4�=�0�7�4�=�@�(�4�.�Q��4�=�7�4�=�0�(�4�.�A�	24�25��� �P�P�D�4F�4M�4M�4O�4O�P�P�P�P�P����rc	�p�iggggd�}}t|j|j�����D]�\\}}}|d|f|t|��<|ddkrj|t|���t|t|��j��dd�ddgz��|t|��<��|d|ddd�f}26}	d|vr�|d�|d|	�d��z��|d	�|d�d��|27�d28��z��d	|v�r|d�|d	|29�d30��z�	d��tjd��z��|d	�|d	|	�d���d��z��|d�tj
�|d	|31�d32��d���tjd
��z��d|v�r|d	�tj
�|d|33�d34��d���tjd
��z��|d�|d|	�d���d��z��|d�|d|35�d36��z�	d��tjd��z��d|vr�|d�|d�d��|37�d38��z��|d�|d|	�d��z��i}d}|jD]v}
|j|
\}}|d||||zz�f�t|j��dd�||gz��tj|��z||
<|||zz
}�w|dritj|dd���|d<tj|d�d39��|d���d40��|d<|d	r�tj|d	d41���|d	<|d	�d42��|d	�d��z�	d��|d	<|d	�t|d	j��dd43�dgz��|d	<|dr�tj|dd44���|d<|d�d45��|d�d��z�	d��|d<|d�t|dj��dd46�dgz��|d<|dritj|dd���|d<tj|d�d47��|d���d48��|d<g}|jD]-\}}|�|t|�����.tj|d���S)Nr..rr������).rr/r0�����r1��dimr r2�����)�zipr;�slicesr=�reshape�list�shape�append�	unsqueezer?�np�sqrt�torch�linalg�crossr>�cat�matmul�squeezer<)rB�in_�sh�weight�in_dict�out_dictr'r&�sl�sh_0e�sh_1o�weight_dict�start�key�out�_s                r�forwardzFasterTensorProduct.forwardEs����r��2�R� H� H����t�~�t�~�/D�/D�/F�/F�G�G�	�	�K�G�Q��R�"�3��7�|�G�C��G�G���!�u��z�z�#*�3�r�7�7�#3�#;�#;����R���)�/�0�0��"��5��Q��?�$�$���B��� ���&�z�2�c�1�2�2�g�;�u���7�?�?��T�N�!�!�'�$�-�%�/�/�"�2E�2E�"E�F�F�F��T�N�!�!�'�$�-�"9�"9�"�"=�"=����PR�@S�@S�"S�T�T�T��7�?�?��T�N�!�!�7�4�=�5�?�?�2�3F�3F�#F�"K�"K�B�"O�"O�RT�RY�Z[�R\�R\�"\�]�]�]��T�N�!�!�'�$�-�%�/�/�"�2E�2E�2O�2O�PR�2S�2S�"S�T�T�T��T�N�!�!���"�"�7�4�=�%�/�/�"�2E�2E�2�"�N�N�QS�QX�YZ�Q[�Q[�[�
�
�
��7�?�?��T�N�!�!���"�"�7�4�=�%�/�/�"�2E�2E�2�"�N�N�QS�QX�YZ�Q[�Q[�[�
�
�
�
�T�N�!�!�'�$�-�%�/�/�"�2E�2E�2O�2O�PR�2S�2S�"S�T�T�T��T�N�!�!�7�4�=�5�?�?�2�3F�3F�#F�"K�"K�B�"O�"O�RT�RY�Z[�R\�R\�"\�]�]�]��7�?�?��T�N�!�!�'�$�-�"9�"9�"�"=�"=����PR�@S�@S�"S�T�T�T��T�N�!�!�'�$�-�%�/�/�"�2E�2E�"E�F�F�F������%�	�	�C��)�#�.�H�C��%�c�5�5�3��9�3D�+D�&D�E�M�M��V�\�"�"�3�B�3�'�3��*�4� � ������ �K���
�S�3�Y��E�E��D�>�	�"�Y�x��~�2�>�>�>�H�T�N�"�\����(�(��,�,�k�$�.?����g�b�k�k�
�T�N��D�>�	\�"�Y�x��~�2�>�>�>�H�T�N����(�(��,�,�{�4�/@�/J�/J�2�/N�/N�N��c�"�g�g�
�T�N�&�d�^�3�3�D��$��9M�4N�4N�s�PR�s�4S�WY�VZ�4Z�[�[�H�T�N��D�>�	\�"�Y�x��~�2�>�>�>�H�T�N����(�(��,�,�{�4�/@�/J�/J�2�/N�/N�N��c�"�g�g�
�T�N�&�d�^�3�3�D��$��9M�4N�4N�s�PR�s�4S�WY�VZ�4Z�[�[�H�T�N��D�>�	�"�Y�x��~�2�>�>�>�H�T�N�"�\����(�(��,�,�k�$�.?����g�b�k�k�
�T�N����_�	*�	*�E�A�r��J�J�x��B���(�)�)�)�)��y��"�%�%�%�%r��__name__�49__module__�__qualname__r9rk�
__classcell__�rGs@rr,r,,sS�������Q�Q�Q�Q�Q�.B&�B&�B&�B&�B&�B&�B&rr,�mean��?c	�l�t|tj��s50Jd���|j}	|j}51|\}}||���|	���|52��}
|
�|��|||||
��}|p|jd}t||d||���}|S)z�53    Perform TensorProduct + scatter operation, aka graph convolution.54 55    This function is only for edge_groups == 1. For multiple edge groups, and for larger graphs,56    use tp_scatter_multigroup instead.57    z\This function is only for a single edge group, so edge_attr must be a tensor and not a list.r�rM�dim_size�reduce)	�58isinstancerX�Tensor�device�dtype�to�mul_rSr59)�tp�fc_layer�	node_attr�60edge_index�	edge_attr�edge_sh�	out_nodesrw�edge_weight�_device�_dtype�edge_src�edge_dstr<ris               r�tp_scatter_simpler��s���$��5�<���f�f�e�f�f����G�
�_�F�#��H�h���)�$�$�'�'��0�0�3�3�F�;�;�J��O�O�K� � � �	��I�h���*�	5�	5�B��/�Y�_�Q�/�I�61�"�h�A�	�&�62I�63I�64I�C��Jrr~rr�r��edge_attr_groupsr�c		�h�t|t��s65Jd���|dvs66Jd���|j}	|j}67|\}}d�|D��}
t	|
��}||jdks68Jd���t
|��}t|d��}|p|jd}t	d	�|jD����}tj69||f|	|7071��}tj72||	|7374��}d}t|��D]�}|
|}||z}t||��}||||}}t|tj��r||n|}|||��}|r|�||��n|�|��|||dd�f||dd�f|��}|t!||d|d�
��z
}|tj||���z
}|}~~��|dkr;tj|tj|75��j��}||dd�dfz}|S)a'76    Perform TensorProduct + scatter operation, aka graph convolution.77 78    To keep the peak memory usage reasonably low, this function does not concatenate the edge_attr_groups.79    Rather, we sum the output of the tensor product for each edge group, and then divide by the number of edges80    z/This function is only for a list of edge groups>r?rrz.Only 'mean' and 'sum' are supported for reducec�(�g|]}|jd��S)r)rS)r4�81_edge_attrs  r�82<listcomp>z)tp_scatter_multigroup.<locals>.<listcomp>�s ��P�P�P���)�!�,�P�P�Prrz<Sum of edge_attr_groups must be equal to edge_index.shape[1]�__getitem__rc��g|]	}|j��83SrrL)r4rs  rr�z)tp_scatter_multigroup.<locals>.<listcomp>�s��9�9�9�a�A�E�9�9�9r)rzr{Nr?ru)�	minlengthrr)rxrRrzr{r?rS�len�hasattr�84irreps_outrX�zeros�range�slice�nn�85ModuleListr}r86�bincount�clamp�finfo�eps)r~rr�r�r�r�r�rwr�r�r�r�r��edge_attr_lengths�87total_rows�num_edge_groups�edge_weight_is_indexable�total_output_dim�	final_out�div_factors�	cur_start�ii�88cur_length�cur_end�cur_edge_range�cur_edge_src�cur_edge_dst�cur_fc�cur_out_irreps�summands                              r�tp_scatter_multigroupr��s���$�&��-�-�`�`�/`�`�`�-��_�$�$�$�&V�$�$�$���G�
�_�F�#��H�h�P�P�?O�P�P�P���&�'�'�J��j�&�q�)�)�)�)�E�	*�)�)��*�+�+�O�&�{�M�B�B���/�Y�_�Q�/�I��9�9�2�=�9�9�9�:�:����Y�(8�9�'�QW�X�X�X�I��+�i��v�F�F�F�K��I��O�$�$�$�$��&�r�*�89��j�(���y�'�2�2��%-�n�%=�x��?W�l��!+�H�b�m�!D�!D�R��"���(���� 0�� 4�5�5��#�	-�����N� ;�<�<�<�<�����,�,�,��"�Y�|�Q�Q�Q��/������9J�1K�^�\�\���W�W�l��I�V[�\�\�\�\�	��u�~�l�i�H�H�H�H���	��G�G�
�����k�+�u�{�6�/B�/B�/F�G�G����A�A�A�t�G� 4�4�	��rc�@��eZdZ									d�fd�	Z			d
d�Z�xZS)�TensorProductConvLayerT�NFrr �reluc90�����������tt������|�_|�_|�_|�_|91�_t|���_	|
�_92����|
�r;tj|��}tj|��}tj|��}g}g}t|��D]l\}\}}t|��D]T\}\}}||zD]F}||vr@t|��}|�||f��|�|||ddf���G�U�mtj|��}|���\}�}�fd�|D��}t#||||dd����_t'|���|dd����_nE|	r&t-d��t/|||���_ntj|||d����_|93d	kr$t3���jj������_nC������fd94�t9|95��D���_t;j�j���_|rt?|��nd�_ dS)N�uvuTc�6��g|]\}}}}}||�|||f��Srr)r4�i_in1�i_in2�i_out�mode�trainr)s      �rr�z3TensorProductConvLayer.__init__.<locals>.<listcomp>sB������4�E�5�%��u���q��x��u�5���rF)�shared_weights�internal_weights)�	irreps_inr�r�r�zFaster Tensor Product�r�rc96�L��g|] }t���jj�������!Sr)r
r~rA)r4rj�97activation�dropout�hidden_features�n_edge_featuresrB�tp_weights_layerss  ������rr�z3TensorProductConvLayer.__init__.<locals>.<listcomp>CsL���98�99�100���#�#��G�(�%���
��101�102�103r)!r8r�r9r;r<rC�residual�edge_groupsr*�out_size�	depthwiserr:�	enumerater�rT�sortr	r~r�simplify�linear_2�printr,�FullyConnectedTensorProductr
rA�fcr�r�r�r�104batch_norm)rBr;rCr<r�r�r�r�r��fasterr�r�r�r��105irreps_mid�instructions�i�mul�ir_in�jrj�ir_edge�ir_out�kr)rGs`   `  ``  ``           @�rr9zTensorProductConvLayer.__init__�s���������� 	�$�d�+�+�4�4�6�6�6�"���$���"��� ��
�&���%�j�1�1��
�"����"�-�O��.	��	�)�,�,�I��	�)�,�,�I���:�.�.�J��J��L�#,�Y�#7�#7�
H�
H���<�C��'0��';�';�H�H�O�A�|��7�"'�'�/�H�H��!�Z�/�/� #�J���A�&�-�-�s�F�m�<�<�<�(�/�/��A�q�%��0F�G�G�G��	H�H���:�.�.�J�)���0�0��J��1�����8D����L�106$�����$�!&�
���D�G�#�$�-�-�/�/�%�!%�#�	���D�M�M��
��-�.�.�.�-�i��J�O�O�����8��y�*�U�������!��������$�!���
��D�G�G�107�108�109�110�111�112�113�114�115��{�+�+�116�117�118�D�G��m�D�G�,�,�D�G�3=�G�)�J�/�/�/�4����rrrrsc��|jddkr |jddkrtd���|j}|jddkr/tj|jd|jf||j���}	n�|jdkr"t|j	|j119|||||||�	�	}	n!t|j	|j120|||||||�	�	}	|jr|�
|	��}	|jr|�|	��}	|jr5t!j|d|	jd|jdz121f��}122|	|123z}	|	�|��}	|	S)NrrzNo edges and no nodes)r{rzrI)rS�124ValueErrorr{rXr�r�rzr�r�r~r�r�r�r�r�r��F�padr|)rBr�r�r�r�r�rwr�r�ri�paddeds           rrkzTensorProductConvLayer.forwardRsp����A��!�#�#�	���(:�a�(?�(?��4�5�5�5������A��!�#�#��+�y��q�1�4�=�A��Xa�Xh�i�i�i�C�C���1�$�$�'��G��G��������125�126���,��G��G��������127�128���~�
)��m�m�C�(�(����
+��o�o�c�*�*���=�	��U�9�q�#�)�B�-�)�/�"�:M�*M�&N�O�O�F���,�C��f�f�V�n�n���129r)	TTr�NFrr r�F�Nrrrsrlrqs@rr�r��s�����������������bH�bH�bH�bH�bH�bH�T���5�5�5�5�5�5�5�5rr�c�2��eZdZ				d�fd�	Z	d	d�Z�xZS)130�OldTensorProductConvLayerTr�Nc		����tt|�����||_||_||_||_|�|}tj|||d���x|_	}	tjtj||��tj
��tj|��tj||	j����|_|rt#|��nd|_dS)NFr�)r8r�r9r;r<rCr�rr�r~r��131Sequentialr�ReLU�DropoutrAr�rr�)rBr;rCr<r�r�r�r�r�r~rGs          �rr9z"OldTensorProductConvLayer.__init__�s����	�'��.�.�7�7�9�9�9�"���$���"��� ��
��"�-�O��5��y�*�U�132�133�134�	135���"��-��I�o��7�7��G�I�I��J�w����I�o�r��7�7�	136�137���4>�G�)�J�/�/�/�4����rrrrsc����d}�jd}	|	|zdkr|	|zn|	|zdz}138tjtj|	��|139��}�fd�|D��}t	|j|j|||||||�	�	}
|jr5tj	|d|
jd|jdz140f��}|
|z}
|j141r|�142|
��}
|
�|j��}
|
S)Ni��rrc� ��g|]143}�|��Srr)r4�	cur_ranger�s  �rr�z5OldTensorProductConvLayer.forward.<locals>.<listcomp>�s���N�N�N�Y�I�i�0�N�N�NrrI)
rSrV�array_split�aranger�r~r�r�r�r�r�r|r{)rBr�r�r�r�r�rwr��edge_chunk_size�	num_edges�144num_chunks�edge_rangesr�rir�s   `           rrkz!OldTensorProductConvLayer.forward�s���"���O�A�&�	��?�*�a�/�/��/�
)�
)���.�!�3�	�145�n�R�Y�y�%9�%9�:�F�F��N�N�N�N�+�N�N�N��#��G��G��������146147148149���=�	��U�9�q�#�)�B�-�)�/�"�:M�*M�&N�O�O�F���,�C��?�	'��/�/�#�&�&�C��f�f�Y�_�%�%���150r)TTr�Nr�rlrqs@rr�r��sm�����������H�H�H�H�H�H�@eh�!�!�!�!�!�!�!�!rr�r�)$�logging�os�typingrrr�numpyrVrX�torch.nnr��torch.nn.functional�151functionalr��e3nnr�e3nn.nnr�e3nn.o3rr	�
torch_scatterr152r�layersr
rr*�Moduler,r�r�ryr�r�r�rrr�<module>r�sF������	�	�	�	�%�%�%�%�%�%�%�%�%�%������������������������������������)�)�)�)�)�)�)�)�/�/�/�/�/�/�/�/����������$���[&�[&�[&�[&�[&�%�(�/�[&�[&�[&�J�������P���?�?�153��?��B�I�r�}�,�-�?��|�?���	?�154�5�<�(�?��\�
?�?�?�?�DZ�Z�Z�Z�Z�U�X�_�Z�Z�Z�zA�A�A�A�A����A�A�A�A�Ar