Wigner Functions

e3nn.o3.wigner_D(l: int, alpha: Tensor, beta: Tensor, gamma: Tensor) Tensor[source]

Wigner D matrix representation of \(SO(3)\).

It satisfies the following properties:

  • \(D(\text{identity rotation}) = \text{identity matrix}\)

  • \(D(R_1 \circ R_2) = D(R_1) \circ D(R_2)\)

  • \(D(R^{-1}) = D(R)^{-1} = D(R)^T\)

  • \(D(\text{rotation around Y axis})\) has some property that allows us to use FFT in ToS2Grid

Parameters:
  • l (int) – \(l\)

  • alpha (torch.Tensor) – tensor of shape \((...)\) Rotation \(\alpha\) around Y axis, applied third.

  • beta (torch.Tensor) – tensor of shape \((...)\) Rotation \(\beta\) around X axis, applied second.

  • gamma (torch.Tensor) – tensor of shape \((...)\) Rotation \(\gamma\) around Y axis, applied first.

Returns:

tensor \(D^l(\alpha, \beta, \gamma)\) of shape \((2l+1, 2l+1)\)

Return type:

torch.Tensor

e3nn.o3.wigner_3j(l1: int, l2: int, l3: int, dtype=None, device=None) Tensor[source]

Wigner 3j symbols \(C_{lmn}\).

It satisfies the following two properties:

\[C_{lmn} = C_{ijk} D_{il}(g) D_{jm}(g) D_{kn}(g) \qquad \forall g \in SO(3)\]

where \(D\) are given by wigner_D.

\[C_{ijk} C_{ijk} = 1\]
Parameters:
  • l1 (int) – \(l_1\)

  • l2 (int) – \(l_2\)

  • l3 (int) – \(l_3\)

  • dtype (torch.dtype or None) – dtype of the returned tensor. If None then set to torch.get_default_dtype().

  • device (torch.device or None) – device of the returned tensor. If None then set to the default device of the current context.

Returns:

tensor \(C\) of shape \((2l_1+1, 2l_2+1, 2l_3+1)\)

Return type:

torch.Tensor