Classical convolutions#

The rotation-equivariant spherical convolutions of the literature (Secs. III and VI).

Each is a generalised lifted convolution with a particular kernel (Table II), and is written here in its closed harmonic form, with the constants of the article:

Convolution

Lifted form

Harmonic form

axisymmetric (Defs III.1, III.6)

\((2\pi)^{-1/2}\mathcal{C}_{s\to0}[\Lambda_s\psi]\)

\(\sqrt{4\pi/(2\ell+1)}\, {}_sf_{\ell m}\, {}_s\psi^*_{\ell0}\)

left (Def. III.2)

\(\mathcal{C}_{0\to0}[\Psi_h]\)

\(2\pi\sqrt{4\pi/(2\ell+1)}\, f_{\ell m} h_{\ell0}\)

directional (Defs III.3, III.5)

\(\mathcal{C}_{s\to G}[\Lambda_s\psi]\)

\(\frac{8\pi^2}{2\ell+1}\, {}_sf_{\ell m}\, {}_s\psi^*_{\ell n}\)

synthesis (Def. III.10)

\(\mathcal{C}_{G\to s}[\widetilde{\Lambda_s\psi}]\)

\(\sum_n W^{\ell}_{mn}\, {}_s\psi_{\ell n}\)

spin-changing (Prop. VI.5)

\(\mathcal{C}_{s\to s'}[\Psi_T]\)

\(c_\ell\, {}_sf_{\ell m}\)

The group convolution (Definition III.4) is s2conv.convolutions.lifted.group_convolution(). All functions act on harmonic coefficients in the s2fft layout, broadcast over leading axes, and are differentiable and JIT compilable.

s2conv.convolutions.classical.axisymmetric_convolution(flm, psi_lm, spin: int = 0) → Array[source]#

Axisymmetric convolution \((f \odot \psi)(\omega) = \langle f, \mathcal{R}_\omega \psi \rangle\).

For a scalar field (Definition III.1) or a spin-\(s\) field (Definition III.6) with an axisymmetric kernel, the output is a scalar field with \((f \odot \psi)_{\ell m} = \sqrt{4\pi/(2\ell+1)}\, {}_sf_{\ell m}\, {}_s\psi^*_{\ell 0}\) (Eqs. 14, 25). It is \((2\pi)^{-1/2}\mathcal{C}_{s\to0}[\Lambda_s\psi]\), the factor being the difference between evaluation on the section and the adjoint projection (Proposition VI.3). Only the axisymmetric part \(\psi_{\ell0}\) of the kernel enters.

Parameters:
  • flm – Spin-\(s\) harmonic coefficients, [..., L, 2L - 1].

  • psi_lm – Spin-\(s\) harmonic coefficients of the kernel, [L, 2L - 1].

  • spin (int, optional) – Spin \(s\). Defaults to 0.

Returns:

Scalar harmonic coefficients, [..., L, 2L - 1].

Return type:

jnp.ndarray

s2conv.convolutions.classical.left_convolution(flm, h_lm) → Array[source]#

Left convolution of Driscoll & Healy, \((f \star_{\mathrm{L}} h)(\omega) = \int f(\rho\eta)\, h(R_\rho^{-1}\omega)\, \mathrm{d}\mu(\rho)\).

Its harmonic form is \(2\pi\sqrt{4\pi/(2\ell+1)}\, f_{\ell m} h_{\ell 0}\) (Definition III.2, Eq. 16): only the zonal part of the kernel enters, and the \(2\pi\) is the volume of the fibre. It is \(\mathcal{C}_{0\to0}[\Psi_h]\) with \(\Psi_h(g) = h^*(g^{-1}\eta)\), exactly (Proposition VI.4).

Parameters:
  • flm – Scalar harmonic coefficients, [..., L, 2L - 1].

  • h_lm – Scalar harmonic coefficients of the kernel, [L, 2L - 1].

Returns:

Scalar harmonic coefficients, [..., L, 2L - 1].

Return type:

jnp.ndarray

s2conv.convolutions.classical.directional_convolution(flm, psi_lm, spin: int = 0, N: int = None) → Array[source]#

Directional convolution \((f \circledast \psi)(\rho) = \langle f, \mathcal{R}_\rho\psi\rangle\), a function on the rotation group.

For scalar (Definition III.3) or spin-\(s\) fields (Definition III.5) its Wigner coefficients are \(\frac{8\pi^2}{2\ell+1}\, {}_sf_{\ell m}\, {}_s\psi^*_{\ell n}\) (Eqs. 18, 23). It is \(\mathcal{C}_{s\to G}[\Lambda_s\psi]\), exactly, with no residual constant (Proposition VI.1). For a steerable kernel, azimuthally band-limited at \(N\), the output is the tuple of \(2N - 1\) spin-changing convolutions of Proposition VI.6 (see s2conv.lifting.spin_components()).

Parameters:
  • flm – Spin-\(s\) harmonic coefficients, [..., L, 2L - 1].

  • psi_lm – Spin-\(s\) harmonic coefficients of the kernel, [L, 2L - 1].

  • spin (int, optional) – Spin \(s\). Defaults to 0.

  • N (int, optional) – Azimuthal band-limit of the output, retaining the kernel’s orders \(|n| < N\). Defaults to \(L\), which is exact for any kernel.

Returns:

Wigner coefficients, [..., 2N - 1, L, 2L - 1].

Return type:

jnp.ndarray

s2conv.convolutions.classical.directional_synthesis(flmn, psi_lm, spin: int = 0) → Array[source]#

Haar synthesis \((W \circledast^\dagger \psi)(\omega) = \int W(\rho)\, (\mathcal{R}_\rho\psi)(\omega)\, \mathrm{d}\mu(\rho)\).

Its harmonic form is \(\sum_n W^{\ell}_{mn}\, {}_s\psi_{\ell n}\) (Definition III.10, Eq. 31). It is \(\mathcal{C}_{G\to s}[\widetilde{\Lambda_s\psi}]\), the adjoint of the directional convolution with the same kernel (Proposition VI.2).

Parameters:
  • flmn – Wigner coefficients, [..., 2N - 1, L, 2L - 1].

  • psi_lm – Spin-\(s\) harmonic coefficients of the kernel, [L, 2L - 1].

  • spin (int, optional) – Spin \(s\) of the output. Defaults to 0.

Returns:

Spin-\(s\) harmonic coefficients, [..., L, 2L - 1].

Return type:

jnp.ndarray

s2conv.convolutions.classical.axisymmetric_synthesis(flm, psi_lm, spin: int = 0) → Array[source]#

Axisymmetric synthesis \(\int W(\omega')\, (\mathcal{R}_{\omega'}\psi)(\omega)\, \mathrm{d}\mu(\omega')\).

The adjoint of axisymmetric_convolution(), mapping a scalar field to a spin-\(s\) field, \(\sqrt{4\pi/(2\ell+1)}\, W_{\ell m}\, {}_s\psi_{\ell 0}\): the first term of the spin wavelet synthesis (Eq. 26).

Parameters:
  • flm – Scalar harmonic coefficients, [..., L, 2L - 1].

  • psi_lm – Spin-\(s\) harmonic coefficients of the kernel, [L, 2L - 1].

  • spin (int, optional) – Spin \(s\) of the output. Defaults to 0.

Returns:

Spin-\(s\) harmonic coefficients, [..., L, 2L - 1].

Return type:

jnp.ndarray

s2conv.convolutions.classical.spin_changing_convolution(flm, c, s_in: int, s_out: int) → Array#

Spin-changing convolution with multiplier \(c_\ell\) (Proposition VI.5); see s2conv.convolutions.lifted.spin_multiplier().