MolecularDiffusion.modules.layers.esen.nn.rank2¶
Copyright (c) Meta, Inc. and its affiliates.
This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree.
Classes¶
Output block for predicting rank-2 tensors (stress, dielectric tensor). |
|
Output block for predicting rank-2 tensors (stress, dielectric tensor, etc). |
|
A rank 2 symmetric tensor prediction head. |
Module Contents¶
- class MolecularDiffusion.modules.layers.esen.nn.rank2.Rank2Block(emb_size: int, num_layers: int = 2, edge_level: bool = False, extensive: bool = False)¶
Bases:
torch.nn.ModuleOutput block for predicting rank-2 tensors (stress, dielectric tensor). Applies outer product between edges and computes node-wise or edge-wise MLP.
- Parameters:
- forward(edge_distance_vec, x_edge, edge_index, data)¶
- Parameters:
edge_distance_vec (torch.Tensor) – Tensor of shape (…, 3)
x_edge (torch.Tensor) – Tensor of shape (…, emb_size)
edge_index (torch.Tensor) – Tensor of shape (2, nEdges)
data – LMDBDataset sample
- edge_level = False¶
- emb_size¶
- extensive = False¶
- r2tensor_MLP¶
- scalar_nonlinearity¶
- class MolecularDiffusion.modules.layers.esen.nn.rank2.Rank2DecompositionEdgeBlock(emb_size: int, num_layers: int = 2, edge_level: bool = False, extensive: bool = False)¶
Bases:
torch.nn.ModuleOutput block for predicting rank-2 tensors (stress, dielectric tensor, etc). Decomposes a rank-2 symmetric tensor into irrep degree 0 and 2.
- Parameters:
- forward(edge_distance_vec, x_edge, edge_index, data)¶
- Parameters:
edge_distance_vec (torch.Tensor) – Tensor of shape (…, 3)
x_edge (torch.Tensor) – Tensor of shape (…, emb_size)
edge_index (torch.Tensor) – Tensor of shape (2, nEdges)
data – LMDBDataset sample
- change_mat¶
- edge_level = False¶
- emb_size¶
- extensive = False¶
- irrep2_MLP¶
- scalar_MLP¶
- scalar_nonlinearity¶
- class MolecularDiffusion.modules.layers.esen.nn.rank2.Rank2SymmetricTensorHead(backbone: MolecularDiffusion.modules.layers.esen.nn.utils.BackboneInterface, output_name: str = 'stress', decompose: bool = False, edge_level_mlp: bool = False, num_mlp_layers: int = 2, use_source_target_embedding: bool = False, extensive: bool = False, avg_num_nodes: int = 1.0, default_norm_type: str = 'layer_norm_sh')¶
Bases:
torch.nn.Module,MolecularDiffusion.modules.layers.esen.nn.utils.HeadInterfaceA rank 2 symmetric tensor prediction head.
- ouput_name¶
name of output prediction property (ie, stress)
- sphharm_norm¶
layer normalization for spherical harmonic edge weights
- xedge_layer_norm¶
embedding layer norm
- block¶
rank 2 equivariant symmetric tensor block
- Parameters:
backbone – Backbone model that the head is attached to
decompose – Whether to decompose the rank2 tensor into isotropic and anisotropic components
edge_level_mlp – If true apply MLP at edge level before pooling, otherwise use MLP at nodes after pooling
num_mlp_layers – number of MLP layers
use_source_target_embedding – Whether to use both source and target atom embeddings
extensive – Whether to do sum-pooling (extensive) vs mean pooling (intensive).
avg_num_nodes – Used only if extensive to divide prediction by avg num nodes.
- forward(data: dict[str, torch.Tensor] | torch.Tensor, emb: dict[str, torch.Tensor]) dict[str, torch.Tensor]¶
- Parameters:
data – data batch
emb – dictionary with embedding object and graph data
Returns: dict of {output property name: predicted value}
- avg_num_nodes = 1.0¶
- decompose = False¶
- lmax¶
- output_name = 'stress'¶
- sphharm_norm¶
- use_source_target_embedding = False¶
- xedge_layer_norm¶