Spherical Tensor
There exists 4 types of function on the sphere depending on how the parity affects it. The representation of the coefficients are affected by this choice:
import torch
from e3nn.io import SphericalTensor
print(SphericalTensor(lmax=2, p_val=1, p_arg=1))
print(SphericalTensor(lmax=2, p_val=1, p_arg=-1))
print(SphericalTensor(lmax=2, p_val=-1, p_arg=1))
print(SphericalTensor(lmax=2, p_val=-1, p_arg=-1))
1x0e+1x1e+1x2e
1x0e+1x1o+1x2e
1x0o+1x1o+1x2o
1x0o+1x1e+1x2o
import plotly.graph_objects as go
def plot(traces):
traces = [go.Surface(**d) for d in traces]
fig = go.Figure(data=traces)
fig.show()
In the following graph we show the four possible behavior under parity for a function on the sphere.
This first ball shows \(f(x)\) unaffected by the parity
Then
p_val=1
butp_arg=-1
so we see the signal flipped over the sphere but the colors are unchangedFor
p_val=-1
andp_arg=1
only the value of the signal flips its signFor
p_val=-1
andp_arg=-1
both in the same time, the signal flips over the sphere and the value flip its sign
lmax = 1
x = torch.tensor([0.8] + [0.0, 0.0, 1.0])
parity = -torch.eye(3)
x = torch.stack([
SphericalTensor(lmax, p_val, p_arg).D_from_matrix(parity) @ x
for p_val in [+1, -1]
for p_arg in [+1, -1]
])
centers = torch.tensor([
[-3.0, 0.0, 0.0],
[-1.0, 0.0, 0.0],
[1.0, 0.0, 0.0],
[3.0, 0.0, 0.0],
])
st = SphericalTensor(lmax, 1, 1) # p_val and p_arg set arbitrarily here
plot(st.plotly_surface(x, centers=centers, radius=False))