Type at least 2 letters. Enter opens the first result, Esc closes.

    ML for Science · Lesson 10 · Neural operators, symmetry and physics

    Symmetry, group representations and E(3)-equivariant networks

    Advanced 110 min 5 interactive figures 4 videos Colab notebook

    Before this lesson: lesson 09 (real spherical harmonics, rotations of the coefficients), linear algebra lesson 04 (orthogonal matrices) and linear algebra lesson 19 (equivariance and the numerical test). Helpful: deep learning lesson 13 (message passing in graph neural networks). Time: about 110 minutes, plus the notebook.


    Why this matters #

    • Interatomic potentials. ML interatomic potentials such as NequIP, Allegro and MACE predict the energy of a configuration of atoms and get the forces by automatic differentiation. They are used in molecular dynamics of materials, catalysts and liquids. NequIP (Batzner et al., 2022) reports that adding vector (l=1l = 1) features to a scalars-only (l=0l = 0) network lowers the force error for every training-set size they tried.
    • Data efficiency. The symmetry does not have to be learned, so fewer training examples are needed, and the model is exact for orientations it never saw.
    • Geoscience. A three-component seismogram is a vector. The seismic moment tensor of an earthquake and the stress tensor are symmetric 3×33 \times 3 matrices: an isotropic part (1 number) plus a deviatoric part (5 numbers). Wind is a vector field on the sphere.
    • The same algebra as lesson 09. The reason why an SFNO filter may depend on the degree ll but not on the order mm is Schur's lemma, proved here.

    1. Predict first #

    2. The picture #

    Invariance and equivariance #

    Let x=(x1,…,xn)x = (x_1, \dots, x_n) be the positions of nn atoms. Move all atoms by a rotation RR and a shift tt: xi↦Rxi+tx_i \mapsto Rx_i + t. The energy E(x)E(x) must not change: EE is invariant. The force on atom ii must turn with the atoms: Fi(Rx+t)=R Fi(x)F_i(Rx + t) = R\,F_i(x). The forces are equivariant. The two facts are linked: forces are Fi=−∂E/∂xiF_i = -\partial E/\partial x_i, and the gradient of an invariant function is equivariant (Theorem 5 below).

    Interactive figure: loading…

    Move the rotation angle and the shift. The model computes an energy and a force on each atom. The orange arrows are the model run on the moved molecule, f(Rx+t)f(Rx + t). The dashed blue arrows are the old forces turned by RR. For the pair potential (F=−∇EF = -\nabla E) they coincide and the energy does not change. Switch to the "dense layer on raw coordinates": it reads absolute positions, so the arrows split and the energy changes.

    Rotations of the plane: a first look at irreps #

    Start in 2D. Let RαR_\alpha rotate the plane by the angle α\alpha. Write a 2D vector (a,b)(a, b) as the complex number z=a+ibz = a + ib; then RαR_\alpha multiplies zz by eiαe^{i\alpha}. Call a quantity a quantity of frequency mm if a rotation multiplies it by eimαe^{im\alpha}:

    • m=0m = 0: a scalar (temperature, pressure); it does not change.
    • m=1m = 1: a vector (a horizontal wind).
    • m=2m = 2: a quantity that returns to itself after a rotation by 180°180°, for example the traceless part of a symmetric 2×22 \times 2 strain matrix, or an axis without a direction.

    Rotations never mix different frequencies. Two facts follow, and both carry over to 3D:

    • Linear maps. A linear map that commutes with all rotations sends frequency mm only to frequency mm, and there multiplies by one fixed number. So no nonzero equivariant linear map turns a vector into a scalar.
    • Products. If z1z_1 has frequency m1m_1 and z2z_2 has frequency m2m_2, then z1z2z_1 z_2 has frequency m1+m2m_1 + m_2 and zˉ1z2\bar z_1 z_2 has frequency m2−m1m_2 - m_1. For two vectors u↔z1u \leftrightarrow z_1 and v↔z2v \leftrightarrow z_2, zˉ1z2=u⋅v+i (u1v2−u2v1)\bar z_1 z_2 = u\cdot v + i\,(u_1v_2 - u_2v_1) has frequency 0 (the dot product and the 2D cross product), and z1z2z_1 z_2 has frequency 2. So the 4 numbers of uv⊤uv^\top split as 1+1+21 + 1 + 2.

    Three dimensions: degrees and parity #

    Rotations in 3D do not commute, but the same structure holds. The "frequencies" become the degrees l=0,1,2,…l = 0, 1, 2, \dots of lesson 09. A degree-ll quantity has 2l+12l + 1 components:

    • l=0l = 0: 1 number (energy, charge, a distance);
    • l=1l = 1: 3 numbers (a position difference, a force, a velocity);
    • l=2l = 2: 5 numbers (a symmetric traceless 3×33 \times 3 matrix: deviatoric stress, a quadrupole).

    A rotation mixes the 2l+12l + 1 components of one degree among themselves, and never mixes different degrees. Reflections add one more label, the parity: what happens under the inversion x↦−xx \mapsto -x. A vector changes sign (odd). The cross product of two vectors does not, since (−u)×(−v)=u×v(-u) \times (-v) = u \times v (even). The cross product is a pseudovector.

    Nonlinearities need care #

    A network needs nonlinearities. On scalars any function is fine, because a rotation does not change a scalar. On vectors, a function applied to each component separately depends on the choice of axes. Two safe choices for a vector vv: a gate σ(s) v\sigma(s)\,v, where ss is a scalar feature, and a norm nonlinearity ϕ(∥v∥) v\phi(\|v\|)\,v. Both multiply vv by a rotation-invariant number.

    Interactive figure: loading…

    Compare the four nonlinearities while you move the angle. The orange arrows are σ(Rv)\sigma(Rv) (rotate, then apply), the dashed blue arrows are R σ(v)R\,\sigma(v) (apply, then rotate). The gate and the norm nonlinearity give the same arrows (difference about 10−1610^{-16}). Componentwise tanh and ReLU do not. Try 90°90° with tanh: the difference is zero there, because a 90°90° rotation only swaps components and changes signs, and tanh is odd. Equivariance must hold for every angle, and 40°40° breaks it.

    The design of an e3nn-type network #

    Put together, the rules give the whole design of an equivariant network in the style of the e3nn library:

    1. Store each atom's features as a list of irreps, for example 16 scalars, 8 vectors and 4 degree-2 features (16x0e + 8x1o + 4x2e).
    2. Describe each edge (pair of neighbouring atoms) by its length (invariant) and its direction, encoded by the spherical harmonics YlY_l of the unit edge vector.
    3. Combine edge directions with neighbour features by Clebsch–Gordan tensor products.
    4. Mix channels within each degree.
    5. Apply nonlinearities to scalars only, and scale the higher degrees by scalar gates.
    Quick check

    How many components does a feature of degree l=2l = 2 have, and what is a physical example?

    Quick check

    A layer applies tanh⁡\tanh separately to the xx, yy and zz components of every vector feature. Is it rotation-equivariant?

    3. Definitions and main results #

    3.1 Groups, representations and equivariance #

    A group GG is a set of transformations that contains the identity and is closed under composition and inverses. A representation of GG on a vector space VV gives each g∈Gg \in G an invertible matrix ρ(g)\rho(g) with ρ(gh)=ρ(g)ρ(h)\rho(gh) = \rho(g)\rho(h). A map ff is equivariant if

    f(ρin(g) x)=ρout(g) f(x)for all g∈G and all inputs x,f\big(\rho_{\text{in}}(g)\,x\big) = \rho_{\text{out}}(g)\,f(x) \qquad \text{for all } g \in G \text{ and all inputs } x,

    and invariant if ρout(g)=I\rho_{\text{out}}(g) = I (linear algebra lesson 19).

    The groups of 3D space:

    • O(3)O(3): all orthogonal 3×33 \times 3 matrices QQ (Q⊤Q=IQ^\top Q = I). SO(3)SO(3): those with det⁡Q=+1\det Q = +1, the rotations.
    • E(3)E(3): all maps x↦Qx+tx \mapsto Qx + t with Q∈O(3)Q \in O(3) and t∈R3t \in \R^3. SE(3)SE(3): the same with Q∈SO(3)Q \in SO(3).
    • In 3D, det⁡(−I)=−1\det(-I) = -1, so every QQ with det⁡Q=−1\det Q = -1 is −I-I times a rotation. O(3)O(3) is the rotations plus the inversion.

    Translations are handled by the inputs. A network that sees only relative vectors xj−xix_j - x_i is invariant to tt, because these vectors do not change. So the real work is O(3)O(3).

    3.2 Irreducible representations #

    A subspace U⊆VU \subseteq V is invariant if ρ(g) U⊆U\rho(g)\,U \subseteq U for all gg. A representation is irreducible (an irrep) if its only invariant subspaces are {0}\{0\} and VV.

    For a compact group such as SO(3)SO(3) there is an inner product in which every ρ(g)\rho(g) is orthogonal (average any inner product over the group). Then the orthogonal complement of an invariant subspace is invariant too. So every finite-dimensional representation is a direct sum of irreps: in a suitable basis all ρ(g)\rho(g) are block diagonal with irrep blocks.

    The irreps of SO(3)SO(3) (we state this without proof): there is exactly one for each degree l=0,1,2,…l = 0, 1, 2, \dots, of dimension 2l+12l + 1. We call its matrices Dl(R)D^l(R). The irreps of O(3)O(3) add a parity p=±1p = \pm 1: the inversion acts as p Ip\,I. The e3nn library writes them 0e, 1o, 2e, … (e = even, p=+1p = +1; o = odd, p=−1p = -1).

    Irrep Components Examples
    0e 1 energy, charge, a distance ∥xi−xj∥\|x_i - x_j\|, a dot product u⋅vu\cdot v
    0o 1 pseudoscalar: the triple product (u×v)⋅w(u \times v)\cdot w, the sign of a chirality
    1o 3 vector: position difference, force, velocity, a three-component seismogram
    1e 3 pseudovector: u×vu \times v, angular momentum, the magnetic field
    2e 5 symmetric traceless matrix: deviatoric stress or moment tensor, uu⊤−13∥u∥2Iuu^\top - \tfrac13\|u\|^2 I
    Quick check

    uu and vv are two ordinary vectors (1o). Which irrep is their cross product u×vu \times v?

    3.3 Real spherical harmonics and the Wigner-D matrix #

    Lesson 09 defined the real orthonormal spherical harmonics YlmY_l^m, −l≤m≤l-l \le m \le l. Stack the 2l+12l + 1 harmonics of degree ll into a vector Yl(x^)∈R2l+1Y_l(\hat x) \in \R^{2l+1}, for a unit vector x^\hat x. Two facts:

    • The components of YlY_l are homogeneous polynomials of degree ll in (x,y,z)(x, y, z) with zero Laplacian, restricted to the sphere. They are a basis of all such polynomials (a space of dimension 2l+12l + 1).
    • For l=1l = 1 they are 3/(4π)\sqrt{3/(4\pi)} times the coordinates, in the order (y,z,x)(y, z, x) for m=−1,0,1m = -1, 0, 1. The e3nn library reorders them to (x,y,z)(x, y, z).

    Definition. The real Wigner-D matrix Dl(R)∈R(2l+1)×(2l+1)D^l(R) \in \R^{(2l+1)\times(2l+1)} is the matrix with

    Yl(Rx^)=Dl(R) Yl(x^)for all unit vectors x^.Y_l(R\hat x) = D^l(R)\,Y_l(\hat x) \qquad \text{for all unit vectors } \hat x .

    For l=0l = 0, D0(R)=1D^0(R) = 1. For l=1l = 1 in the order (x,y,z)(x, y, z), Y1(Rx^)∝Rx^Y_1(R\hat x) \propto R\hat x, so D1(R)=RD^1(R) = R.

    Proof of Theorem 1
    1. Existence and uniqueness. A component of Yl(Rx^)Y_l(R\hat x) is a homogeneous polynomial of degree ll after a linear change of variables, so it is still homogeneous of degree ll. It still has zero Laplacian, because the Laplacian commutes with rotations. So it lies in the span of the components of YlY_l, and its coefficients in that basis are unique. They are the rows of Dl(R)D^l(R).
    2. Homomorphism. Yl(R1R2x^)=Dl(R1) Yl(R2x^)=Dl(R1) Dl(R2) Yl(x^)Y_l(R_1R_2\hat x) = D^l(R_1)\,Y_l(R_2\hat x) = D^l(R_1)\,D^l(R_2)\,Y_l(\hat x). By the uniqueness of step 1, Dl(R1R2)=Dl(R1) Dl(R2)D^l(R_1R_2) = D^l(R_1)\,D^l(R_2).
    3. Orthogonality. Orthonormality says ∫S2Yl Yl⊤ dΩ=I\int_{S^2} Y_l\,Y_l^\top\,d\Omega = I. Substitute x^→Rx^\hat x \to R\hat x; the area element does not change under rotations, so I=∫Yl(Rx^) Yl(Rx^)⊤ dΩ=Dl(R)(∫YlYl⊤dΩ)Dl(R)⊤=Dl(R) Dl(R)⊤I = \int Y_l(R\hat x)\,Y_l(R\hat x)^\top\,d\Omega = D^l(R)\big(\int Y_l Y_l^\top d\Omega\big)D^l(R)^\top = D^l(R)\,D^l(R)^\top. ■\blacksquare

    Each space of degree-ll harmonics is irreducible (we do not prove it), so DlD^l is the degree-ll irrep. From the definition you also get a formula to compute it: Dl(R)=∫S2Yl(Rx^) Yl(x^)⊤ dΩD^l(R) = \int_{S^2} Y_l(R\hat x)\,Y_l(\hat x)^\top\,d\Omega, an integral that the Gauss grid of lesson 09 computes exactly.

    Link to lesson 09. A real field f=∑lal⊤Ylf = \sum_l a_l^\top Y_l rotated to f(R−1⋅)f(R^{-1}\cdot) has the coefficients Dl(R−1)⊤al=Dl(R) alD^l(R^{-1})^\top a_l = D^l(R)\,a_l. This is the rule al↦Dl(R) ala_l \mapsto D^l(R)\,a_l used there.

    Parity. Yl(−x^)=(−1)l Yl(x^)Y_l(-\hat x) = (-1)^l\,Y_l(\hat x), because the components are homogeneous of degree ll. So spherical harmonics have the parities 0e, 1o, 2e, 3o, …

    Characters. The character of a representation is χ(R)=tr⁡D(R)\chi(R) = \operatorname{tr} D(R). For a rotation by the angle θ\theta about any axis,

    χl(θ)=1+2∑m=1lcos⁡(mθ)=sin⁡((2l+1)θ/2)sin⁡(θ/2).\chi_l(\theta) = 1 + 2\sum_{m=1}^{l}\cos(m\theta) = \frac{\sin\big((2l+1)\theta/2\big)}{\sin(\theta/2)} .

    Reason: about the zz-axis, a rotation turns each pair (Ylm,Yl−m)(Y_l^m, Y_l^{-m}) by the angle mθm\theta (lesson 09), a 2×22 \times 2 block with trace 2cos⁡mθ2\cos m\theta, and leaves Yl0Y_l^0 alone. A rotation by θ\theta about another axis is SRz(θ)S−1SR_z(\theta)S^{-1}, and the trace does not change under this similarity. For l=1l = 1, χ1=1+2cos⁡θ=tr⁡R\chi_1 = 1 + 2\cos\theta = \operatorname{tr} R.

    Interactive figure: loading…

    Choose the degree ll, the rotation axis and the angle. The heat map shows Dl(R)D^l(R) (orange positive, blue negative). Check the readouts: DD⊤=IDD^\top = I to rounding level, and the trace equals the character χl(θ)\chi_l(\theta), which depends only on the angle (change the axis: the matrix changes, the trace does not). For l=1l = 1 the matrix is RR with the rows and columns in the order (y,z,x)(y, z, x). For the zz-axis, notice the 2×22 \times 2 rotation blocks on the pairs (m,−m)(m, -m).

    3.4 Schur's lemma and equivariant linear layers #

    Proof of Theorem 2
    1. ker⁡W\ker W is invariant: if Wv=0Wv = 0, then WD1(g)v=D2(g) Wv=0W D_1(g)v = D_2(g)\,Wv = 0. Since D1D_1 is irreducible, ker⁡W={0}\ker W = \{0\} or V1V_1.
    2. im⁡W\operatorname{im} W is invariant: D2(g) Wv=WD1(g)v∈im⁡WD_2(g)\,Wv = W D_1(g)v \in \operatorname{im} W. So im⁡W={0}\operatorname{im} W = \{0\} or V2V_2.
    3. If W≠0W \ne 0, then ker⁡W≠V1\ker W \ne V_1 and im⁡W≠{0}\operatorname{im} W \ne \{0\}. So ker⁡W={0}\ker W = \{0\} and im⁡W=V2\operatorname{im} W = V_2: WW is invertible. This is (a).
    4. For (b), WW has a complex eigenvalue λ\lambda. Then W−λIW - \lambda I is also equivariant and not invertible, so by (a) it is 0. ■\blacksquare

    For the real irreps DlD^l of SO(3)SO(3), part (b) also holds with a real λ\lambda, because they stay irreducible over C\C. For 2D rotations it does not: the real 2×22 \times 2 block of frequency m≥1m \ge 1 commutes with every rotation–scaling (the complex numbers of section 2).

    Corollary (equivariant linear layers). Let a feature have clc_l channels of degree ll: h=(h(0),h(1),… )h = (h^{(0)}, h^{(1)}, \dots) with h(l)∈Rcl×(2l+1)h^{(l)} \in \R^{c_l \times (2l+1)}, where a rotation acts by h(l)↦h(l)Dl(R)⊤h^{(l)} \mapsto h^{(l)}D^l(R)^\top (each row is one channel). A linear map is SO(3)SO(3)-equivariant exactly when

    h′(l)=Wl h(l)for every l,Wl∈Rcl′×cl.h'^{(l)} = W_l\,h^{(l)} \quad \text{for every } l, \qquad W_l \in \R^{c'_l \times c_l}.

    It mixes channels within each degree, uses the same weights for all 2l+12l + 1 components, and never maps one degree to another. A bias is allowed only on scalars. With parity (O(3)O(3)), channels of different parity do not mix either.

    Proof. Split the map into blocks from one copy of degree ll to one copy of degree l′l'. Each block is equivariant, so by Schur's lemma it is 0 if l≠l′l \ne l' and λI\lambda I if l=l′l = l'. Collect the numbers λ\lambda into WlW_l. A constant output bb is equivariant only if Dl(R) b=bD^l(R)\,b = b for all RR, which forces b=0b = 0 for l≥1l \ge 1. ■\blacksquare

    The same argument is behind lesson 09: a spectral filter on the sphere is equivariant only if it is clIc_l I on each degree.

    Quick check

    How many free weights does an SO(3)SO(3)-equivariant linear map from one l=1l = 1 channel to one l=2l = 2 channel have?

    3.5 The Clebsch–Gordan tensor product #

    Take uu of degree l1l_1 and vv of degree l2l_2. Their tensor product u⊗vu \otimes v (the outer product uv⊤uv^\top, flattened: (2l1+1)(2l2+1)(2l_1 + 1)(2l_2 + 1) numbers) transforms by the Kronecker product Dl1(R)⊗Dl2(R)D^{l_1}(R) \otimes D^{l_2}(R). This representation is reducible.

    Proof by characters (take l1≥l2l_1 \ge l_2)
    1. The trace of a Kronecker product is the product of the traces. So the character of Dl1⊗Dl2D^{l_1} \otimes D^{l_2} is χl1(θ) χl2(θ)=∑m1∑m2ei(m1+m2)θ\chi_{l_1}(\theta)\,\chi_{l_2}(\theta) = \sum_{m_1}\sum_{m_2} e^{i(m_1 + m_2)\theta} (write each χl\chi_l as ∑∣m∣≤leimθ\sum_{|m| \le l} e^{im\theta}).
    2. Count how often each total M=m1+m2M = m_1 + m_2 appears, with ∣m1∣≤l1|m_1| \le l_1 and ∣m2∣≤l2|m_2| \le l_2. For ∣M∣≤l1+l2|M| \le l_1 + l_2 the count is min⁡(l1+l2−∣M∣, 2l2)+1\min(l_1 + l_2 - |M|,\ 2l_2) + 1.
    3. In ∑L=l1−l2l1+l2χL(θ)=∑L∑∣M∣≤LeiMθ\sum_{L = l_1 - l_2}^{l_1 + l_2}\chi_L(\theta) = \sum_L\sum_{|M| \le L} e^{iM\theta}, the term eiMθe^{iM\theta} appears once for each LL in the range with L≥∣M∣L \ge |M|. That is l1+l2−max⁡(∣M∣,l1−l2)+1=min⁡(l1+l2−∣M∣, 2l2)+1l_1 + l_2 - \max(|M|, l_1 - l_2) + 1 = \min(l_1 + l_2 - |M|,\ 2l_2) + 1 times. So the two characters are equal.
    4. For a compact group, the character fixes a representation up to a change of basis (the number of copies of DLD^L inside DD is ∫χD χL dR\int \chi_D\,\chi_L\,dR, by the orthogonality of characters). Every rotation is a rotation by some angle, so the characters agree on all of SO(3)SO(3). ■\blacksquare

    Clebsch–Gordan coefficients. For each allowed LL there is an array CL∈R(2L+1)×(2l1+1)×(2l2+1)C^L \in \R^{(2L+1)\times(2l_1+1)\times(2l_2+1)} that extracts the degree-LL part:

    [(u⊗v)L]M=∑m1,m2CMm1m2L um1vm2,\big[(u \otimes v)_L\big]_M = \sum_{m_1, m_2} C^L_{M m_1 m_2}\,u_{m_1}v_{m_2},
    CL(Dl1(R) u, Dl2(R) v)=DL(R) CL(u,v).C^L\big(D^{l_1}(R)\,u,\ D^{l_2}(R)\,v\big) = D^L(R)\,C^L(u, v).

    DLD^L appears once, so Schur's lemma makes CLC^L unique up to a factor. In practice CLC^L can be computed as the null space of the linear equations C (Dl1(R)⊗Dl2(R))=DL(R) CC\,(D^{l_1}(R) \otimes D^{l_2}(R)) = D^L(R)\,C for a few random RR (the notebook does this). For LL outside the range the null space is {0}\{0\}: this is the selection rule. Parities multiply: pout=p1p2p_{\text{out}} = p_1p_2. So 1o ⊗ 1o → 0e + 1e + 2e, and 1o ⊗ 2e → 1o + 2o + 3o.

    The example to remember: two vectors. For u,v∈R3u, v \in \R^3 (in the basis where D1=RD^1 = R),

    uv⊤=u⋅v3 I⏟L=0: 1 number  +  12(uv⊤−vu⊤)⏟L=1: 3 numbers, from u×v+  12(uv⊤+vu⊤)−u⋅v3 I⏟L=2: symmetric, traceless, 5 numbers.\begin{aligned} uv^\top = {} & \underbrace{\tfrac{u\cdot v}{3}\,I}_{L = 0:\ 1 \text{ number}} \;+\; \underbrace{\tfrac12\big(uv^\top - vu^\top\big)}_{L = 1:\ 3 \text{ numbers, from } u \times v} \\ & +\; \underbrace{\tfrac12\big(uv^\top + vu^\top\big) - \tfrac{u\cdot v}{3}\,I}_{L = 2:\ \text{symmetric, traceless, 5 numbers}} . \end{aligned}

    Each piece transforms on its own: (Ru)⋅(Rv)=u⋅v(Ru)\cdot(Rv) = u\cdot v; (Ru)×(Rv)=R (u×v)(Ru)\times(Rv) = R\,(u \times v) for det⁡R=1\det R = 1; and the symmetric traceless part SS goes to RSR⊤RSR^\top. So 9=1+3+59 = 1 + 3 + 5, and the dot and cross products are the Clebsch–Gordan products 1⊗1→01 \otimes 1 \to 0 and 1⊗1→11 \otimes 1 \to 1.

    Interactive figure: loading…

    Top: choose l1l_1, l2l_2 and the parities. The allowed output degrees light up with their parity, and the dimension count checks the rule. Bottom: drag the tips of uu (blue) and vv (aqua). The panel splits uv⊤uv^\top into the three pieces. Notice that the squared norms add up, because the pieces are orthogonal, and that the L=1L = 1 piece vanishes when uu and vv are parallel.

    The cost of tensor products, and the eSCN trick

    A full tensor product of two features that contain all degrees up to Lmax⁡L_{\max} has O(Lmax⁡3)O(L_{\max}^3) paths (l1,l2)→L(l_1, l_2) \to L, each a dense contraction with O(Lmax⁡3)O(L_{\max}^3) terms: O(Lmax⁡6)O(L_{\max}^6) work in total (Passaro and Zitnick, 2023). This is why most e3nn-style networks use Lmax⁡L_{\max} between 1 and 3.

    The eSCN method rotates each edge onto the polar axis before the product. There the spherical harmonics of the edge direction are zero except for m=0m = 0 (lesson 09: the factor sin⁡∣m∣θ\sin^{|m|}\theta vanishes at the pole). The product becomes sparse, the SO(3)SO(3) convolution becomes an SO(2)SO(2) one, and the cost drops to O(Lmax⁡3)O(L_{\max}^3). EquiformerV2 uses this.

    3.6 An equivariant message-passing layer #

    Atoms i=1,…,ni = 1, \dots, n have positions xi∈R3x_i \in \R^3 and features hi=(hi(0),hi(1),… )h_i = (h_i^{(0)}, h_i^{(1)}, \dots). Each atom receives messages from its neighbours j∈N(i)j \in \mathcal N(i) within a cutoff radius rcr_c. For an edge, let rij=xj−xir_{ij} = x_j - x_i, dij=∥rij∥d_{ij} = \|r_{ij}\| and r^ij=rij/dij\hat r_{ij} = r_{ij}/d_{ij}. One layer of a Tensor Field Network or NequIP-type model:

    1. Message. mij(L)=∑l1,l2w(l1l2L)(dij)  CL(Yl1(r^ij), hj(l2))m_{ij}^{(L)} = \sum_{l_1, l_2} w^{(l_1l_2L)}(d_{ij})\;C^L\big(Y_{l_1}(\hat r_{ij}),\ h_j^{(l_2)}\big). The weights ww come from a small MLP applied to a radial basis expansion of dijd_{ij}, with a smooth cutoff.
    2. Aggregate. Mi(L)=∑j∈N(i)mij(L)M_i^{(L)} = \sum_{j \in \mathcal N(i)} m_{ij}^{(L)}.
    3. Mix and gate. hi(L)←hi(L)+Gate⁡(WLMi(L))h_i^{(L)} \leftarrow h_i^{(L)} + \operatorname{Gate}\big(W_L M_i^{(L)}\big). WLW_L mixes channels (the Corollary). Scalars go through a nonlinearity σ\sigma. Each channel cc of degree L≥1L \ge 1 is multiplied by σ(gc)\sigma(g_c), where gcg_c is an extra scalar channel (the gate).
    4. Readout. Energy E=∑iMLP⁡(hi(0))E = \sum_i \operatorname{MLP}(h_i^{(0)}) (invariant); forces Fi=−∂E/∂xiF_i = -\partial E/\partial x_i (equivariant).

    Proof.

    1. rij=xj−xi↦Rrijr_{ij} = x_j - x_i \mapsto Rr_{ij}: the translation cancels. So dijd_{ij} and every weight w(dij)w(d_{ij}) are invariant.
    2. Yl1(Rr^ij)=Dl1(R) Yl1(r^ij)Y_{l_1}(R\hat r_{ij}) = D^{l_1}(R)\,Y_{l_1}(\hat r_{ij}) (the definition of DlD^l, Theorem 1).
    3. CL(Dl1a, Dl2b)=DL CL(a,b)C^L(D^{l_1}a,\ D^{l_2}b) = D^L\,C^L(a, b) (Theorem 3). So each term of the message moves by DL(R)D^L(R), times an invariant weight.
    4. A sum of terms that all move by DL(R)D^L(R) moves by DL(R)D^L(R): messages and aggregates are equivariant.
    5. WLW_L acts on channels and DLD^L on components, so they commute (Corollary). A gate multiplies by the invariant number σ(gc)\sigma(g_c), which commutes with DLD^L. On scalars D0=1D^0 = 1, so any σ\sigma works.
    6. A composition of equivariant maps is equivariant. The energy is a function of scalars only, so it is invariant. ■\blacksquare

    For O(3)O(3) also track parity: YlY_l has parity (−1)l(-1)^l, positions are 1o, and each path must produce the parity of its output channel. An O(3)O(3)-equivariant network whose outputs are only 0e scalars gives the same output for a molecule and its mirror image; chiral properties need pseudoscalars (0o).

    Proof. Differentiate E(Qx1+t,…,Qxn+t)=E(x1,…,xn)E(Qx_1 + t, \dots, Qx_n + t) = E(x_1, \dots, x_n) with respect to xix_i. The chain rule gives Q⊤ (∇iE)(Qx+t)=(∇iE)(x)Q^\top\,(\nabla_i E)(Qx + t) = (\nabla_i E)(x). Multiply by QQ (using QQ⊤=IQQ^\top = I): (∇iE)(Qx+t)=Q (∇iE)(x)(\nabla_i E)(Qx + t) = Q\,(\nabla_i E)(x). Change the sign. ■\blacksquare Translation invariance also gives ∑iFi=0\sum_i F_i = 0 (differentiate E(x+t)=E(x)E(x + t) = E(x) in tt).

    Cheaper models. EGNN (Satorras et al., 2021) uses only scalars and the vectors xi−xjx_i - x_j: messages mij=ϕe(hi,hj,∥xi−xj∥2)m_{ij} = \phi_e(h_i, h_j, \|x_i - x_j\|^2), a position update xi←xi+C∑j(xi−xj) ϕx(mij)x_i \leftarrow x_i + C\sum_j (x_i - x_j)\,\phi_x(m_{ij}) (CC a constant), and a scalar update hi←ϕh(hi,∑jmij)h_i \leftarrow \phi_h(h_i, \sum_j m_{ij}). It is an l≤1l \le 1 model without explicit Clebsch–Gordan products. The review of Duval et al. (2024) calls such models (with PaiNN and TorchMD-Net) Cartesian, the irrep models (TFN, NequIP, MACE, Equiformer) spherical, the distance-and-angle models (SchNet, DimeNet) invariant, and models that learn the symmetry by data augmentation unconstrained.

    3.7 How to test equivariance #

    1. Draw random inputs, random Q∈O(3)Q \in O(3) (both signs of det⁡Q\det Q) and a random t∈R3t \in \R^3.
    2. Compute e=max⁡∣f(Qx+t)−ρ(Q)f(x)∣e = \max\big|f(Qx + t) - \rho(Q)f(x)\big|. On an output of type (l,p)(l, p), ρ(Q)=Dl(Q)\rho(Q) = D^l(Q) if det⁡Q=+1\det Q = +1, and ρ(Q)=p Dl(−Q)\rho(Q) = p\,D^l(-Q) if det⁡Q=−1\det Q = -1 (then −Q-Q is a rotation).
    3. In float64 an exactly equivariant model gives ee near 10−1610^{-16} to 10−1210^{-12} (relative); in float32, near 10−710^{-7}. Also check Dl(R) Dl(R)⊤=ID^l(R)\,D^l(R)^\top = I.
    4. Run the same test on a model that is not equivariant and see it fail. A test that cannot fail proves nothing.

    Answers to section 1. (1) No. Equivariance needs tanh⁡(Rf)=Rtanh⁡(f)\tanh(Rf) = R\tanh(f) for all RR. For f=(2,0,0)f = (2, 0, 0) and the rotation by 45°45° about zz: Rf=(2,2,0)Rf = (\sqrt2, \sqrt2, 0), so tanh⁡(Rf)≈(0.888,0.888,0)\tanh(Rf) \approx (0.888, 0.888, 0), but Rtanh⁡(f)=tanh⁡(2) (1,1,0)/2≈(0.682,0.682,0)R\tanh(f) = \tanh(2)\,(1, 1, 0)/\sqrt2 \approx (0.682, 0.682, 0). Use a gate σ(s) f\sigma(s)\,f or a norm nonlinearity. (2) Into 1+3+51 + 3 + 5: the dot product (L=0L = 0), the cross product (L=1L = 1) and the symmetric traceless part (L=2L = 2). This is 1⊗1=0⊕1⊕21 \otimes 1 = 0 \oplus 1 \oplus 2. (3) Zero. By Schur's lemma, a linear equivariant map from degree 1 to degree 0 is 0. To get a scalar from vectors you need a nonlinear operation, such as ∥v∥2\|v\|^2 or a dot product of two vectors.

    4. Worked example #

    (a) Two vectors, by hand. Take u=(1,0,0)u = (1, 0, 0) and v=(1,1,0)v = (1, 1, 0). Then uv⊤=(110000000)uv^\top = \begin{pmatrix}1&1&0\\0&0&0\\0&0&0\end{pmatrix}.

    • L=0L = 0: u⋅v=1u\cdot v = 1, so the piece is 13I\tfrac13 I.
    • L=1L = 1: u×v=(0,0,1)u \times v = (0, 0, 1), and the piece is A=12(uv⊤−vu⊤)=(0120−1200000)A = \tfrac12(uv^\top - vu^\top) = \begin{pmatrix}0&\frac12&0\\-\frac12&0&0\\0&0&0\end{pmatrix}.
    • L=2L = 2: S=12(uv⊤+vu⊤)−13I=(2312012−13000−13)S = \tfrac12(uv^\top + vu^\top) - \tfrac13 I = \begin{pmatrix}\frac23&\frac12&0\\\frac12&-\frac13&0\\0&0&-\frac13\end{pmatrix}: symmetric, trace 23−13−13=0\tfrac23 - \tfrac13 - \tfrac13 = 0.
    • The pieces are orthogonal in the Frobenius inner product, so the squared norms add up: ∥uv⊤∥F2=2=13+12+76\|uv^\top\|_F^2 = 2 = \tfrac13 + \tfrac12 + \tfrac76. Check: ∥13I∥F2=3⋅19\|\tfrac13 I\|_F^2 = 3 \cdot \tfrac19, ∥A∥F2=2⋅14\|A\|_F^2 = 2 \cdot \tfrac14, ∥S∥F2=49+2⋅14+19+19=76\|S\|_F^2 = \tfrac49 + 2 \cdot \tfrac14 + \tfrac19 + \tfrac19 = \tfrac76.

    Now turn both vectors by 90°90° about zz, with R=(0−10100001)R = \begin{pmatrix}0&-1&0\\1&0&0\\0&0&1\end{pmatrix}: Ru=(0,1,0)Ru = (0, 1, 0) and Rv=(−1,1,0)Rv = (-1, 1, 0).

    • Ru⋅Rv=0⋅(−1)+1⋅1+0=1Ru\cdot Rv = 0 \cdot (-1) + 1 \cdot 1 + 0 = 1: unchanged.
    • Ru×Rv=(1⋅0−0⋅1, 0⋅(−1)−0⋅0, 0⋅1−1⋅(−1))=(0,0,1)=R (0,0,1)Ru \times Rv = (1 \cdot 0 - 0 \cdot 1,\ 0 \cdot (-1) - 0 \cdot 0,\ 0 \cdot 1 - 1 \cdot (-1)) = (0, 0, 1) = R\,(0, 0, 1): it turns with the vectors (here the axis of RR is zz, so (0,0,1)(0, 0, 1) stays).
    • The new symmetric traceless part is (−13−120−1223000−13)\begin{pmatrix}-\frac13&-\frac12&0\\-\frac12&\frac23&0\\0&0&-\frac13\end{pmatrix}, which equals RSR⊤RSR^\top.

    (b) Characters. For a rotation by θ=90°\theta = 90°: χ0=1\chi_0 = 1, χ1=1+2cos⁡90°=1\chi_1 = 1 + 2\cos 90° = 1, χ2=1+2cos⁡90°+2cos⁡180°=−1\chi_2 = 1 + 2\cos 90° + 2\cos 180° = -1, χ3=1+2(cos⁡90°+cos⁡180°+cos⁡270°)=−1\chi_3 = 1 + 2(\cos 90° + \cos 180° + \cos 270°) = -1.

    • 1⊗11 \otimes 1: χ12=1\chi_1^2 = 1 and χ0+χ1+χ2=1+1−1=1\chi_0 + \chi_1 + \chi_2 = 1 + 1 - 1 = 1. ✓
    • 1⊗21 \otimes 2: χ1χ2=−1\chi_1\chi_2 = -1 and χ1+χ2+χ3=1−1−1=−1\chi_1 + \chi_2 + \chi_3 = 1 - 1 - 1 = -1. ✓
    • At θ=120°\theta = 120°: χ1=0\chi_1 = 0, χ2=−1\chi_2 = -1, χ3=1\chi_3 = 1, and again χ1χ2=0=χ1+χ2+χ3\chi_1\chi_2 = 0 = \chi_1 + \chi_2 + \chi_3. ✓

    (c) Weights of an equivariant linear layer. Input and output 16x0e + 8x1o + 4x2e: that is 16+8⋅3+4⋅5=6016 + 8 \cdot 3 + 4 \cdot 5 = 60 numbers. A general linear map has 602=360060^2 = 3600 weights. The equivariant one has 162+82+42=33616^2 + 8^2 + 4^2 = 336, plus 16 biases on the scalars.

    (d) A seismic moment tensor. The moment tensor MM of an earthquake is a symmetric 3×33 \times 3 matrix (6 numbers). Under a rotation RR of the source, M↦RMR⊤M \mapsto RMR^\top, and the inversion leaves it unchanged ((−R)M(−R)⊤=RMR⊤(-R)M(-R)^\top = RMR^\top). So M=13tr⁡(M) I+MdevM = \tfrac13\operatorname{tr}(M)\,I + M_{\text{dev}} is 0e ⊕ 2e: the isotropic part (a volume change; an explosion M=IM = I is pure l=0l = 0) and the deviatoric part (5 numbers). A vertical strike-slip double couple (010100000)\begin{pmatrix}0&1&0\\1&0&0\\0&0&0\end{pmatrix} has trace 0, so it is pure l=2l = 2. An equivariant network that predicts moment tensors outputs one 0e and one 2e channel.

    Quick check

    Which output degrees LL does the tensor product of a vector (l1=1l_1 = 1) and a degree-2 feature (l2=2l_2 = 2) contain?

    5. In code #

    One message step on atoms with scalar and vector features, tested under random orthogonal matrices of both determinants and random shifts. The gated layer passes; a layer that adds r^×v\hat r \times v (a pseudovector, 1e) to a vector channel (1o) passes for rotations and fails for reflections; a componentwise tanh⁡\tanh fails always.

    import numpy as np
    from scipy.stats import ortho_group
    
    def layer(X, s, V, mode):
        """One message step: positions X (n,3), scalars s (n,), vectors V (n,3) -> new vectors (n,3)."""
        D = X[None, :, :] - X[:, None, :]                       # D[i, j] = x_j - x_i
        r = np.linalg.norm(D, axis=-1)
        np.fill_diagonal(r, 1.0)
        phi = np.exp(-r**2) * (1 - np.eye(len(X)))              # invariant radial weight, no self-loop
        rhat = D / r[..., None]                                 # unit edge vectors (1o)
        m0 = (phi * (s[None, :] + (rhat * V[None]).sum(-1))).sum(1)          # 0e message: s_j + r_hat . v_j
        m1 = (phi[..., None] * (s[None, :, None] * rhat + V[None])).sum(1)   # 1o message: s_j r_hat + v_j
        if mode == "cross":                                     # adds r_hat x v_j, a pseudovector (1e)
            m1 = m1 + (phi[..., None] * np.cross(rhat, V[None])).sum(1)
        if mode == "tanh":                                      # tanh on each component
            return np.tanh(m1)
        return m1 / (1 + np.exp(-m0))[:, None]                  # gate: vector times sigmoid(scalar)
    
    rng = np.random.default_rng(0)
    X, s, V = rng.standard_normal((6, 3)), rng.standard_normal(6), rng.standard_normal((6, 3))
    for mode in ("gate", "cross", "tanh"):
        errs = []
        for k in range(4):
            Q = ortho_group.rvs(3, random_state=10 + k)         # random orthogonal matrix, det +1 or -1
            t = rng.standard_normal(3)
            out = layer(X, s, V, mode)
            out_moved = layer(X @ Q.T + t, s, V @ Q.T, mode)    # move the input: x -> Qx + t, v -> Qv
            errs.append(f"det {round(np.linalg.det(Q)):+d}: {np.abs(out_moved - out @ Q.T).max():.0e}")
        print(f"{mode:5s}", ", ".join(errs))
    # gate  det +1: 3e-16, det +1: 3e-16, det +1: 3e-16, det -1: 2e-16    O(3)-equivariant
    # cross det +1: 4e-16, det +1: 4e-16, det +1: 4e-16, det -1: 1e+00    only SO(3): parity bug
    # tanh  det +1: 1e-01, det +1: 2e-01, det +1: 2e-01, det -1: 2e-01    not equivariant
    

    The cross layer is a typical bug. A test with only det⁡Q=+1\det Q = +1 would not find it. The notebook also computes Wigner-D matrices and Clebsch–Gordan coefficients (as a null space) and builds an EGNN layer and a force field.

    6. Where it shows up #

    • ML interatomic potentials. NequIP, Allegro and MACE predict an invariant energy from equivariant features and get the forces by autodiff. MACE builds many-body messages from tensor products of a per-atom "density" of neighbours.
    • Catalysis and proteins. eSCN and EquiformerV2 were developed on the Open Catalyst datasets (OC20, OC22). AlphaFold 3 has no built-in equivariance in its diffusion module; it trains with random rotations and translations of the structures (the unconstrained approach).
    • Geoscience. Moment tensors and stress (0e + 2e), three-component seismograms and their polarization (1o), and anisotropy tensors. On the sphere, the degree-wise filters of SFNO (lesson 09) are the Schur's-lemma answer.
    • When the symmetry is broken on purpose. The atmosphere is not rotation-symmetric: Earth's rotation axis, the Coriolis parameter, orography and the land–sea mask fix directions and places. Weather models give these fields as inputs, which breaks the symmetry where the physics breaks it (lesson 16).
    • Practice tools. e3nn (PyTorch): o3.Irreps, o3.spherical_harmonics, o3.FullyConnectedTensorProduct, nn.Gate, and assert_equivariant for tests.

    7. Common mistakes #

    • Componentwise nonlinearities or normalisation on vectors. tanh⁡\tanh, ReLU or a per-component scale break equivariance. Use gates or functions of the norm.
    • Mixing degrees or parities in a linear layer. Schur's lemma forbids it. 1e and 1o look the same under rotations and differ under reflections.
    • Testing too little. One random rotation, only det⁡Q=+1\det Q = +1, or no translation. Test reflections and shifts, and make sure the test can fail.
    • Basis conventions. The order of the l=1l = 1 components ((y,z,x)(y, z, x) or (x,y,z)(x, y, z)), the normalisation of YlY_l, and Dl(R)D^l(R) versus Dl(R−1)D^l(R^{-1}) differ between libraries. Fix one convention and test it.
    • Hard cutoffs. A hard cutoff at rcr_c makes the energy jump when an atom crosses it, so the forces are wrong there. Use a smooth envelope.
    • Assuming a symmetry the data does not have. Gravity, an external field or Earth's rotation break O(3)O(3). Give them as inputs: an equivariant model with the gravity vector as an input feature is still exactly equivariant.
    • Direct force heads by default. A head that predicts forces directly saves a backward pass, but its forces are not the gradient of an energy, so molecular dynamics with them does not conserve energy. Choose on purpose.

    8. Check yourself #

    1. Which degrees appear in 2⊗22 \otimes 2, and does the dimension count work?
      AnswerL=0,1,2,3,4L = 0, 1, 2, 3, 4, and 1+3+5+7+9=25=5×51 + 3 + 5 + 7 + 9 = 25 = 5 \times 5.
    2. How many weights does an O(3)O(3)-equivariant linear map from 8x1o to 1x0e have?
      AnswerZero: the only such map is 0 (Schur's lemma; the irreps differ). To get an invariant from vectors you need a nonlinear operation, for example ∥v∥2\|v\|^2 or the tensor product 1⊗1→01 \otimes 1 \to 0 of two vectors (a dot product).
    3. Compute χ2\chi_2 for a rotation by 180°180°, and check 1⊗1=0⊕1⊕21 \otimes 1 = 0 \oplus 1 \oplus 2 at this angle.
      Answerχ2(π)=1+2cos⁡π+2cos⁡2π=1\chi_2(\pi) = 1 + 2\cos\pi + 2\cos 2\pi = 1 and χ1(π)=1+2cos⁡π=−1\chi_1(\pi) = 1 + 2\cos\pi = -1. So χ12=1=χ0+χ1+χ2=1−1+1\chi_1^2 = 1 = \chi_0 + \chi_1 + \chi_2 = 1 - 1 + 1.
    4. A layer passes the equivariance test for all rotations but fails for Q=−IQ = -I. Give a likely cause and a fix.
      AnswerA parity error: an even quantity (for example r^×v\hat r \times v, `1e`) is added to an odd channel (`1o`), or a pseudoscalar is used as a scalar. Track the parity of every path (p1p2p_1p_2) and keep `1e` and `1o` in separate channels.
    5. An O(3)O(3)-equivariant network predicts the moment tensor of an earthquake. Which output irreps does it need?
      Answer`1x0e + 1x2e` (6 numbers): the isotropic part (the trace) and the deviatoric part. A symmetric matrix has no antisymmetric (`1e`) part, and the moment tensor does not change under the inversion, so both parts are even.
    6. Your float32 model gives a relative equivariance error of 3×10−73 \times 10^{-7}. A model trained with random rotations gives 2×10−22 \times 10^{-2}. What do you conclude?
      AnswerThe first is exactly equivariant: the error is at float32 rounding level. The second is only approximately equivariant: augmentation teaches the symmetry on the training distribution, with no guarantee elsewhere.
    Recall cardsAnswer in your head first, then reveal. Add the cards to your review deck to see them again just before you would forget.
    1. What does it mean that a map ff is equivariant to a group GG?

    2. What is the dimension of the irrep of SO(3)SO(3) of degree ll?

    3. What do the labels 1o and 1e mean, with an example of each?

    4. State Schur's lemma for an equivariant linear map between two irreps.

    5. Which output degrees LL does the tensor product of degrees l1l_1 and l2l_2 contain?

    6. Into which pieces does uv⊤uv^\top split for two vectors u,vu, v?

    7. Why are forces computed as −∇E-\nabla E from an invariant energy equivariant?

    8. How do you test a model for E(3) equivariance numerically?

    9. Why can you not apply ReLU to each component of a vector feature?

    Open the review →

    9. Interview angle #

    • "Why can you not apply a ReLU to a vector feature?" σ(Rv)≠Rσ(v)\sigma(Rv) \ne R\sigma(v) in general. Use gates σ(s) v\sigma(s)\,v with an invariant ss, or norm nonlinearities ϕ(∥v∥) v\phi(\|v\|)\,v.
    • "What is an irrep, and why does e3nn keep the degrees separate?" The smallest blocks that rotations cannot split further. By Schur's lemma, equivariant linear maps cannot mix them.
    • "What is a Clebsch–Gordan tensor product?" The equivariant bilinear product of two irreps, projected onto each degree LL with ∣l1−l2∣≤L≤l1+l2|l_1 - l_2| \le L \le l_1 + l_2. For two vectors: the dot product, the cross product and the symmetric traceless part.
    • "Built-in equivariance or data augmentation?" Built-in: exact symmetry, better data efficiency (NequIP's l=0l = 0 versus l≥1l \ge 1 comparison), conservative and equivariant forces from an invariant energy, but tensor products cost O(Lmax⁡6)O(L_{\max}^6) (O(Lmax⁡3)O(L_{\max}^3) with eSCN). Augmentation: any architecture and good scaling with data (AlphaFold 3), but the symmetry is only approximate.
    • "Would you make a global weather model SO(3)SO(3)-equivariant?" Only partly. Earth's rotation, orography and land–sea contrasts break the symmetry. Use equivariant building blocks (SFNO filters) plus inputs that carry the broken symmetry.

    10. Practice #

    The notebook for this lesson runs in Colab and in the browser. It has five exercises, each with a check cell and a folded solution:

    1. Write the numerical equivariance test and use it to find the parity bug and the tanh bug in three given layers.
    2. Compute real Wigner-D matrices by quadrature; check orthogonality, the homomorphism property, the character formula and D1=PRP⊤D^1 = PRP^\top in the (y,z,x)(y, z, x) order.
    3. Split uv⊤uv^\top into its 0⊕1⊕20 \oplus 1 \oplus 2 parts and check how each part transforms under O(3)O(3).
    4. Write an EGNN layer (scalars and relative positions only) and test its E(3) equivariance.
    5. Write a pair-potential energy and its analytic forces; check them against finite differences and test that the forces are equivariant and sum to zero.

    11. Watch and read #

    Watch for how geometric tensors are sorted into irreps, and why the network keeps them separate.
    Open on YouTube · the player loads from youtube-nocookie.com when you press play
    The e3nn library in practice: irreps, spherical harmonics, tensor products and equivariance tests.
    Open on YouTube · the player loads from youtube-nocookie.com when you press play
    A short, careful introduction to groups and representations, the language of section 3.1.
    Open on YouTube · the player loads from youtube-nocookie.com when you press play
    The general theory behind equivariant networks: groups acting on spaces, and why convolutions are equivariant.
    Open on YouTube · the player loads from youtube-nocookie.com when you press play

    Reading

    • Duval et al., A Hitchhiker's Guide to Geometric GNNs for 3D Atomic Systems (2024): the Cartesian, spherical, invariant and unconstrained model families, tensor products and gating. arXiv 2312.07511
    • The e3nn user guide: irreducible representations, convolutions and equivariance testing. docs.e3nn.org
    • Batzner et al., E(3)-equivariant graph neural networks for data-efficient and accurate interatomic potentials (NequIP, 2022). arXiv 2101.03164
    • Bronstein, Bruna, Cohen and Veličković, Geometric Deep Learning: Grids, Groups, Graphs, Geodesics, and Gauges (2021). arXiv 2104.13478
    • Passaro and Zitnick, Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs (eSCN, 2023). arXiv 2302.03655