Turok & Bucher#

s2fft.recursions.turok.compute_full(beta: float, el: int, L: int) ndarray#

Compute the complete Wigner-d matrix at polar angle \(\beta\) using Turok & Bucher recursion.

The Wigner-d plane for a given \(\ell\) (el) and \(\beta\) is computed recursively over \(m, m^{\prime}\).

The Wigner-d plane \(d^\ell_{m, m^{\prime}}(\beta)\) is indexed for \(-L < m, m^{\prime} < L\) by dl[L - 1 + \(m\), L - 1 + \(m^{\prime}\)] but is only computed for the eighth of the plane \(m^{\prime} <= m < \ell, 0 <= m^{\prime} <= \ell\). Symmetry relations are used to fill in the remainder of the plane (see fill()).

Parameters:
  • beta (float) – Polar angle in radians.

  • el (int) – Harmonic degree of Wigner-d matrix.

  • L (int) – Harmonic band-limit.

Raises:

ValueError – If el is greater than L.

Returns:

Wigner-d matrix of dimension [2L-1, 2L-1].

Return type:

np.ndarray

s2fft.recursions.turok.compute_quarter(dl: ndarray, beta: float, ell: int, L: int) ndarray#

Compute the left quarter triangle of the Wigner-d matrix via Turok & Bucher recursion.

Parameters:
  • dl (np.ndarray) – Wigner-d matrix slice to populate (shape: 2L-1, 2L-1).

  • beta (float) – Polar angle in radians.

  • ell (int) – Harmonic degree of Wigner-d matrix.

  • L (int) – Harmonic band-limit.

Returns:

Wigner-d matrix of dimension [2L-1, 2L-1] with left quarter triangle populated.

Return type:

np.ndarray

s2fft.recursions.turok.compute_quarter_slice(dl: ndarray, beta: float, el: int, L: int, mm: int, positive_m_only: bool = False) ndarray#

Compute a single slice at \(m^{\prime}\) of the Wigner-d matrix evaluated at \(\beta\).

Parameters:
  • dl (np.ndarray) – Wigner-d matrix slice to populate (shape: 2L-1).

  • beta (float) – Polar angle in radians.

  • l (int) – Harmonic degree of Wigner-d matrix.

  • L (int) – Harmonic band-limit.

  • mm (int) – Harmonic order at which to slice the matrix.

  • positive_m_only (bool, optional) – Compute Wigner-d matrix for slice at m greater than zero only. Defaults to False.

Returns:

Wigner-d matrix slice of dimension [2L-1] populated only on the mm slice.

Return type:

np.ndarray

s2fft.recursions.turok.compute_slice(beta: float, el: int, L: int, mm: int, positive_m_only: bool = False) ndarray#

Compute a particular slice \(m^{\prime}\), denoted mm, of the complete Wigner-d matrix at polar angle \(\beta\) using Turok & Bucher recursion.

The Wigner-d slice for a given \(\ell\) (el) and \(\beta\) is computed recursively over \(m\) labelled ‘m’ at a specific \(m^{\prime}\). The Turok & Bucher recursion is analytically correct from \(-\ell < m < \ell\) however numerically it can become unstable for \(m > 0\). To avoid this we compute \(d_{m, m^{\prime}}^{\ell}(\beta)\) for negative \(m\) and then evaluate \(d_{m, -m^{\prime}}^{\ell}(\beta) = (-1)^{m-m^{\prime}} d_{-m, m^{\prime}}^{\ell}(\beta)\) which we can again evaluate using a Turok & Bucher recursion.

The Wigner-d slice \(d^\ell_{m, m^{\prime}}(\beta)\) is indexed for \(-L < m < L\) by dl[L - 1 - m]. This implementation has computational scaling \(\mathcal{O}(L)\) and typically requires \(\sim 2L\) operations.

Parameters:
  • beta (float) – Polar angle in radians.

  • el (int) – Harmonic degree of Wigner-d matrix.

  • L (int) – Harmonic band-limit.

  • mm (int) – Harmonic order at which to slice the matrix.

  • positive_m_only (bool, optional) – Compute Wigner-d matrix for slice at m greater than zero only. Defaults to False.

  • construction (Whether to exploit conjugate symmetry. By) – this only leads to significant improvement for mm = 0. Defaults to False.

Raises:
  • ValueError – If el is greater than L.

  • ValueError – If el is less than mm.

  • Warning – If positive_m_only is true but mm not 0.

Returns:

Wigner-d matrix mm slice of dimension [2L-1].

Return type:

np.ndarray

s2fft.recursions.turok.fill(dl: ndarray, ell: int, L: int) ndarray#

Reflects Wigner-d quarter plane to complete full matrix by using symmetry properties of the Wigner-d matrices.

Parameters:
  • dl (np.ndarray) – Wigner-d matrix to populate by symmetry.

  • ell (int) – Harmonic degree of Wigner-d matrix.

  • L (int) – Harmonic band-limit.

Returns:

A complete Wigner-d matrix of dimension [2L-1, 2L-1].

Return type:

np.ndarray