From e1341262420209935d1e679fa046c01cd85ce809 Mon Sep 17 00:00:00 2001 From: CosmoMatt <32554533+CosmoMatt@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:48:37 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20astro-in?= =?UTF-8?q?formatics/s2fft@f17ac17c04466c9848d45e0d4b9005b3aa1460a3=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .buildinfo | 2 +- .../api/precompute_transforms/index.rst.txt | 16 +- _sources/api/utility/index.rst.txt | 22 +- _sources/api/utility/quadrature_torch.rst.txt | 7 + _sources/api/utility/resampling_torch.rst.txt | 7 + _sources/index.rst.txt | 4 + _sources/tutorials/index.rst.txt | 1 + .../torch_frontend/torch_frontend.nblink.txt | 3 + _static/documentation_options.js | 2 +- api/base_transforms/index.html | 32 +- .../spin_spherical_transform.html | 32 +- api/base_transforms/wigner_transform.html | 32 +- api/index.html | 38 +- api/precompute_transforms/construct.html | 38 +- api/precompute_transforms/index.html | 64 +- api/precompute_transforms/spin_spherical.html | 96 +- api/precompute_transforms/wigner.html | 96 +- api/recursions/index.html | 32 +- api/recursions/price_mcewen.html | 32 +- api/recursions/risbo.html | 32 +- api/recursions/risbo_jax.html | 30 +- api/recursions/trapani.html | 32 +- api/recursions/turok.html | 32 +- api/recursions/turok_jax.html | 32 +- api/sampling/index.html | 32 +- api/sampling/spherical_samples.html | 32 +- api/sampling/wigner_samples.html | 32 +- api/transforms/index.html | 32 +- api/transforms/on_the_fly_recursions.html | 32 +- api/transforms/spin_spherical_transform.html | 32 +- api/transforms/wigner.html | 32 +- api/utility/healpix_ffts.html | 141 ++- api/utility/index.html | 66 +- api/utility/logs.html | 32 +- api/utility/quadrature.html | 38 +- api/utility/quadrature_jax.html | 42 +- api/utility/quadrature_torch.html | 851 ++++++++++++++++++ api/utility/resampling.html | 32 +- api/utility/resampling_jax.html | 38 +- api/utility/resampling_torch.html | 850 +++++++++++++++++ api/utility/rotation.html | 32 +- api/utility/signal_generator.html | 38 +- api/utility/utils.html | 32 +- genindex.html | 112 ++- index.html | 33 +- objects.inv | Bin 6034 -> 6753 bytes py-modindex.html | 40 +- search.html | 30 +- searchindex.js | 2 +- tutorials/index.html | 31 +- tutorials/rotation/rotation.html | 37 +- .../spherical_harmonic_transform.html | 31 +- tutorials/torch_frontend/torch_frontend.html | 679 ++++++++++++++ tutorials/torch_frontend/torch_frontend.ipynb | 170 ++++ tutorials/wigner/wigner_transform.html | 31 +- user_guide/install.html | 30 +- 56 files changed, 4124 insertions(+), 232 deletions(-) create mode 100644 _sources/api/utility/quadrature_torch.rst.txt create mode 100644 _sources/api/utility/resampling_torch.rst.txt create mode 100644 _sources/tutorials/torch_frontend/torch_frontend.nblink.txt create mode 100644 api/utility/quadrature_torch.html create mode 100644 api/utility/resampling_torch.html create mode 100644 tutorials/torch_frontend/torch_frontend.html create mode 100644 tutorials/torch_frontend/torch_frontend.ipynb diff --git a/.buildinfo b/.buildinfo index baacfc04..ea2d58d4 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d5cfbde0f5681c2a4849252cb24db821 +config: 8200bdad04fa182aadbb4e935d2e10d6 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_sources/api/precompute_transforms/index.rst.txt b/_sources/api/precompute_transforms/index.rst.txt index 6873383a..13b04726 100644 --- a/_sources/api/precompute_transforms/index.rst.txt +++ b/_sources/api/precompute_transforms/index.rst.txt @@ -11,17 +11,21 @@ Precompute Functions * - Function Name - Description * - :func:`~s2fft.precompute_transforms.spherical.inverse` - - Wrapper function around NumPy/JAX inverse methods + - Wrapper function around NumPy/JAX/Torch inverse methods * - :func:`~s2fft.precompute_transforms.spherical.inverse_transform` - Inverse spherical harmonic transform (NumPy) * - :func:`~s2fft.precompute_transforms.spherical.inverse_transform_jax` - Inverse spherical harmonic transform (JAX) + * - :func:`~s2fft.precompute_transforms.spherical.inverse_transform_torch` + - Inverse spherical harmonic transform (Torch) * - :func:`~s2fft.precompute_transforms.spherical.forward` - - Wrapper function around NumPy/JAX forward methods + - Wrapper function around NumPy/JAX/Torch forward methods * - :func:`~s2fft.precompute_transforms.spherical.forward_transform` - Forward spherical harmonic transform (NumPy) * - :func:`~s2fft.precompute_transforms.spherical.forward_transform_jax` - Forward spherical harmonic transform (JAX) + * - :func:`~s2fft.precompute_transforms.spherical.forward_transform_torch` + - Forward spherical harmonic transform (Torch) .. list-table:: Wigner transforms. :widths: 25 25 @@ -30,17 +34,21 @@ Precompute Functions * - Function Name - Description * - :func:`~s2fft.precompute_transforms.wigner.inverse` - - Wrapper function around NumPy/JAX inverse methods + - Wrapper function around NumPy/JAX/Torch inverse methods * - :func:`~s2fft.precompute_transforms.wigner.inverse_transform` - Inverse Wigner transform (NumPy) * - :func:`~s2fft.precompute_transforms.wigner.inverse_transform_jax` - Inverse Wigner transform (JAX) + * - :func:`~s2fft.precompute_transforms.wigner.inverse_transform_torch` + - Inverse Wigner transform (Torch) * - :func:`~s2fft.precompute_transforms.wigner.forward` - - Wrapper function around NumPy/JAX forward methods + - Wrapper function around NumPy/JAX/Torch forward methods * - :func:`~s2fft.precompute_transforms.wigner.forward_transform` - Forward Wigner transform (NumPy) * - :func:`~s2fft.precompute_transforms.wigner.forward_transform_jax` - Forward Wigner transform (JAX) + * - :func:`~s2fft.precompute_transforms.wigner.forward_transform_torch` + - Forward Wigner transform (Torch) .. list-table:: Constructing Kernels for precompute transforms. :widths: 25 25 diff --git a/_sources/api/utility/index.rst.txt b/_sources/api/utility/index.rst.txt index a86f9db8..f5ca6065 100644 --- a/_sources/api/utility/index.rst.txt +++ b/_sources/api/utility/index.rst.txt @@ -16,20 +16,28 @@ Utility Functions - Computes the Inverse Fast Fourier Transform with spectral folding in the polar regions to mitigate aliasing (NumPy). * - :func:`~s2fft.utils.healpix_ffts.healpix_ifft_jax` - Computes the Inverse Fast Fourier Transform with spectral folding in the polar regions to mitigate aliasing (JAX). + * - :func:`~s2fft.utils.healpix_ffts.healpix_ifft_torch` + - Computes the Inverse Fast Fourier Transform with spectral folding in the polar regions to mitigate aliasing (Torch). * - :func:`~s2fft.utils.healpix_ffts.healpix_fft` - Wrapper function for the Forward Fast Fourier Transform with spectral back-projection in the polar regions to manually enforce Fourier periodicity. * - :func:`~s2fft.utils.healpix_ffts.healpix_fft_numpy` - Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (NumPy). * - :func:`~s2fft.utils.healpix_ffts.healpix_fft_jax` - - Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (NumPy). + - Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (JAX). + * - :func:`~s2fft.utils.healpix_ffts.healpix_fft_torch` + - Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (Torch). * - :func:`~s2fft.utils.healpix_ffts.spectral_folding` - Folds higher frequency Fourier coefficients back onto lower frequency coefficients (NumPy). * - :func:`~s2fft.utils.healpix_ffts.spectral_folding_jax` - Folds higher frequency Fourier coefficients back onto lower frequency coefficients (JAX). + * - :func:`~s2fft.utils.healpix_ffts.spectral_folding_torch` + - Folds higher frequency Fourier coefficients back onto lower frequency coefficients (Torch). * - :func:`~s2fft.utils.healpix_ffts.spectral_periodic_extension` - Extends lower frequency Fourier coefficients onto higher frequency coefficients (NumPy). * - :func:`~s2fft.utils.healpix_ffts.spectral_periodic_extension_jax` - Extends lower frequency Fourier coefficients onto higher frequency coefficients (JAX). + * - :func:`~s2fft.utils.healpix_ffts.spectral_periodic_extension_torch` + - Extends lower frequency Fourier coefficients onto higher frequency coefficients (Torch). .. list-table:: Quadrature functions. @@ -61,8 +69,9 @@ Utility Functions .. note:: - JAX versions of these functions share an almost identical function trace and - are simply accessed by the sub-module :func:`~s2fft.utils.quadrature_jax`. + JAX and Torch versions of these functions share an almost identical function trace and + are simply accessed by the sub-modules :func:`~s2fft.utils.quadrature_jax` and + :func:`~s2fft.utils.quadrature_torch` respectively. .. list-table:: Periodic resampling functions :widths: 25 25 @@ -102,8 +111,9 @@ Utility Functions .. note:: - JAX versions of these functions share an almost identical function trace and - are simply accessed by the sub-module :func:`~s2fft.utils.resampling_jax`. + JAX and Torch versions of these functions share an almost identical function trace and + are simply accessed by the sub-modules :func:`~s2fft.utils.resampling_jax` and + :func:`~s2fft.utils.resampling_torch` respectively. .. list-table:: Rotation functions :widths: 25 25 @@ -124,8 +134,10 @@ Utility Functions signal_generator resampling resampling_jax + resampling_torch quadrature quadrature_jax + quadrature_torch healpix_ffts utils rotation diff --git a/_sources/api/utility/quadrature_torch.rst.txt b/_sources/api/utility/quadrature_torch.rst.txt new file mode 100644 index 00000000..7090094f --- /dev/null +++ b/_sources/api/utility/quadrature_torch.rst.txt @@ -0,0 +1,7 @@ +:html_theme.sidebar_secondary.remove: + +************************** +quadrature_torch +************************** +.. automodule:: s2fft.utils.quadrature_torch + :members: \ No newline at end of file diff --git a/_sources/api/utility/resampling_torch.rst.txt b/_sources/api/utility/resampling_torch.rst.txt new file mode 100644 index 00000000..4720cc62 --- /dev/null +++ b/_sources/api/utility/resampling_torch.rst.txt @@ -0,0 +1,7 @@ +:html_theme.sidebar_secondary.remove: + +************************** +resampling_torch +************************** +.. automodule:: s2fft.utils.resampling_torch + :members: \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt index fd8a6614..9271b3e0 100644 --- a/_sources/index.rst.txt +++ b/_sources/index.rst.txt @@ -10,6 +10,10 @@ transforms (for both real and complex signals), with support for adjoint transfo where needed, and comes with different optimisations (precompute or not) that one may select depending on available resources and desired angular resolution :math:`L`. +As of version 1.0.2 ``S2FFT`` also provides PyTorch implementations of underlying +precompute transforms. In future releases this support will be extended to our +on-the-fly algorithms. + Algorithms |:zap:| ------------------- diff --git a/_sources/tutorials/index.rst.txt b/_sources/tutorials/index.rst.txt index 80c5ce69..12ce7955 100644 --- a/_sources/tutorials/index.rst.txt +++ b/_sources/tutorials/index.rst.txt @@ -68,3 +68,4 @@ the case for many other methods that scale linearly with spin). spherical_harmonic/spherical_harmonic_transform.nblink wigner/wigner_transform.nblink rotation/rotation.nblink + torch_frontend/torch_frontend.nblink diff --git a/_sources/tutorials/torch_frontend/torch_frontend.nblink.txt b/_sources/tutorials/torch_frontend/torch_frontend.nblink.txt new file mode 100644 index 00000000..4509676c --- /dev/null +++ b/_sources/tutorials/torch_frontend/torch_frontend.nblink.txt @@ -0,0 +1,3 @@ +{ + "path": "../../../notebooks/torch_frontend.ipynb" +} \ No newline at end of file diff --git a/_static/documentation_options.js b/_static/documentation_options.js index d94acc6b..e15aace2 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '1.0.1', + VERSION: '1.0.2', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/api/base_transforms/index.html b/api/base_transforms/index.html index 398635ce..ce5bdbaf 100644 --- a/api/base_transforms/index.html +++ b/api/base_transforms/index.html @@ -8,7 +8,7 @@ - Reference Transforms — S2FFT 1.0.1 documentation + Reference Transforms — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/base_transforms/spin_spherical_transform.html b/api/base_transforms/spin_spherical_transform.html index 5cf7d4c9..54bccbe7 100644 --- a/api/base_transforms/spin_spherical_transform.html +++ b/api/base_transforms/spin_spherical_transform.html @@ -8,7 +8,7 @@ - Spherical Harmonic Transform — S2FFT 1.0.1 documentation + Spherical Harmonic Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/base_transforms/wigner_transform.html b/api/base_transforms/wigner_transform.html index 9490b504..5ae5018d 100644 --- a/api/base_transforms/wigner_transform.html +++ b/api/base_transforms/wigner_transform.html @@ -8,7 +8,7 @@ - Wigner Transform — S2FFT 1.0.1 documentation + Wigner Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/index.html b/api/index.html index 0820e33c..df5edb82 100644 --- a/api/index.html +++ b/api/index.html @@ -8,7 +8,7 @@ - API — S2FFT 1.0.1 documentation + API — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -53,7 +53,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -517,12 +541,12 @@

    API#

    previous

    -

    Rotate a signal

    +

    Torch frontend guide

    - constructor — S2FFT 1.0.1 documentation + constructor — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home +
    @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -530,7 +554,7 @@
    -s2fft.precompute_transforms.construct.spin_spherical_kernel(L: int, spin: int = 0, reality: bool = False, sampling: str = 'mw', nside: int | None = None, forward: bool = False)#
    +s2fft.precompute_transforms.construct.spin_spherical_kernel(L: int, spin: int = 0, reality: bool = False, sampling: str = 'mw', nside: int | None = None, forward: bool = False, using_torch: bool = False)#

    Precompute the wigner-d kernel for spin-spherical transform. This can be drastically faster but comes at a \(\mathcal{O}(L^3)\) memory overhead, making it infeasible for \(L\geq 512\).

    @@ -548,6 +572,7 @@ if sampling=”healpix”.

  • forward (bool, optional) – Whether to provide forward or inverse shift. Defaults to False.

  • +
  • using_torch (bool, optional) – Desired frontend functionality. Defaults to False.

  • Returns:
    @@ -592,7 +617,7 @@
    -s2fft.precompute_transforms.construct.wigner_kernel(L: int, N: int, reality: bool = False, sampling: str = 'mw', nside: int | None = None, forward: bool = False)#
    +s2fft.precompute_transforms.construct.wigner_kernel(L: int, N: int, reality: bool = False, sampling: str = 'mw', nside: int | None = None, forward: bool = False, using_torch: bool = False)#

    Precompute the wigner-d kernels required for a Wigner transform. This can be drastically faster but comes at a \(\mathcal{O}(NL^3)\) memory overhead, making it infeasible for \(L \geq 512\).

    @@ -610,6 +635,7 @@ if sampling=”healpix”.

  • forward (bool, optional) – Whether to provide forward or inverse shift. Defaults to False.

  • +
  • using_torch (bool, optional) – Desired frontend functionality. Defaults to False.

  • Returns:
    diff --git a/api/precompute_transforms/index.html b/api/precompute_transforms/index.html index c25333f9..9e2e9a51 100644 --- a/api/precompute_transforms/index.html +++ b/api/precompute_transforms/index.html @@ -8,7 +8,7 @@ - Precompute Functions — S2FFT 1.0.1 documentation + Precompute Functions — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -514,7 +538,7 @@

    Precompute Functions

    inverse()

    -

    Wrapper function around NumPy/JAX inverse methods

    +

    Wrapper function around NumPy/JAX/Torch inverse methods

    inverse_transform()

    Inverse spherical harmonic transform (NumPy)

    @@ -522,15 +546,21 @@

    Precompute Functions

    inverse_transform_jax()

    Inverse spherical harmonic transform (JAX)

    -

    forward()

    -

    Wrapper function around NumPy/JAX forward methods

    +

    inverse_transform_torch()

    +

    Inverse spherical harmonic transform (Torch)

    + +

    forward()

    +

    Wrapper function around NumPy/JAX/Torch forward methods

    -

    forward_transform()

    +

    forward_transform()

    Forward spherical harmonic transform (NumPy)

    -

    forward_transform_jax()

    +

    forward_transform_jax()

    Forward spherical harmonic transform (JAX)

    +

    forward_transform_torch()

    +

    Forward spherical harmonic transform (Torch)

    + @@ -546,7 +576,7 @@

    Precompute Functions

    - + @@ -554,15 +584,21 @@

    Precompute Functions

    - - + + + + + - + - + + + +

    inverse()

    Wrapper function around NumPy/JAX inverse methods

    Wrapper function around NumPy/JAX/Torch inverse methods

    inverse_transform()

    Inverse Wigner transform (NumPy)

    inverse_transform_jax()

    Inverse Wigner transform (JAX)

    forward()

    Wrapper function around NumPy/JAX forward methods

    inverse_transform_torch()

    Inverse Wigner transform (Torch)

    forward()

    Wrapper function around NumPy/JAX/Torch forward methods

    forward_transform()

    forward_transform()

    Forward Wigner transform (NumPy)

    forward_transform_jax()

    forward_transform_jax()

    Forward Wigner transform (JAX)

    forward_transform_torch()

    Forward Wigner transform (Torch)

    diff --git a/api/precompute_transforms/spin_spherical.html b/api/precompute_transforms/spin_spherical.html index f89c4d5f..17ffcc59 100644 --- a/api/precompute_transforms/spin_spherical.html +++ b/api/precompute_transforms/spin_spherical.html @@ -8,7 +8,7 @@ - Spherical Harmonic Transform — S2FFT 1.0.1 documentation + Spherical Harmonic Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -520,7 +544,8 @@

    Spherical Harmonic Transform +
    +s2fft.precompute_transforms.spherical.forward_transform_torch(f: tensor, kernel: tensor, L: int, sampling: str, reality: bool, spin: int, nside: int) tensor#
    +

    Compute the forward spherical harmonic tranclearsform via precompute (vectorized +implementation).

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – Signal on the sphere.

    • +
    • kernel (torch.tensor) – Wigner-d kernel.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • sampling (str) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”, “dh”, “healpix”}.

    • +
    • reality (bool, optional) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    • spin (int) – Harmonic spin.

    • +
    • nside (int) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”.

    • +
    +
    +
    Returns:
    +

    Pixel-space coefficients.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    +
    s2fft.precompute_transforms.spherical.inverse(flm: ndarray, L: int, spin: int = 0, kernel: ndarray | None = None, sampling: str = 'mw', reality: bool = False, method: str = 'jax', nside: int | None = None) ndarray#
    @@ -614,7 +668,8 @@

    Spherical Harmonic Transform +
    +s2fft.precompute_transforms.spherical.inverse_transform_torch(flm: tensor, kernel: tensor, L: int, sampling: str, reality: bool, spin: int, nside: int) tensor#
    +

    Compute the inverse spherical harmonic transform via precompute (Torch +implementation).

    +
    +
    Parameters:
    +
      +
    • flm (torch.tensor) – Spherical harmonic coefficients.

    • +
    • kernel (torch.tensor) – Wigner-d kernel.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • sampling (str) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”, “dh”, “healpix”}.

    • +
    • reality (bool, optional) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    • spin (int) – Harmonic spin.

    • +
    • nside (int) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”.

    • +
    +
    +
    Returns:
    +

    Pixel-space coefficients with shape.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +

    + diff --git a/api/precompute_transforms/wigner.html b/api/precompute_transforms/wigner.html index 35dec9a4..b286301d 100644 --- a/api/precompute_transforms/wigner.html +++ b/api/precompute_transforms/wigner.html @@ -8,7 +8,7 @@ - Wigner Transform — S2FFT 1.0.1 documentation + Wigner Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -525,7 +549,8 @@
  • reality (bool, optional) – Whether the signal on the sphere is real. If so, conjugate symmetry is exploited to reduce computational costs. Defaults to False.

  • -
  • method (str, optional) – Execution mode in {“numpy”, “jax”}. Defaults to “jax”.

  • +
  • method (str, optional) – Execution mode in {“numpy”, “jax”, “torch”}. +Defaults to “jax”.

  • nside (int) – HEALPix Nside resolution parameter. Only required if sampling=”healpix”.

  • @@ -606,6 +631,35 @@ +
    +
    +s2fft.precompute_transforms.wigner.forward_transform_torch(f: tensor, kernel: tensor, L: int, N: int, sampling: str, reality: bool, nside: int) tensor#
    +

    Compute the forward Wigner transform, i.e. Fourier transform on +\(SO(3)\).

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – Signal on the sphere.

    • +
    • kernel (torch.tensor) – Wigner-d kernel.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • N (int) – Directional band-limit.

    • +
    • sampling (str) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”, “dh”, “healpix”}.

    • +
    • reality (bool, optional) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    • nside (int) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”.

    • +
    +
    +
    Returns:
    +

    Wigner space coefficients.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    +
    s2fft.precompute_transforms.wigner.inverse(flmn: ndarray, L: int, N: int, kernel: ndarray | None = None, sampling: str = 'mw', reality: bool = False, method: str = 'jax', nside: int | None = None) ndarray#
    @@ -623,7 +677,8 @@
  • reality (bool, optional) – Whether the signal on the sphere is real. If so, conjugate symmetry is exploited to reduce computational costs. Defaults to False.

  • -
  • method (str, optional) – Execution mode in {“numpy”, “jax”}. Defaults to “jax”.

  • +
  • method (str, optional) – Execution mode in {“numpy”, “jax”, “torch”}. +Defaults to “jax”.

  • nside (int) – HEALPix Nside resolution parameter. Only required if sampling=”healpix”.

  • @@ -706,6 +761,35 @@
    +
    +
    +s2fft.precompute_transforms.wigner.inverse_transform_torch(flmn: tensor, kernel: tensor, L: int, N: int, sampling: str, reality: bool, nside: int) tensor#
    +

    Compute the inverse Wigner transform, i.e. inverse Fourier transform on +\(SO(3)\).

    +
    +
    Parameters:
    +
      +
    • flmn (torch.tensor) – Wigner coefficients with shape \([2N-1, L, 2L-1]\).

    • +
    • kernel (torch.tensor) – Wigner-d kernel.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • N (int) – Directional band-limit.

    • +
    • sampling (str) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”, “dh”, “healpix”}.

    • +
    • reality (bool, optional) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    • nside (int) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”.

    • +
    +
    +
    Returns:
    +

    Pixel-space coefficients.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + diff --git a/api/recursions/index.html b/api/recursions/index.html index 1759d114..46b2c924 100644 --- a/api/recursions/index.html +++ b/api/recursions/index.html @@ -8,7 +8,7 @@ - Wigner-d recursions — S2FFT 1.0.1 documentation + Wigner-d recursions — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/recursions/price_mcewen.html b/api/recursions/price_mcewen.html index 9a852d39..04f60c1e 100644 --- a/api/recursions/price_mcewen.html +++ b/api/recursions/price_mcewen.html @@ -8,7 +8,7 @@ - Price & McEwen — S2FFT 1.0.1 documentation + Price & McEwen — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/recursions/risbo.html b/api/recursions/risbo.html index bbb85d2c..811081ca 100644 --- a/api/recursions/risbo.html +++ b/api/recursions/risbo.html @@ -8,7 +8,7 @@ - Risbo — S2FFT 1.0.1 documentation + Risbo — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/recursions/risbo_jax.html b/api/recursions/risbo_jax.html index dd80f3d2..d44036fc 100644 --- a/api/recursions/risbo_jax.html +++ b/api/recursions/risbo_jax.html @@ -8,7 +8,7 @@ - Risbo JAX — S2FFT 1.0.1 documentation + Risbo JAX — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + diff --git a/api/recursions/trapani.html b/api/recursions/trapani.html index 8c020456..4eb86541 100644 --- a/api/recursions/trapani.html +++ b/api/recursions/trapani.html @@ -8,7 +8,7 @@ - Trapani — S2FFT 1.0.1 documentation + Trapani — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/recursions/turok.html b/api/recursions/turok.html index 416fddfe..ad89f0fa 100644 --- a/api/recursions/turok.html +++ b/api/recursions/turok.html @@ -8,7 +8,7 @@ - Turok & Bucher — S2FFT 1.0.1 documentation + Turok & Bucher — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/recursions/turok_jax.html b/api/recursions/turok_jax.html index 090c5e4e..a1d2c860 100644 --- a/api/recursions/turok_jax.html +++ b/api/recursions/turok_jax.html @@ -8,7 +8,7 @@ - Turok & Bucher JAX — S2FFT 1.0.1 documentation + Turok & Bucher JAX — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/sampling/index.html b/api/sampling/index.html index e4242e57..f4feaf9e 100644 --- a/api/sampling/index.html +++ b/api/sampling/index.html @@ -8,7 +8,7 @@ - Sampling Functions — S2FFT 1.0.1 documentation + Sampling Functions — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/sampling/spherical_samples.html b/api/sampling/spherical_samples.html index fbf7cc59..5c5de001 100644 --- a/api/sampling/spherical_samples.html +++ b/api/sampling/spherical_samples.html @@ -8,7 +8,7 @@ - Spherical samples — S2FFT 1.0.1 documentation + Spherical samples — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/sampling/wigner_samples.html b/api/sampling/wigner_samples.html index ad7c46fc..235231b5 100644 --- a/api/sampling/wigner_samples.html +++ b/api/sampling/wigner_samples.html @@ -8,7 +8,7 @@ - Wigner samples — S2FFT 1.0.1 documentation + Wigner samples — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/transforms/index.html b/api/transforms/index.html index 82fe51f0..8e628d89 100644 --- a/api/transforms/index.html +++ b/api/transforms/index.html @@ -8,7 +8,7 @@ - Transforms — S2FFT 1.0.1 documentation + Transforms — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/transforms/on_the_fly_recursions.html b/api/transforms/on_the_fly_recursions.html index 337af397..bbd9b7f7 100644 --- a/api/transforms/on_the_fly_recursions.html +++ b/api/transforms/on_the_fly_recursions.html @@ -8,7 +8,7 @@ - On-the-fly (OTF) recursions — S2FFT 1.0.1 documentation + On-the-fly (OTF) recursions — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/transforms/spin_spherical_transform.html b/api/transforms/spin_spherical_transform.html index e72fbb4e..60a0b04b 100644 --- a/api/transforms/spin_spherical_transform.html +++ b/api/transforms/spin_spherical_transform.html @@ -8,7 +8,7 @@ - Spherical Harmonic Transform — S2FFT 1.0.1 documentation + Spherical Harmonic Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/transforms/wigner.html b/api/transforms/wigner.html index 6634deb4..68699f53 100644 --- a/api/transforms/wigner.html +++ b/api/transforms/wigner.html @@ -8,7 +8,7 @@ - Wigner Transform — S2FFT 1.0.1 documentation + Wigner Transform — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/utility/healpix_ffts.html b/api/utility/healpix_ffts.html index 18c6c83f..411dcf21 100644 --- a/api/utility/healpix_ffts.html +++ b/api/utility/healpix_ffts.html @@ -8,7 +8,7 @@ - healpix functions — S2FFT 1.0.1 documentation + healpix functions — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -517,7 +541,7 @@
  • f (np.ndarray) – HEALPix pixel-space array.

  • L (int) – Harmonic band-limit.

  • nside (int) – HEALPix Nside resolution parameter.

  • -
  • method (str, optional) – Evaluation method in {“numpy”, “jax”}. +

  • method (str, optional) – Evaluation method in {“numpy”, “jax”, “torch”}. Defaults to “numpy”.

  • reality (bool) – Whether the signal on the sphere is real. If so, conjugate symmetry is exploited to reduce computational costs. @@ -525,7 +549,7 @@

    Raises:
    -

    ValueError – Deployment method not in {“numpy”, “jax”}.

    +

    ValueError – Deployment method not in {“numpy”, “jax”, “torch”}.

    Returns:

    Array of Fourier coefficients for all latitudes.

    @@ -586,6 +610,31 @@
    +
    +
    +s2fft.utils.healpix_ffts.healpix_fft_torch(f: tensor, L: int, nside: int, reality: bool) tensor#
    +

    Computes the Forward Fast Fourier Transform with spectral back-projection +in the polar regions to manually enforce Fourier periodicity. Torch specific +implementation of healpix_fft_numpy().

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – HEALPix pixel-space array.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • nside (int) – HEALPix Nside resolution parameter.

    • +
    • reality (bool) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    +
    +
    Returns:
    +

    Array of Fourier coefficients for all latitudes.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    +
    s2fft.utils.healpix_ffts.healpix_ifft(ftm: ndarray, L: int, nside: int, method: str = 'numpy', reality: bool = False) ndarray#
    @@ -597,7 +646,7 @@
  • ftm (np.ndarray) – Array of Fourier coefficients for all latitudes.

  • L (int) – Harmonic band-limit.

  • nside (int) – HEALPix Nside resolution parameter.

  • -
  • method (str, optional) – Evaluation method in {“numpy”, “jax”}. +

  • method (str, optional) – Evaluation method in {“numpy”, “jax”, “torch”}. Defaults to “numpy”.

  • reality (bool) – Whether the signal on the sphere is real. If so, conjugate symmetry is exploited to reduce computational costs. @@ -605,7 +654,7 @@

    Raises:
    -

    ValueError – Deployment method not in {“numpy”, “jax”}.

    +

    ValueError – Deployment method not in {“numpy”, “jax”, “torch”}.

    Returns:

    HEALPix pixel-space array.

    @@ -665,6 +714,31 @@
  • +
    +
    +s2fft.utils.healpix_ffts.healpix_ifft_torch(ftm: tensor, L: int, nside: int, reality: bool) tensor#
    +

    Computes the Inverse Fast Fourier Transform with spectral folding in the polar +regions to mitigate aliasing. Torch specific implementation of +healpix_ifft_numpy().

    +
    +
    Parameters:
    +
      +
    • ftm (torch.tensor) – Array of Fourier coefficients for all latitudes.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • nside (int) – HEALPix Nside resolution parameter.

    • +
    • reality (bool) – Whether the signal on the sphere is real. If so, +conjugate symmetry is exploited to reduce computational costs.

    • +
    +
    +
    Returns:
    +

    HEALPix pixel-space array.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    +
    s2fft.utils.healpix_ffts.p2phi_rings(t: ndarray, nside: int) ndarray#
    @@ -803,6 +877,29 @@
    +
    +
    +s2fft.utils.healpix_ffts.spectral_folding_torch(fm: tensor, nphi: int, L: int) tensor#
    +

    Folds higher frequency Fourier coefficients back onto lower frequency +coefficients, i.e. aliasing high frequencies. Torch specific implementation of +spectral_folding().

    +
    +
    Parameters:
    +
      +
    • fm (torch.tensor) – Slice of Fourier coefficients corresponding to ring at latitute t.

    • +
    • nphi (int) – Total number of pixel space phi samples for latitude t.

    • +
    • L (int) – Harmonic band-limit.

    • +
    +
    +
    Returns:
    +

    Lower resolution set of aliased Fourier coefficients.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    +
    s2fft.utils.healpix_ffts.spectral_periodic_extension(fm: ndarray, nphi: int, L: int) ndarray#
    @@ -847,6 +944,28 @@
    +
    +
    +s2fft.utils.healpix_ffts.spectral_periodic_extension_torch(fm: tensor, L: int) tensor#
    +

    Extends lower frequency Fourier coefficients onto higher frequency +coefficients, i.e. imposed periodicity in Fourier space. Based on +spectral_periodic_extension().

    +
    +
    Parameters:
    +
      +
    • fm (torch.tensor) – Slice of Fourier coefficients corresponding to ring at latitute t.

    • +
    • L (int) – Harmonic band-limit.

    • +
    +
    +
    Returns:
    +

    Higher resolution set of periodic Fourier coefficients.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + @@ -860,12 +979,12 @@ @@ -231,6 +231,17 @@ + PyPi +
  • + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -524,14 +548,20 @@

    Utility Functions

    - + + + + - + - - + + + + + @@ -539,12 +569,18 @@

    Utility Functions

    - + + + + - + + + +

    healpix_ifft_jax()

    Computes the Inverse Fast Fourier Transform with spectral folding in the polar regions to mitigate aliasing (JAX).

    healpix_fft()

    healpix_ifft_torch()

    Computes the Inverse Fast Fourier Transform with spectral folding in the polar regions to mitigate aliasing (Torch).

    healpix_fft()

    Wrapper function for the Forward Fast Fourier Transform with spectral back-projection in the polar regions to manually enforce Fourier periodicity.

    healpix_fft_numpy()

    healpix_fft_numpy()

    Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (NumPy).

    healpix_fft_jax()

    Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (NumPy).

    healpix_fft_jax()

    Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (JAX).

    healpix_fft_torch()

    Computes the Forward Fast Fourier Transform with spectral back-projection in the polar regions (Torch).

    spectral_folding()

    Folds higher frequency Fourier coefficients back onto lower frequency coefficients (NumPy).

    spectral_folding_jax()

    Folds higher frequency Fourier coefficients back onto lower frequency coefficients (JAX).

    spectral_periodic_extension()

    spectral_folding_torch()

    Folds higher frequency Fourier coefficients back onto lower frequency coefficients (Torch).

    spectral_periodic_extension()

    Extends lower frequency Fourier coefficients onto higher frequency coefficients (NumPy).

    spectral_periodic_extension_jax()

    spectral_periodic_extension_jax()

    Extends lower frequency Fourier coefficients onto higher frequency coefficients (JAX).

    spectral_periodic_extension_torch()

    Extends lower frequency Fourier coefficients onto higher frequency coefficients (Torch).

    @@ -593,8 +629,9 @@

    Utility Functions

    Note

    -

    JAX versions of these functions share an almost identical function trace and -are simply accessed by the sub-module quadrature_jax().

    +

    JAX and Torch versions of these functions share an almost identical function trace and +are simply accessed by the sub-modules quadrature_jax() and +quadrature_torch() respectively.

    @@ -659,8 +696,9 @@

    Utility Functions

    Note

    -

    JAX versions of these functions share an almost identical function trace and -are simply accessed by the sub-module resampling_jax().

    +

    JAX and Torch versions of these functions share an almost identical function trace and +are simply accessed by the sub-modules resampling_jax() and +resampling_torch() respectively.

    Periodic resampling functions#
    diff --git a/api/utility/logs.html b/api/utility/logs.html index 4d787b87..c5ff64e5 100644 --- a/api/utility/logs.html +++ b/api/utility/logs.html @@ -8,7 +8,7 @@ - logs — S2FFT 1.0.1 documentation + logs — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -135,8 +135,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -228,6 +228,17 @@ + PyPi + + @@ -361,6 +372,17 @@ + PyPi + + @@ -433,8 +455,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/utility/quadrature.html b/api/utility/quadrature.html index 0cefd6f8..598a2fed 100644 --- a/api/utility/quadrature.html +++ b/api/utility/quadrature.html @@ -8,7 +8,7 @@ - quadrature — S2FFT 1.0.1 documentation + quadrature — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -748,12 +772,12 @@ @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -661,7 +685,7 @@

    Weights computed for each \(\theta\).

    Return type:
    -

    np.ndarray

    +

    jnp.ndarray

    @@ -704,7 +728,7 @@

    Weights computed for each \(\theta\).

    Return type:
    -

    np.ndarray

    +

    jnp.ndarray

    @@ -763,11 +787,11 @@

    next

    -

    healpix functions

    +

    quadrature_torch

    diff --git a/api/utility/quadrature_torch.html b/api/utility/quadrature_torch.html new file mode 100644 index 00000000..3258daf3 --- /dev/null +++ b/api/utility/quadrature_torch.html @@ -0,0 +1,851 @@ + + + + + + + + + + + quadrature_torch — S2FFT 1.0.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + + +
    +
    s2fft is currently in an open beta, please provide feedback on GitHub
    +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +
    +

    quadrature_torch#

    +
    +
    +s2fft.utils.quadrature_torch.mw_weights(m: int) float#
    +

    Compute MW weights given as a function of index m.

    +

    MW weights are defined by

    +
    +\[w(m^\prime) = \int_0^\pi \text{d} \theta \sin \theta \exp(i m^\prime\theta),\]
    +

    which can be computed analytically.

    +
    +
    Parameters:
    +

    m (int) – Harmonic weight index.

    +
    +
    Returns:
    +

    MW weight.

    +
    +
    Return type:
    +

    float

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weight_dh_theta_only(theta: float, L: int) float#
    +

    Compute DH quadrature weight for \(\theta\) integration (only), for given +\(\theta\). Torch implementation of s2fft.quadrature.quad_weights_dh_theta_only().

    +
    +
    Parameters:
    +
      +
    • theta (float) – \(\theta\) angle for which to compute weight.

    • +
    • L (int) – Harmonic band-limit.

    • +
    +
    +
    Returns:
    +

    Weight computed for each \(\theta\).

    +
    +
    Return type:
    +

    float

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights(L: int | None = None, sampling: str = 'mw', nside: int | None = None) tensor#
    +

    Compute quadrature weights for \(\theta\) and \(\phi\) +integration for various sampling schemes. Torch implementation of +quad_weights().

    +
    +
    Parameters:
    +
      +
    • L (int, optional) – Harmonic band-limit. Required if sampling not healpix. +Defaults to None.

    • +
    • sampling (str, optional) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”, “dh”, “healpix”}. Defaults to “mw”.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    • nside (int, optional) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”. Defaults to None.

    • +
    +
    +
    Raises:
    +

    ValueError – Invalid sampling scheme.

    +
    +
    Returns:
    +

    Quadrature weights for sampling scheme for each \(\theta\) +(weights are identical as \(\phi\) varies for given \(\theta\)).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_dh(L: int) tensor#
    +

    Compute DH quadrature weights for \(\theta\) and \(\phi\) integration. +Torch implementation of s2fft.quadrature.quad_weights_dh().

    +
    +
    Parameters:
    +

    L (int) – Harmonic band-limit.

    +
    +
    Returns:
    +

    Weights computed for each \(\theta\) (weights are identical +as \(\phi\) varies for given \(\theta\)).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_hp(nside: int) tensor#
    +

    Compute HEALPix quadrature weights for \(\theta\) and \(\phi\) +integration. Torch implementation of s2fft.quadrature.quad_weights_hp().

    +
    +

    Note

    +

    HEALPix weights are identical for all pixels. Nevertheless, an array of +weights is returned (with identical values) for consistency of interface +across other sampling schemes.

    +
    +
    +
    Parameters:
    +

    nside (int) – HEALPix Nside resolution parameter.

    +
    +
    Returns:
    +

    Weights computed for each \(\theta\) (all weights in array are +identical).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_mw(L: int) tensor#
    +

    Compute MW quadrature weights for \(\theta\) and \(\phi\) integration. +Torch implementation of s2fft.quadrature.quad_weights_mw().

    +
    +
    Parameters:
    +
      +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Weights computed for each \(\theta\) (weights are identical +as \(\phi\) varies for given \(\theta\)).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_mw_theta_only(L: int) tensor#
    +

    Compute MW quadrature weights for \(\theta\) integration (only). +Torch implementation of s2fft.quadrature.quad_weights_mw_theta_only().

    +
    +
    Parameters:
    +
      +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Weights computed for each \(\theta\).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_mwss(L: int) tensor#
    +

    Compute MWSS quadrature weights for \(\theta\) and \(\phi\) integration. +JAX implementation of s2fft.quadrature.quad_weights_mwss().

    +
    +
    Parameters:
    +
      +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Weights computed for each \(\theta\) (weights are identical +as \(\phi\) varies for given \(\theta\)).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_mwss_theta_only(L: int) tensor#
    +

    Compute MWSS quadrature weights for \(\theta\) integration (only). +Torch implementation of s2fft.quadrature.quad_weights_mwss_theta_only().

    +
    +
    Parameters:
    +
      +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Weights computed for each \(\theta\).

    +
    +
    Return type:
    +

    np.ndarray

    +
    +
    +
    + +
    +
    +s2fft.utils.quadrature_torch.quad_weights_transform(L: int, sampling: str = 'mwss', nside: int = 0) tensor#
    +

    Compute quadrature weights for \(\theta\) and \(\phi\) +integration to use in transform for various sampling schemes. Torch implementation of +quad_weights_transform().

    +

    Quadrature weights to use in transform for MWSS correspond to quadrature weights +are twice the base resolution, i.e. 2 * L.

    +
    +
    Parameters:
    +
      +
    • L (int) – Harmonic band-limit.

    • +
    • sampling (str, optional) – Sampling scheme. Supported sampling schemes include +{“mwss”, “dh”, “healpix}. Defaults to “mwss”.

    • +
    • nside (int, optional) – HEALPix Nside resolution parameter. Only required +if sampling=”healpix”. Defaults to None.

    • +
    +
    +
    Raises:
    +

    ValueError – Invalid sampling scheme.

    +
    +
    Returns:
    +

    Quadrature weights to use in transform for sampling scheme for +each \(\theta\) (weights are identical as \(\phi\) varies for given +\(\theta\)).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    + + +
    + + + + + + + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/api/utility/resampling.html b/api/utility/resampling.html index 5fa3ae29..72655976 100644 --- a/api/utility/resampling.html +++ b/api/utility/resampling.html @@ -8,7 +8,7 @@ - resampling — S2FFT 1.0.1 documentation + resampling — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/utility/resampling_jax.html b/api/utility/resampling_jax.html index a42f2049..a4e656e6 100644 --- a/api/utility/resampling_jax.html +++ b/api/utility/resampling_jax.html @@ -8,7 +8,7 @@ - resampling_jax — S2FFT 1.0.1 documentation + resampling_jax — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -138,8 +138,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -231,6 +231,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + @@ -436,8 +458,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -762,11 +786,11 @@

    next

    -

    quadrature

    +

    resampling_torch

    diff --git a/api/utility/resampling_torch.html b/api/utility/resampling_torch.html new file mode 100644 index 00000000..aad4b39a --- /dev/null +++ b/api/utility/resampling_torch.html @@ -0,0 +1,850 @@ + + + + + + + + + + + resampling_torch — S2FFT 1.0.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + + +
    +
    s2fft is currently in an open beta, please provide feedback on GitHub
    +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +
    +

    resampling_torch#

    +
    +
    +s2fft.utils.resampling_torch.mw_to_mwss(f_mw: tensor, L: int, spin: int = 0) tensor#
    +

    Convert signal on the sphere from MW sampling to MWSS sampling.

    +

    Conversion is performed by first performing a period extension in +\(\theta\) to \(2\pi\), followed by zero padding in harmonic space. The +resulting signal is then unextend back to the \(\theta\) domain of +\([0,\pi]\). Second, zero padding in harmonic space corresponding to +\(\phi\) is performed.

    +

    Torch implementation of mw_to_mwss().

    +
    +
    Parameters:
    +
      +
    • f_mw (torch.tensor) – Signal on the sphere sampled with MW sampling.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Signal on the sphere sampled with MWSS sampling.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.mw_to_mwss_phi(f_mw: tensor, L: int) tensor#
    +

    Convert \(\phi\) component of signal on the sphere from MW sampling to +MWSS sampling.

    +

    Conversion is performed by zero padding in harmonic space.

    +

    Torch implementation of mw_to_mwss_phi().

    +
    +

    Note

    +

    Can work with arbitrary number of \(\theta\) samples. Hence, to convert +both \((\theta,\phi)\) sampling to MWSS, can use mw_to_mwss_theta() +to first convert \(\theta\) sampling before using this function to convert +the \(\phi\) sampling.

    +
    +
    +
    Parameters:
    +
      +
    • f_mw (torch.tensor) – Signal on the sphere sampled with MW sampling in +\(\phi\) and arbitrary number of samples in

    • +
    • L (int) – Harmonic band-limit.

    • +
    +
    +
    Raises:
    +

    ValueError – Input spherical signal must have number of samples in \(\phi\) + matching MW sampling.

    +
    +
    Returns:
    +

    Signal on the sphere with MWSS sampling in \(\phi\) and +sampling in \(\theta\) of the input signal.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.mw_to_mwss_theta(f_mw: tensor, L: int, spin: int = 0) tensor#
    +

    Convert \(\theta\) component of signal on the sphere from MW sampling to +MWSS sampling.

    +

    Conversion is performed by first performing a period extension in +\(\theta\) to \(2\pi\), followed by zero padding in harmonic space. The +resulting signal is then unextend back to the \(\theta\) domain of +\([0,\pi]\).

    +

    Torch implementation of mw_to_mwss_theta().

    +
    +
    Parameters:
    +
      +
    • f_mw (torch.tensor) – Signal on the sphere sampled with MW sampling.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Raises:
    +

    ValueError – Input spherical signal must have shape matching MW sampling.

    +
    +
    Returns:
    +

    Signal on the sphere with MWSS sampling in \(\theta\) and MW +sampling in \(\phi\).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.periodic_extension(f: tensor, L: int, spin: int = 0, sampling: str = 'mw') tensor#
    +

    Perform period extension of MW/MWSS signal on the sphere in harmonic +domain, extending \(\theta\) domain from \([0,\pi]\) to \([0,2\pi]\). +Torch implementation of periodic_extension().

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – Signal on the sphere sampled with MW/MWSS sampling scheme.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    • sampling (str, optional) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”}. Defaults to “mw”.

    • +
    +
    +
    Raises:
    +

    ValueError – Only MW/MWW sampling schemes supported.

    +
    +
    Returns:
    +

    Signal on the sphere extended to \(\theta\) domain +\([0,2\pi]\), in same scheme (MW/MWSS) as input.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.periodic_extension_spatial_mwss(f: tensor, L: int, spin: int = 0) tensor#
    +

    Perform period extension of MWSS signal on the sphere in spatial domain, +extending \(\theta\) domain from \([0,\pi]\) to \([0,2\pi]\).

    +

    For the MWSS sampling scheme, it is possible to do the period extension in +\(\theta\) in the spatial domain. This is not possible for the MW sampling +scheme.

    +

    Torch implementation of periodic_extension_spatial_mwss().

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – Signal on the sphere sampled with MWSS sampling scheme.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Signal on the sphere extended to \(\theta\) domain +\([0,2\pi]\), in MWSS sampling scheme.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.unextend(f_ext: tensor, L: int, sampling: str = 'mw') tensor#
    +

    Unextend MW/MWSS sampled signal from \(\theta\) domain +\([0,2\pi]\) to \([0,\pi]\).

    +
    +
    Parameters:
    +
      +
    • f_ext (torch.tensor) – Signal on the sphere sampled on extended \(\theta\) +domain \([0,2\pi]\).

    • +
    • L (int) – Harmonic band-limit.

    • +
    • sampling (str, optional) – Sampling scheme. Supported sampling schemes include +{“mw”, “mwss”}. Defaults to “mw”.

    • +
    +
    +
    Raises:
    +
      +
    • ValueError – Only MW/MWW sampling schemes supported.

    • +
    • ValueError – Period extension must have correct shape.

    • +
    +
    +
    Returns:
    +

    Signal on the sphere sampled on \(\theta\) domain +\([0,\pi]\).

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.upsample_by_two_mwss(f: tensor, L: int, spin: int = 0) tensor#
    +

    Upsample MWSS sampled signal on the sphere defined on domain \([0,\pi]\) +by a factor of two.

    +

    Upsampling is performed by a periodic extension in \(\theta\) to +\([0,2\pi]\), followed by zero-padding in harmonic space, followed by +unextending \(\theta\) domain back to \([0,\pi]\).

    +

    Torch implementation of upsample_by_two_mwss().

    +
    +
    Parameters:
    +
      +
    • f (torch.tensor) – Signal on the sphere sampled with MWSS sampling scheme, sampled +at resolution L.

    • +
    • L (int) – Harmonic band-limit.

    • +
    • spin (int, optional) – Harmonic spin. Defaults to 0.

    • +
    +
    +
    Returns:
    +

    Signal on the sphere sampled with MWSS sampling scheme, sampling at +resolution 2*L.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    +
    +s2fft.utils.resampling_torch.upsample_by_two_mwss_ext(f_ext: tensor, L: int) tensor#
    +

    Upsample an extended MWSS sampled signal on the sphere defined on domain +\([0,2\pi]\) by a factor of two.

    +

    Upsampling is performed by zero-padding in harmonic space. Torch implementation of +upsample_by_two_mwss_ext().

    +
    +
    Parameters:
    +
      +
    • f_ext (torch.tensor) – Signal on the sphere sampled on extended MWSS sampling +scheme on domain \([0,2\pi]\), sampled at resolution L.

    • +
    • L (int) – Harmonic band-limit.

    • +
    +
    +
    Returns:
    +

    Signal on the sphere sampled on extended MWSS sampling scheme on +domain \([0,2\pi]\), sampling at resolution 2*L.

    +
    +
    Return type:
    +

    torch.tensor

    +
    +
    +
    + +
    + + +
    + + + + + + + +
    + + + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/api/utility/rotation.html b/api/utility/rotation.html index 6213d74d..76b215fb 100644 --- a/api/utility/rotation.html +++ b/api/utility/rotation.html @@ -8,7 +8,7 @@ - rotations — S2FFT 1.0.1 documentation + rotations — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/api/utility/signal_generator.html b/api/utility/signal_generator.html index 6ba28a0c..35c6f9ad 100644 --- a/api/utility/signal_generator.html +++ b/api/utility/signal_generator.html @@ -8,7 +8,7 @@ - signal generator — S2FFT 1.0.1 documentation + signal generator — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • @@ -506,7 +530,7 @@

    signal generator#

    -s2fft.utils.signal_generator.generate_flm(rng: Generator, L: int, L_lower: int = 0, spin: int = 0, reality: bool = False) ndarray#
    +s2fft.utils.signal_generator.generate_flm(rng: Generator, L: int, L_lower: int = 0, spin: int = 0, reality: bool = False, using_torch: bool = False) ndarray#

    Generate a 2D set of random harmonic coefficients.

    Note

    @@ -520,6 +544,7 @@
  • L_lower (int, optional) – Harmonic lower bound. Defaults to 0.

  • spin (int, optional) – Harmonic spin. Defaults to 0.

  • reality (bool, optional) – Reality of signal. Defaults to False.

  • +
  • using_torch (bool, optional) – Desired frontend functionality. Defaults to False.

  • Returns:
    @@ -533,7 +558,7 @@
    -s2fft.utils.signal_generator.generate_flmn(rng: Generator, L: int, N: int = 1, L_lower: int = 0, reality: bool = False) ndarray#
    +s2fft.utils.signal_generator.generate_flmn(rng: Generator, L: int, N: int = 1, L_lower: int = 0, reality: bool = False, using_torch: bool = False) ndarray#

    Generate a 3D set of random Wigner coefficients. .. note:: Real signals are explicitly produced from conjugate symmetry.

    @@ -545,6 +570,7 @@ (i.e. directionality). Defaults to 1.

  • L_lower (int, optional) – Harmonic lower bound. Defaults to 0.

  • reality (bool, optional) – Reality of signal. Defaults to False.

  • +
  • using_torch (bool, optional) – Desired frontend functionality. Defaults to False.

  • Returns:
    diff --git a/api/utility/utils.html b/api/utility/utils.html index 47a35b41..001f7d68 100644 --- a/api/utility/utils.html +++ b/api/utility/utils.html @@ -8,7 +8,7 @@ - utils — S2FFT 1.0.1 documentation + utils — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -434,8 +456,10 @@
  • signal generator
  • resampling
  • resampling_jax
  • +
  • resampling_torch
  • quadrature
  • quadrature_jax
  • +
  • quadrature_torch
  • healpix functions
  • utils
  • rotations
  • diff --git a/genindex.html b/genindex.html index b93fc792..715be928 100644 --- a/genindex.html +++ b/genindex.html @@ -7,7 +7,7 @@ - Index — S2FFT 1.0.1 documentation + Index — S2FFT 1.0.2 documentation @@ -42,7 +42,7 @@ - + @@ -134,8 +134,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -227,6 +227,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -554,10 +576,10 @@

    F

  • flmn_shape() (in module s2fft.sampling.so3_samples)
  • - -
    + @@ -771,10 +809,14 @@

    M

  • s2fft.utils.quadrature
  • s2fft.utils.quadrature_jax +
  • +
  • s2fft.utils.quadrature_torch
  • s2fft.utils.resampling
  • s2fft.utils.resampling_jax +
  • +
  • s2fft.utils.resampling_torch
  • s2fft.utils.rotation
  • @@ -787,24 +829,32 @@

    M

  • mw_to_mwss_phi() (in module s2fft.utils.resampling)
  • mw_to_mwss_theta() (in module s2fft.utils.resampling)
  • mw_weights() (in module s2fft.utils.quadrature)
  • @@ -845,6 +895,8 @@

    P

    @@ -853,6 +905,8 @@

    P

  • phis_equiang() (in module s2fft.sampling.s2_samples) @@ -869,30 +923,40 @@

    Q

  • quad_weights() (in module s2fft.utils.quadrature)
  • quad_weights_dh() (in module s2fft.utils.quadrature)
  • quad_weights_hp() (in module s2fft.utils.quadrature)
  • quad_weights_mw() (in module s2fft.utils.quadrature)
  • @@ -901,24 +965,32 @@

    Q

  • quad_weights_mwss() (in module s2fft.utils.quadrature)
  • quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature)
  • quad_weights_transform() (in module s2fft.utils.quadrature)
  • @@ -1043,8 +1115,6 @@

    S

  • module
  • - - + @@ -1172,6 +1266,8 @@

    U

    diff --git a/index.html b/index.html index f9e57e6a..a3eeb4b1 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - Differentiable and accelerated spherical transforms — S2FFT 1.0.1 documentation + Differentiable and accelerated spherical transforms — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -137,8 +137,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -230,6 +230,17 @@ + PyPi + + @@ -369,6 +380,17 @@ + PyPi + + @@ -432,6 +454,9 @@

    Differentiable and accelerated spherical transforms\(L\).

    +

    As of version 1.0.2 S2FFT also provides PyTorch implementations of underlying +precompute transforms. In future releases this support will be extended to our +on-the-fly algorithms.

    Algorithms ⚡#

    S2FFT leverages new algorithmic structures that can he highly parallelised and diff --git a/objects.inv b/objects.inv index 79a2a5635827e90b20a54b58e702e9e7fa588a2c..d4362413f84c87273e2ab31109de80e066cac3c9 100644 GIT binary patch delta 6694 zcmV+>8rkKNFX1$hJpnS2K0SZ3Jol;3t#XHfR-RwrTY>z9lZ$_iYI~Kc} z-AxahoGm$Nu^D_9%h_sy_rFh z!G5$3@ad#;kQFDkNsXpXv$TGC(cY9O?{4j@wC<9h{{v##(yZ(c$*wus8mIZOu(f4L z-IT5IDb1}2c=qPp)WUy%Sta}8Qa1G>U-w1M>Z;k-o4f$=FDASsdo*6|&Pkk=>Bp!% zx8;SM(__s5At>i~ud7P?KB@8~`$TS|KgS>ayB@0FwUjR0`BW(HhhX|;78n&;OizS& zYV2*k`KkOGM?a^8CuhtZ&B@KK(!nI7cjZATgBsVd3=qK|O|ju9s5 z>0F=HF)qkata{ycocbbZ$(t2L>4o@*WY2qt^vC2tP5+^Zt6JA2SkwAQ>5-Z~O^zu~ z>b@x76Q@f@eU7u^J!PR@vQj4YirG_I4~cx=I`T$Lo-BV0a{81>^R%YqqSW8<Fh^{Jtaq(kJ=3^g@0vJtm8%+^l^u^Tder(|wtK^g(?}>hwU*%q!wO zuaM-typDI}gPb_u7s>HRPg|bTDEZK&G5AWBh`b$VanoJwq512aRH={f>vK}ao@k@w zW1Zw}-$d@9y!V-@J-e3#=fuok+%376uv=2`oxXpM>R;dcDU2N}Bcd%{>PJw+)FO8H zG*h0yQEy-!4uia}IQl$G2x!RV#B! zuU3D)M#p}csNuRCiv^p?bt&33BJq+pm-5M@ANgxn*BB%>2-Pc9pGs?Q(ZlQZ|Nr!y4G*u=W+C5kY7+@sDD8 z@Rl1(D#--`Vp(nwP|KF4I8vux5;^sj%Bg?HWKKP#^Zb;}ypYnS^7;vw!H>X%?6mQ- zGTHN%FN=;vc2Iwu;K=MZZt7Av@t1rEQ5@2}a@LC8iKo;89JwdlhbBH$aotpjv|F1Y z%1%vyT^^&yZdrq>6ac#H~s{mtGFFGvZ~vWBdfeE`BgF& z-vrpxUq^^plYsIu4H0w=LkGk*4L#VjaS&W+xg8q_OILn{;2R2S2iV5K+5xt~aBy(7 z%rF++cp&4vIw6pwlTCM()KMfGE$%Yn5E1$SF+{P6Lo z_>`Pe_F~+E)#x$Ti8o?pT(@gt=#sg~JN5$+Tj{HKLCkH!kgzKU?@Ji6s*QtplPVz} zPe^&uRl|lGUq#UDmQ}@p-@MA8of%afJgaRLa`J$#N+>VtLGK!fty0sV*QkF|q59Yj zH@;$7@*7kx6A!i(%*}^IB{OkoR?&=@tt*?W7kq_Nc`E9-9`YEjY6C!B#YWKdRd07C zi4K`EF&5lX(t+!kUF^wNdTQ6+4Dl6}RPP$7)V%>u`j44v01rDcV$ZGUpFi&tGl+v8 z^!$0i>cgun-X&QOei_tFzh-}$P3gHx*tea17>B)m@OH_^JfXk z^Ky~V3b?dhO7iW92uDOXKRY#+eI|&+qrL4_lBAoGy?V0rUft}elV`avt0 zD&2dD0KD1Rsggm_->D3`zUE;91iu;P4j9VU?R-BRXC0V%05E@zX;iC?Nez+$*wPd+ zTE<3kYqqnoeaxngOwc|hM~dekPvS+Fc6QfE5Rj_*J(o}ZtZQalsH#vL!^#ftWA^1Xy(x%1>9yG zmD^GqjN*hZL?wT7b~;a($qm_jBYH1;1i5AO20P?igm1!*hLS5Y?+5HOA{&31kw@Jo z&AqF3Z5yvL^qB@mt-5n6=$mr2DP2k!4gd|6V@7?@Ts)yN@Acbka3?eJsM}-xHXp;O z41K17&-!gMR8yPwDIskCs+g?XpoH;EcnId(a?;z!0Udt|`$pj$fuq$-70%go4CEqL?` zrB>L1v560z*TxW%f)(=5dEP%x(;hTx+i$s{*=>5 zyOI9XA)J2`4T&xU%t=MaKu}bA3><8~T|Or1r;kH=?ZNL~|4B`$PC;#%g-=;hkYU5Z z9@1nG9GVh`+Xxs>;Lv51cv43@b=Ce+kx5f^JYNdyOiP3b2759UIw&+D4(ArUwoI9Y z4wokgQPS3=M1d_y0 zTt^nH24EU3UWyq+Zf;{I5IPOcT^Yz~0CvzaA3sMVLm?5ZE*j@)^{HVAsIgx)rdky1ht~Ak4Y+6Vk@pM|0V!^-)(|^1& zZt=JJaAwPQJ6=+KzXP~{?6h9DhqtK}!H2yGOG<~!7&ptZ4;`~>8i$_IE>QiMy~dFu zD0K+O(8qJ_2t%JJbqLqc#gm6A<6rQiU<690V~&ZH%)BTVnUZtqN6EPia4-TT(*b|Z z#7bsf6pTO#eI=hs^%z$HwGRO`LO@L;KsfuFP=Uyb0J&=z4%w!aFp}yqjsnKBya~gf zD0K+O(5K_V31go*wGhYXhcn3uV;>nc0N1$1^RX$TU+|(}R7%7X)_o{i@EgG?6n4jU zQ_Jc}^%z$H{r<3&(GQFo07=}!?z4a73Pf%+)KOJ`1fGYwzaqxrNW@TA4v`fBa@BB7 znV0-n@Spc1+33mBp#Q5^d@LWdG$ScOFU8P5U!!O9E>#bfl&ik#XT(R z#?2+Jz~Wcp@Z{W&?c&eezWMoWon<2^I?Ol z6@323cfa{!^UW{D`E4<=ghhXSRDOnx3QIvq6L4Qvgb%v87ZEdV+>pg}S~rKZJxGDo zNolLc-k+u6719D;jNmstgym~?#)RoIe*Ax}G9ve9X?TUS@L5LGJ{^oV>0)+%1mV#U zW``-5Z8K_kgaTq~QT=|Rbb7P}%T*Ixia;2-w!FENPkz-6E|5Snh0=fhiYT-#w=2@` zOi8E5Uuj%8K*7khc`S`97f7I?LZe*}uXXeaa_2*%?G6!p93nP0#O!8>-NI0{1C+sL zh0491blVbY_9C(x}QVf(W z{1)R9E=@7eG};iV4|;z*m~cEEg&RudE}77z5W@D$~$p zMB*Ql_;7p(5JB8<&2Wods3CeFg$7A=aa18z8w`{}iDdgkMl9akaq^KH^ z5>$!QN1aH~l_Djo6{(+Uks8#Cl&oT;eriT)P&HELx-qYWVI+Sl7JLX0LEL2ZV#A39 z+GFSu?d<|5?TJp$xSV6<*_o^^Py@M9gFM$u9dQowI#(OsbrAl5KL@> zCX+v1fbx{ZLTNruJNnbo=J}eD=X!cNk@xp{@gp^buj>OiB)jHh;a#u;F6#ZJ`LVEYJDY8<>7BBqZps#VQuh6z=asGGhCYVJ zxXRm3#a#Qs61=?h{-KEvRa`e!qOKJJuB#jKe-$4z9X5X>(B3pO$XH%EguR-5V@y%yP-CERZCAkD0R~H@9&Xs94hAB5i#t z77{I!Bj0~POM+buNVX4aTWOWUfX!ID(*rYCN|MxB-*K zicl_NzEm<6n1D$&T_F=O11qf^nP{UymbqNrU`u~tA(hz8@}h@aJ$gOp0%nRK51NsZ zWRZ z&4zz>R>HMIJeAE-Y?Vw~9Vmx)0puK5mkg>qlcZcFJ?{|2Jc280L zSZJ!}IyOUE6SR$-w$&n%AX4cNZlOlyIVB9Yr^BEe!6_*xg6THd#F=Y6f zC1Xk?jf9Amaoz6KNmA^!{8nZ*N}IgnIyiqznu*l+t%58)w4N|29!n*p%}g(1dSWxY zOqBk8*b2Mq!ME?5w%qD2Sp7Z>@Q$D}j8D#F*d@Xl24I2@f2 zbVqJ3M%9@^SVB?wF5N8@#;hj3RE@0px(gM2+-3I6`Kzy2)p z?u)#?SyXb$1?X4epI`p-e?)(_!y?f_o@k+vXyLrOrEDjA!Kn?GW2Uu-eCI3)FUh5l z#JDv2`n@gwfMM*nj`qzyHV0i@NC#ppzahum*I+_zy*$ zbfo|!xZNfB{(On6_pSGH(Nw1_W-L5r#bbMgZI0f9oS;~~5-`CpfBAo3IG%hA7vXir zYD6|HJ|$sQ?B6GdBwND2Yya>Z`1#*N?y;wyd;5IHv+BK!eT(lh=WW-|2l3F;VLaR> zACrAkC*5%c{47`{7F%heHQ$7T4RAwIY$`ZFI-o za)C?27Q5<9GG$xswmyF%0%2v1YpA^Cy_CG+=9Q?;rlhLYBQ3Y^Z+`{wPuIHq@2-(6 z8Mbo`@!Keq3PrhJro*)T?=>@g*zWXGB@@d1GMT3Bas4LK)e_`e+=kq0k==wqbgcNu zDajA3znWG_ZQGw6)J?OG*Md`%9uiacx82onyc%{S_A%YQgXn*Bf%cpHj)yg2+ijVZ zxTiUoEoyfrZLcZ>n>N-cvavDi(fWE|5bQ|({hAtX8_5!TY5=roz zFt-6UjGJ|JiH~Ag9cS70*#N+F)#FY7ryG9Bm~MyPZEe1Uj1TYkNqFK_uDx?=%JLXTj@-H!bSLuHA}reSm*mXL~62qa_F$o}-fPsh^h} z;gCDXMt1my&X>c9OAy_`&p0bKLF;GEjdH5;vFers% z$F4}*NSU-u(6+N{K9fUNHhZ?p$dvoVuD86Dk*xM@g+IuX87sE8lyBUiCzEbZrTSbD zL95z=0bU&;BUOC(Ctqu+CzF1Mpjx|upjEAygkIZADJ3f~RBu{kT*&wGo0pn0zRg=y z;T3-%AH#QVMpUDC{R>0!1rKMOUhzc3E1sx*#j|!n_o`^Woh|V?6SFs-`TYl+tA<5B zuBI3MA50?cjVGA@0jI=aksflxb^c3u$lE^MV;&Qit1>`~yZJdZyxFhT8(6MVIG8UD z_~c6y66t%`tGw&wUC}%Wo1BeT#|cFK^JafDl%qTWFTB}|1s&Jvj5A)Sd9!EB3Bwec zvFv9vzwkR9YCi1=hu&84c1+ezIQH|A!L{ZzhqW_&2+^*dQH)9Ci)^gUPI$%(5x)SG z=JF{VZ}jEqo6c@1*CxwRo(aoP3gHp(c~Kvqiw}XeC)dxUA*T!lLe&%J+`y`8r*41# z?REwTM`wVOa^)~NB+M%71*Sbe?~{oo8jI=Vgj-55k)%zZESSFao*y{x6b|k+Awq1-+zct$<2Byz{lcxo{H!vs4E>|&(;&jid==~ zpqI+0D$nkxY3J=EwW@uBo2F-C>m$BlkkuUV9fP7Wj&C38Vak8kPx&jEr#F8OQr@0z z^0(A8)&Kwi delta 5969 zcmV-X7p~~xG?FinJpnP1K0SYuoy?b%q_y(7um8-vAS zRnfyDIRvSicIdDVup4{Wn_@Q{zU_VANKfELSpE|v6F>q;ls9?1o`1*WhVGmH*RVXa29I?XRY{(CUl^Fg*h;eR(w+u z2HQ~@z{g2tAk9x~6OFn`(xiHRXm1LbcekQ4sk-nt{{UaMFf08-ysuBD%1L(2O?6pZ z)kUj(N-`sWrg*bP)xdv#QN~ezDe7ubu2G(`s;r}GQx>57!z3>#9)*?ra~!5c@+m0J zZGBZ;Lxh|4TaeO%KiQR!kS>Trw2*LoocZ2(&6KrYFK1 z)wVX@{JHFEm7|?)alhiw+RY=pvFkj-f>8%-VCds@+K6)8p|*ddXTqS&D2!9D~@v@Thr%NpBB6bF|mzQ)<6a?f%Pyqut33sCPzx56|HSlZlxhAC20 zCN>0Nvb1xGn{bAWp*h^_Hdb!OCzu~~H#0`Yu1wfImsR9WKwX1-v9Vem>ok?S$H9v6 zMwU|FS|Ox=ov44Nk25@o+dMmpFiT`!4kBtFN5Rp#(d;j|5{_7m*&J>0@$Cno##u`H?s-9rQU&kB^j=m-3SPwydYz;XBCJ)O3oIWy1mQ<8jl>9rqEYBz)>oR};AnlA=0Yq2SiD`5hGb{oR z_ZTpN><6=yz+`}JEhoTHjfo~9WFarcL|C$_LD3{r#z}UFKN&)@@KU5ncDiSeLH9e} zPTY?&5A$s2ASws|0D2#%m&e9Yz)cmr9QPQob6CXmxalSM;t*7M@OW?n{@8(k;S&5@ zH~~Kw4#R)qs5C2A$W1W9?DSY9pIktn;wm}NBR384v1yRxxJ?`H>IXS+7Ul8rNDo__ zlOXa@_n zv>ca)RZ`W5Bx~DR6+;gZoNXJUf;k5|!{gf7P1%Z!(z6xs;4t4rsJUyyU^}05$AmIQ zBvya2`cgbQv?E@FCbr->UZWK^@e=H)z;2_^**l?J5f^Vnd{sN*jswt0aTpB?-}K{bxlSHIILgG&ttzLB0pv64{a8MblU2ha{3t&(IsO zX7jNQ4`o=@Wh{KC&LYxBDkpZi2G?#;UDkBguoArX=YSX-&Otv9mS^cRIXu0?tnt_Z zsI+;Tf?lppK%Ev?gU^^FShtSLcAV;CgG;Yl7|G%*gs9t;p@mWq*RDyMm~lq{-Nb** zz>!Ve3>?|yO~G$cu=q!SIs9#i=sgm|Hp+OMy%atYW)bP*fD=39*Q}oe4ffALb8BLUNde@$T3B0Dh8-p14k>|fE8iYE~nCkxz0ND0})!`s(L}lZD2^yr9JOb z4B6Dio>!+yU>*i5Ty)bg!NxZcG`fFbQ?bC;Z!&0OT1^L!YTAUXETEf`#7bU;)li~v zLmC9+O=uLFzE0_`#K9qzhGBs%1Rb!B>BSt3C8u@`Y49&Eg?!h7Qr;WkiT^Q`jU`|s zTIiV({Hs@eFul<0gcaj%#9$iB4v4awbG&4+vX!xQ7q6W^NuYsP+Lq zl*VU}fyJ?>lV%Mv^9luR;W;W5k)i82Y=jUMA9M>f;3IFAOQD{Rq&MSwueVR{R^q$n zpG>8@KdGrQwt)6AXySe1V|9&iFDmjMx2 zG}paJNV+MSn}?;hYNt;fo@D|ommyhM(${fH-Fb}wteNS_!XWAIWC~qh^E3%~zZqWN z8OqjfzVDAO{!HHi7)IBtRrV*1Pyl(O5Tj+R7dyQaYUV!c8q$$=NjZ?b|2QJgn>5qA zO+a*>O@u*FKBN@7PJ(|Ue7~R$$MR(ZDeaQ-EgJ}6(oF9*0l7^B5tudC)eVl;oRJ25 zyZIt%ZaR(rm)j;Tm~By6!n~G>W{S|M9ueS%-fJX~G;m)B9W6@EO#dNg#u52s6Dc|5 zt@A9i<*s~y$rR~gpxLKuvc`1e(A*&*Gv~EhufG;4IppoIR_lLv%QD4223)=$$t(3n zitD@lgE!w6gYK?_w9kDgj57qPVvH}6ZK{ZEGIKU>ORlZzDcQ0GbNy0sg$-z{xZp`%u3{rbYEC$d2L9Bv zM?0pP4$0r9+91IJpghG3BbNp!n3R?KDOE zM+PR0>X=X*YfK4*aR!@;9PJbu5GQBnys}Q|xenJSNXmcSZDm{4cOC9VM3Mv)y8P|L z9C}Q&C;H#;p%Xz2a&fU8bWC6b9cCe@-=okg2MZz zJ4)m;@0WFShC0jf09RimXaf~sXK35LLfj(s-rS}7(LV(0? zE-52910EYKYRPJO7$PC16);YYgba1#;877mwjB6F9w}KYa8Y6uOvnpk235;g5`Ye_ zB%}hu>quMD8_&!nq%=XQBy3&pkL9HFd_YtPto&Y`nJAx21P)jnzo~^M=eFpg2|s`C zWKk{q2s~X6F(;Jj`G`VP%UHRto;=j_Tr_pK6|wVsan358_e)r$pgoh<>ZwB$Ca*;^ zhay3HCe+o5!^B7t5uh)M85SvM$7DVkmyQO9iIM6F;Idu8DX!Kjfx&E6vTVd~;wnx< zVgWt?R^`3;*jVomncv*Vn0+*LPW9ft+26_PS>8q-H$+!b~QP@*;?7fGst^a;O}v2mBC z8YmvxkW}w9cz`(g*b^Q#?hSueyyJ4qu?Twk*xDY0u3=gUrR$pTXm;+8j(<2jgb;z> zaLcgsoogX#K?)9n=3>c$Z#EcFTP6v0HA+zRC?TjwiHn+)psP|sRF@Jrl_}AvO^J1N znzvjq5*7WL0T{i4-*Du-=Wpz`YR$L||YYX-Z0Du=f2Szh?a>Nx}X(sIIx95w3mHgw>HYq0>H>h$w&XP$~&KSA*i55W3sLVWceG z7JNN!?l}MLxKhrZy{I?5YRfPDO07sYyZ7T>_FsRM1_gE*V)D3d-6LGV4xJl+fL(K$@18b{A{N5!2OTRBhPn zbh{{;itcwIW97JESBxWp?~;Y`)a0<;voS$QH!am!5zVWx-G!v+q(`Z~dmjEVF%;N| z4)>8}q!1VvAjSFo-|k8r98!k$2akso)b)MPJf?paJD(Rg3W24MEIG9wz7JgTQeJB| z(p~N8uX@u}wFRgqtmQPlz(MMJD#M$rz%jk(`l|tqm87JTIpdSz39ZHzL#3A0&|#}- zTP?ev0sx@4U@#%I!Hi&!Dz`87*U9l1mvPn%8}@1JwV7OTY|RQGVd;PAxR$^D<=_9~?xCvtG|9pgSZjf<8vj18 z;;t5e0K0vhMdwRcerTRI1FcyDy z@uxVdtGG+5HQw{vOgK!>`0h(F&~VFZZh73OvAKnEu^+zpp+9usdValMX-k4MCwmxk zIslirL=f^q(nVY41R5ngZaK}?)m?u|R@;c$Vv5UhJ<_ssfA=c@f4bI{e|L?X$&hrw z$0z$BC5ke?jKh?q;+6$Ie3bulg$aLUei^1IiG$lP-7FwqjLVvf0hTA+@u*U}FfYJ!9pft8m3rZx;Z`|BE zRI^6yR40eH8J)2zOw;X{7m(?i$GiSdH>?mL?S|j}vCJ<%Ylf{+?4O#quX=xvG9uF- z?0fAkufOGe{@bMbUA=#)@&}ltQ+Uv8=x}ap&7Z;X zjwtn+%9cgGO9*b=)K%uCUE9(W7&06#=H@u!|4urULR>( zhDDeq5~M+5%7Nbgxq}WymSIc>bFa_07oD)I0+SxJy*6)7K5I!`7jwZ zx0_`z5#DBIB5!#bWj?$GfCX*()K+W^TM@Uw+A)u=Qle4E?TWf z8?Iv?^cRnR_QmU1xKekM)xf4Jn#VJfvGM9S71#W{+YE{*Gx_>=n^BeJPL6Tz2sH!s zVmbAeKy!cnyx@OJw-bx{6Ns?uZ4++?PVLlPKeOlEYIbngUC|67+Wi%hF^PB^hEcY) z7fmH(;Mow&W42-+(w0*dzpHbSI1ZU>(p&e;hGA8P8H*IH8#6j5)%6Z#Ktx;=0~zXwk8{KxE> zW6iy2m5+aV;G!=Zr*RQ=;N zU+|9!e)e0`a`^dgNn;#m#;ajEdf!h+OOdBpaUpJxwwg0vnNT(T<$Sr^RM+%@8THjL zgdZR)c8f}07+@6S7DwY(ZP+UPo;~F&Gwg`oW}QWDi)r($>o=LAro}|NQn$T3?;vV_ z#PDGA=rb!DZq;u)+v{R&#Pz}L@@W*pW45l_ - Python Module Index — S2FFT 1.0.1 documentation + Python Module Index — S2FFT 1.0.2 documentation @@ -42,7 +42,7 @@ - + @@ -137,8 +137,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -230,6 +230,17 @@ + PyPi + +

    @@ -365,6 +376,17 @@ + PyPi + + @@ -541,6 +563,11 @@

    Python Module Index

    + + + + + +
    Rotation functions#
    • s2fft.transforms.otf_recursions @@ -1059,6 +1129,8 @@

      S

    • module
    +
        s2fft.utils.quadrature_jax
        + s2fft.utils.quadrature_torch +
        @@ -551,6 +578,11 @@

    Python Module Index

        s2fft.utils.resampling_jax
        + s2fft.utils.resampling_torch +
        diff --git a/search.html b/search.html index 4d61c074..35d7de2e 100644 --- a/search.html +++ b/search.html @@ -6,7 +6,7 @@ - Search - S2FFT 1.0.1 documentation + Search - S2FFT 1.0.2 documentation @@ -41,7 +41,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -364,6 +375,17 @@ + PyPi + + diff --git a/searchindex.js b/searchindex.js index 16fe53ab..6f13d843 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api/base_transforms/index", "api/base_transforms/spin_spherical_transform", "api/base_transforms/wigner_transform", "api/index", "api/precompute_transforms/construct", "api/precompute_transforms/index", "api/precompute_transforms/spin_spherical", "api/precompute_transforms/wigner", "api/recursions/index", "api/recursions/price_mcewen", "api/recursions/risbo", "api/recursions/risbo_jax", "api/recursions/trapani", "api/recursions/turok", "api/recursions/turok_jax", "api/sampling/index", "api/sampling/spherical_samples", "api/sampling/wigner_samples", "api/transforms/index", "api/transforms/on_the_fly_recursions", "api/transforms/spin_spherical_transform", "api/transforms/wigner", "api/utility/healpix_ffts", "api/utility/index", "api/utility/logs", "api/utility/quadrature", "api/utility/quadrature_jax", "api/utility/resampling", "api/utility/resampling_jax", "api/utility/rotation", "api/utility/signal_generator", "api/utility/utils", "index", "tutorials/index", "tutorials/rotation/rotation", "tutorials/spherical_harmonic/spherical_harmonic_transform", "tutorials/wigner/wigner_transform", "user_guide/install"], "filenames": ["api/base_transforms/index.rst", "api/base_transforms/spin_spherical_transform.rst", "api/base_transforms/wigner_transform.rst", "api/index.rst", "api/precompute_transforms/construct.rst", "api/precompute_transforms/index.rst", "api/precompute_transforms/spin_spherical.rst", "api/precompute_transforms/wigner.rst", "api/recursions/index.rst", "api/recursions/price_mcewen.rst", "api/recursions/risbo.rst", "api/recursions/risbo_jax.rst", "api/recursions/trapani.rst", "api/recursions/turok.rst", "api/recursions/turok_jax.rst", "api/sampling/index.rst", "api/sampling/spherical_samples.rst", "api/sampling/wigner_samples.rst", "api/transforms/index.rst", "api/transforms/on_the_fly_recursions.rst", "api/transforms/spin_spherical_transform.rst", "api/transforms/wigner.rst", "api/utility/healpix_ffts.rst", "api/utility/index.rst", "api/utility/logs.rst", "api/utility/quadrature.rst", "api/utility/quadrature_jax.rst", "api/utility/resampling.rst", "api/utility/resampling_jax.rst", "api/utility/rotation.rst", "api/utility/signal_generator.rst", "api/utility/utils.rst", "index.rst", "tutorials/index.rst", "tutorials/rotation/rotation.nblink", "tutorials/spherical_harmonic/spherical_harmonic_transform.nblink", "tutorials/wigner/wigner_transform.nblink", "user_guide/install.rst"], "titles": ["Reference Transforms", "Spherical Harmonic Transform", "Wigner Transform", "API", "constructor", "Precompute Functions", "Spherical Harmonic Transform", "Wigner Transform", "Wigner-d recursions", "Price & McEwen", "Risbo", "Risbo JAX", "Trapani", "Turok & Bucher", "Turok & Bucher JAX", "Sampling Functions", "Spherical samples", "Wigner samples", "Transforms", "On-the-fly (OTF) recursions", "Spherical Harmonic Transform", "Wigner Transform", "healpix functions", "Utility Functions", "logs", "quadrature", "quadrature_jax", "resampling", "resampling_jax", "rotations", "signal generator", "utils", "Differentiable and accelerated spherical transforms", "Notebooks", "Rotate a signal", "Spherical harmonic transform", "Wigner transform", "Installation"], "terms": {"function": [0, 3, 9, 16, 18, 20, 21, 25, 26, 27, 28, 29, 32, 34, 35, 36], "name": [0, 5, 8, 15, 18, 23], "descript": [0, 5, 8, 15, 18, 23], "invers": [0, 1, 2, 4, 5, 6, 7, 9, 16, 18, 19, 20, 21, 22, 23, 34], "wrapper": [0, 5, 18, 20, 21, 22, 23], "around": [0, 5, 14, 18], "variou": [0, 23, 25, 26], "version": [0, 19, 23, 32, 37], "classic": 0, "forward": [0, 1, 2, 4, 5, 6, 7, 9, 16, 18, 19, 20, 21, 22, 23, 34], "algorithm": [0, 33], "s2fft": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37], "base_transform": [1, 2], "f": [1, 2, 6, 7, 17, 20, 21, 22, 27, 28, 33, 34, 35, 36, 37], "ndarrai": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "l": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36], "int": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "spin": [1, 4, 6, 8, 9, 19, 20, 25, 26, 27, 28, 30, 32, 33], "0": [1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 33, 36], "sampl": [1, 2, 4, 6, 7, 9, 19, 20, 21, 22, 23, 25, 26, 27, 28, 34, 35, 36], "str": [1, 2, 4, 6, 7, 9, 12, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28], "mw": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 34, 35], "nside": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 25, 26], "none": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 24, 25, 26, 29], "realiti": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 30, 34, 35, 36], "bool": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 30], "fals": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 30, 35, 36], "l_lower": [1, 2, 9, 19, 20, 21, 30], "comput": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34], "us": [1, 2, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 21, 22, 23, 25, 26, 27, 28, 32, 33, 34, 35, 36], "vectoris": [1, 8, 12, 22], "separ": [1, 20, 21, 32], "variabl": [1, 19, 20, 21], "method": [1, 5, 6, 7, 18, 20, 21, 22, 33], "np": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 30, 34, 35, 36], "fft": [1, 22], "paramet": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "signal": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 27, 28, 32, 33, 35, 36], "sphere": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 23, 27, 28, 29, 32, 33, 34, 35], "band": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "limit": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "option": [1, 2, 4, 6, 7, 9, 12, 13, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "default": [1, 2, 4, 6, 7, 9, 12, 13, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "scheme": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 32, 34, 35, 36], "support": [1, 2, 4, 6, 7, 9, 12, 16, 17, 19, 20, 21, 25, 26, 27, 28, 32, 37], "includ": [1, 2, 4, 5, 6, 7, 8, 9, 12, 16, 17, 19, 20, 21, 25, 26, 27, 28, 37], "mwss": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28], "dh": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26], "healpix": [1, 2, 4, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 25, 26, 32], "resolut": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 32], "onli": [1, 2, 4, 6, 7, 8, 9, 12, 13, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 32, 37], "requir": [1, 2, 4, 6, 7, 9, 12, 13, 14, 16, 17, 19, 20, 21, 25, 26, 32, 37], "whether": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22], "i": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37], "real": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 30, 32, 35], "If": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 24, 35, 36], "so": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 27, 32, 36], "conjug": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 30], "symmetri": [1, 2, 4, 6, 7, 8, 9, 12, 13, 16, 19, 20, 21, 22, 30], "exploit": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22], "reduc": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 23, 29, 32], "cost": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 32], "lower": [1, 2, 9, 19, 20, 21, 22, 23, 30], "bound": [1, 2, 9, 19, 20, 21, 30], "texttt": [1, 9, 19, 20, 21], "leq": [1, 9, 19, 20, 21], "ell": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21], "return": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "coeffici": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 23, 29, 30, 32, 33, 34, 36], "type": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "flm": [1, 6, 7, 16, 19, 20, 29, 33, 34, 35], "n": [2, 4, 7, 9, 17, 21, 30, 33, 36, 37], "e": [2, 7, 9, 16, 17, 21, 22, 24, 25, 26, 30, 32, 35, 36], "fourier": [2, 7, 21, 22, 30, 32, 36], "3": [2, 4, 7, 9, 16, 17, 21, 33, 35, 36, 37], "importantli": [2, 7, 17, 21], "convent": [2, 7, 16, 17, 21, 23], "adopt": [2, 7, 12, 17, 21, 34, 35, 36], "storag": [2, 7, 16, 17, 21, 37], "gamma": [2, 7, 17, 21, 29, 34], "beta": [2, 7, 8, 9, 10, 11, 13, 14, 17, 19, 21, 23, 29, 34], "alpha": [2, 7, 17, 21, 29, 33, 34], "euler": [2, 7, 17, 21, 23], "angl": [2, 7, 8, 9, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 29], "follow": [2, 7, 16, 17, 21, 27, 28, 32, 33, 37], "zyz": [2, 7, 17, 21, 23], "order": [2, 7, 13, 14, 15, 16, 17, 21], "simplifi": [2, 7, 17, 21], "index": [2, 7, 8, 9, 12, 13, 14, 16, 17, 19, 21, 22, 23, 25, 26], "intern": [2, 7, 17, 21, 24], "For": [2, 7, 12, 17, 19, 20, 21, 27, 28, 32, 33, 34], "given": [2, 7, 9, 12, 13, 14, 15, 16, 17, 21, 23, 25, 26, 29], "we": [2, 7, 8, 9, 13, 14, 16, 17, 21, 32, 33, 34, 35, 36, 37], "thu": [2, 7, 8, 10, 11, 12, 16, 17, 21], "recov": [2, 7, 17, 19, 20, 21], "theta": [2, 4, 7, 9, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 28], "phi": [2, 7, 15, 16, 17, 21, 22, 23, 25, 26, 27, 28], "associ": [2, 7, 17, 19, 21, 32, 35, 37], "shape": [2, 4, 6, 7, 13, 14, 16, 17, 21, 22, 27, 28, 29], "n_": [2, 7, 9, 16, 21, 22], "where": [2, 7, 14, 16, 21, 24, 32, 37], "xi": [2, 7, 21], "denot": [2, 7, 8, 9, 13, 14, 21], "number": [2, 7, 15, 16, 17, 19, 20, 21, 22, 27, 28, 30, 32, 33], "harmon": [2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 36], "bandlimit": [2, 9, 19, 20, 21, 32, 34], "direct": [2, 4, 7, 17], "rais": [2, 6, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28], "valueerror": [2, 6, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28], "current": [2, 19, 20, 21, 32], "flmn": [2, 7, 17, 21, 33, 36], "2n": [2, 7, 9, 21], "1": [2, 4, 7, 9, 10, 11, 12, 13, 14, 16, 17, 21, 22, 29, 30, 33, 36], "2l": [2, 4, 7, 9, 13, 14, 16, 21, 22, 29], "automat": 3, "gener": [3, 4, 15, 16, 22, 29, 34], "document": 3, "all": [3, 4, 8, 9, 12, 19, 20, 21, 22, 23, 25, 26, 32], "access": [3, 23, 33], "through": [3, 33, 34], "pip": [3, 37], "instal": 3, "packag": [3, 32, 33, 37], "below": [3, 32, 33], "an": [3, 12, 16, 23, 24, 25, 26, 27, 28, 29, 32, 35, 36, 37], "overview": 3, "directori": [3, 24, 37], "structur": [3, 32, 33], "softwar": [3, 32], "precompute_transform": [4, 6, 7], "construct": [4, 8, 13, 19, 36], "healpix_phase_shift": [4, 5], "phase": [4, 5, 15, 16, 22], "shift": [4, 5, 9, 15, 16, 22], "vector": [4, 5, 6, 8, 12, 15, 16, 22], "ring": [4, 5, 15, 16, 22, 32], "provid": [4, 9, 16, 22, 24, 32, 37], "spin_spherical_kernel": [4, 5], "precomput": [4, 6, 8, 9, 19, 20, 21, 29, 32, 33, 35, 36], "wigner": [4, 6, 9, 10, 11, 12, 13, 14, 15, 19, 23, 29, 30, 32, 33, 34], "d": [4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 19, 20, 21, 23, 25, 26, 29, 32, 34], "kernel": [4, 6, 7], "spheric": [4, 8, 10, 11, 12, 19, 23, 27, 28, 29, 30, 33, 34], "transform": [4, 8, 9, 19, 22, 25, 26, 33, 34], "thi": [4, 9, 12, 13, 14, 16, 19, 20, 21, 27, 28, 32, 34, 35, 36, 37], "can": [4, 9, 12, 13, 14, 19, 24, 25, 26, 27, 28, 32, 33, 34, 37], "drastic": 4, "faster": 4, "come": [4, 32, 37], "mathcal": [4, 8, 9, 13, 14, 19, 20, 21], "o": [4, 8, 9, 13, 14, 19, 20, 21], "memori": [4, 9, 19, 20, 21, 32, 33], "overhead": [4, 9, 19, 20, 21, 32], "make": 4, "infeas": [4, 32], "geq": 4, "512": [4, 33], "spin_spherical_kernel_jax": 4, "jnp": [4, 6, 7, 9, 12, 14, 19, 20, 21, 22, 26, 28, 29], "wigner_kernel": [4, 5], "nl": [4, 8, 21], "wigner_kernel_jax": 4, "numpi": [5, 6, 7, 8, 18, 20, 21, 22, 23, 34, 35, 36], "jax": [5, 6, 7, 8, 9, 12, 18, 19, 20, 21, 22, 23, 26, 28, 32, 34, 35, 36], "inverse_transform": [5, 6, 7], "inverse_transform_jax": [5, 6, 7], "forward_transform": [5, 6, 7], "forward_transform_jax": [5, 6, 7], "build": [5, 32, 37], "quadratur": [5, 26], "weight": [5, 23, 25, 26], "correspond": [5, 16, 17, 22, 25, 26, 27, 28, 32], "each": [5, 22, 25, 26, 32, 34], "latitudin": [5, 15, 16, 18, 32], "via": [6, 8, 13], "execut": [6, 7, 20, 21, 32, 37], "mode": [6, 7, 20, 21], "recognis": [6, 20, 21], "warn": [6, 13, 24], "set": [6, 16, 22, 23, 30], "field": [6, 19], "complex": [6, 32], "implement": [6, 8, 9, 11, 12, 13, 14, 19, 20, 21, 22, 26, 28, 32, 33], "pixel": [6, 7, 16, 17, 22, 25, 26, 32, 33, 34], "space": [6, 7, 16, 17, 22, 27, 28, 33, 34, 36], "arrai": [6, 7, 8, 9, 11, 12, 14, 16, 19, 20, 21, 22, 23, 25, 26, 28, 29, 35, 36], "tranclearsform": 6, "compute_all_slic": [8, 9], "necessari": [8, 14], "slice": [8, 9, 13, 14, 22], "plane": [8, 10, 11, 12, 13, 29, 30, 35], "compute_all_slices_jax": [8, 9], "generate_precomput": [8, 9], "list": [8, 9, 19, 20, 21], "2": [8, 9, 12, 16, 19, 20, 21, 23, 25, 26, 27, 28, 33, 34, 35, 36], "acceler": [8, 9, 19, 20, 21], "generate_precomputes_jax": [8, 9, 35], "generate_precomputes_wign": [8, 9], "generate_precomputes_wigner_jax": [8, 9, 36], "compute_ful": [8, 10, 11, 12, 13], "complet": [8, 9, 13, 14, 24, 29], "matrix": [8, 9, 13, 14], "polar": [8, 9, 13, 14, 19, 22, 23, 32], "compute_slic": [8, 13, 14], "particular": [8, 9, 13, 14, 32], "m": [8, 9, 12, 13, 14, 15, 16, 17, 19, 23, 25, 26, 33], "prime": [8, 9, 12, 13, 14, 25, 26], "mm": [8, 9, 12, 13, 14], "compute_quarter_slic": [8, 13], "singl": [8, 13, 19, 20, 21], "evalu": [8, 9, 13, 14, 19, 22], "compute_quart": [8, 12, 13], "left": [8, 13, 33], "quarter": [8, 12, 13], "triangl": [8, 13], "fill": [8, 12, 13], "reflect": [8, 13], "full": [8, 10, 11, 12, 13], "properti": [8, 13], "matric": [8, 13, 34], "reindex": [8, 14], "reorder": [8, 14], "maintain": 8, "fix": [8, 29], "length": [8, 9, 14, 16, 19, 20, 21], "compute_eighth": [8, 12], "argument": [8, 10, 11, 12, 35, 36], "pi": [8, 12, 16, 23, 25, 26, 27, 28, 34], "eighth": [8, 12, 13], "navaza": [8, 12], "compute_quarter_vector": [8, 12], "compute_quarter_jax": [8, 12], "fill_eighth2quart": [8, 12], "from": [8, 9, 12, 13, 14, 15, 16, 17, 23, 27, 28, 30, 32], "fill_quarter2half": [8, 12], "half": [8, 12], "fill_quarter2half_vector": [8, 12], "fill_quarter2half_jax": [8, 12], "fill_half2ful": [8, 12], "fill_half2full_vector": [8, 12], "fill_half2full_jax": [8, 12], "multipl": [8, 9, 12, 19, 20, 21], "compute_full_loop": [8, 12], "loop": [8, 12, 32], "base": [8, 12, 22, 25, 26, 32, 33], "compute_full_vector": [8, 12], "compute_full_jax": [8, 12], "The": [8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 27, 28, 32, 34, 37], "primari": [8, 33, 37], "though": [8, 19], "other": [8, 16, 25, 26, 33], "popular": [8, 32], "comparison": 8, "One": [8, 32, 37], "should": [8, 9, 12, 14, 24, 32, 35, 36, 37], "howev": [8, 9, 13, 14, 19, 20, 21, 32, 34, 37], "note": [8, 16, 30, 32, 33], "develop": [8, 32], "time": [8, 19, 32, 33, 35, 36], "wa": [8, 37], "minim": [8, 9, 19, 20, 21], "veri": [8, 19, 20, 21, 32, 37], "recurs": [9, 10, 11, 12, 13, 14, 20, 21, 29, 32, 33], "price_mcewen": [9, 19], "precomp": [9, 19, 20, 21, 35, 36], "el": [9, 10, 11, 12, 13, 14, 16, 17], "over": [9, 10, 11, 12, 13, 14, 19, 20, 21, 32], "label": [9, 13, 14], "specif": [9, 13, 14, 22, 32, 34, 35, 36], "analyt": [9, 13, 14, 25, 26], "correct": [9, 13, 14, 27, 28], "numer": [9, 13, 14, 20, 21], "becom": [9, 13, 14, 32], "unstabl": [9, 13, 14], "To": [9, 13, 14, 33, 35, 36, 37], "avoid": [9, 13, 14, 32, 37], "d_": [9, 13, 14], "neg": [9, 13, 14, 16], "which": [9, 10, 11, 13, 14, 19, 20, 21, 25, 26, 29, 32, 33, 35, 36, 37], "again": [9, 13, 14, 35, 36], "same": [9, 27, 28], "On": 9, "fly": [9, 20, 21], "renormalis": 9, "potenti": 9, "under": [9, 32], "flow": 9, "within": [9, 15, 16, 37], "ani": [9, 32, 37], "iter": 9, "ar": [9, 12, 13, 14, 16, 23, 25, 26, 30, 32, 35, 36, 37], "sim": [9, 13, 14, 19], "ell_": [9, 12, 13, 14, 16], "dl": [9, 10, 11, 12, 13, 14], "ha": [9, 13, 14, 19, 32], "scale": [9, 13, 14, 33], "typic": [9, 13, 14], "oper": [9, 13, 14], "radian": [9, 13, 14, 19], "dimens": [9, 13, 14, 16], "In": [9, 32, 37], "practic": [9, 32], "one": [9, 19, 20, 21, 32, 37], "could": [9, 32], "neglig": [9, 32], "well": [9, 32], "worth": 9, "todo": 9, "optimis": [9, 32], "wrap": 9, "extens": [9, 23, 27, 28], "case": [9, 33], "azimuth": [9, 21], "float": [10, 11, 13, 14, 16, 25, 26, 29], "must": [10, 11, 12, 19, 27, 28], "alreadi": [10, 11, 12, 17], "At": [10, 11, 19, 20, 21, 33], "present": [10, 11], "recus": [10, 11, 12], "initialis": [10, 11, 12, 24], "degre": [10, 11, 12, 13, 14, 16, 17], "risbo_jax": 11, "see": [12, 13, 16, 29, 32, 33], "init": 12, "relat": [12, 13, 32], "remaind": [12, 13], "mai": [12, 32, 37], "stabl": [12, 20, 21, 32], "abov": 12, "gtrsim": 12, "1024": [12, 32, 33], "directli": [12, 37], "further": [12, 32, 33], "detail": [12, 16, 32, 33], "better": 12, "rather": 12, "than": [12, 13, 16], "eight": 12, "write": 12, "garbag": 12, "outsid": 12, "rang": [12, 24], "pass": [12, 16, 35, 36], "alloc": 12, "init_jax": 12, "init_nonjax": 12, "greater": 13, "popul": [13, 14], "positive_m_onli": 13, "zero": [13, 17, 27, 28], "By": [13, 19], "lead": 13, "signific": 13, "improv": [13, 32], "less": 13, "true": [13, 34, 35, 36], "A": [13, 32, 33, 34], "turok_jax": 14, "centr": 14, "valu": [14, 16, 24, 25, 26], "origin": [14, 27], "rightarrow": 14, "dot": [14, 16], "result": [14, 27, 28], "repres": 14, "entri": [14, 19, 32], "ignor": 14, "These": 14, "extra": 14, "ensur": [14, 37], "static": [14, 35, 36], "f_shape": [15, 16, 17], "rotat": [15, 17, 30, 32, 33, 36], "group": [15, 17, 32, 33, 36], "flm_shape": [15, 16], "standard": [15, 16], "flmn_shape": [15, 17], "ftm_shape": [15, 16], "intermedi": [15, 16, 19], "befor": [15, 16, 27, 28], "after": [15, 16, 32, 37], "step": [15, 16, 19, 32], "fnab_shap": [15, 17], "ncoeff": [15, 16], "ntheta": [15, 16, 22], "total": [15, 17, 22], "ntheta_extens": [15, 16], "period": [15, 22, 27, 28], "extend": [15, 16, 22, 23, 27, 28], "t2theta": [15, 16], "convert": [15, 16, 17, 22, 23, 27, 28], "nphi_equiang": [15, 16], "longitudin": 15, "equiangular": [15, 16, 32], "nphi_equitorial_band": [15, 16], "equitori": [15, 16], "nphi_r": [15, 16], "phis_r": [15, 16], "p2phi_r": [15, 16, 22], "phis_equiang": [15, 16], "ring_phase_shift_hp": [15, 16], "elm2ind": [15, 16], "2d": [15, 16, 23, 30], "1d": [15, 16, 17, 32], "ind2elm": [15, 16], "elmn2ind": [15, 17], "3d": [15, 17, 23, 30], "hp_ang2pix": [15, 16], "hp_getidx": [15, 16], "lm2lm_hp": [15, 16], "healpi": [15, 16], "flm_2d_to_1d": [15, 16], "flm_1d_to_2d": [15, 16], "harmnon": [15, 16], "flm_hp_to_2d": [15, 16], "flm_2d_to_hp": [15, 16], "flmn_3d_to_1d": [15, 17], "flmn_1d_to_3d": [15, 17], "s2_sampl": 16, "defin": [16, 23, 25, 26, 27, 28], "tupl": [16, 17, 29], "instead": 16, "flm_1d": [16, 17], "flm_": 16, "g": [16, 24, 32, 35, 36], "text": [16, 25, 26], "data": [16, 19, 20, 21, 35], "format": 16, "begin": [16, 24], "bmatrix": 16, "end": 16, "flm_2d": 16, "implicitli": 16, "assum": 16, "store": [16, 32, 35, 36], "posit": 16, "discard": 16, "process": [16, 32], "NOT": 16, "invert": 16, "api": [16, 33], "doc": 16, "f_": 16, "explicitli": [16, 30], "differ": [16, 32], "lmax": 16, "flm_hp": 16, "here": [16, 34], "unpack": 16, "unknown": [16, 17], "ftm": [16, 19, 22], "4nside": 16, "map": [16, 19, 20, 21, 32, 33, 35], "math": 16, "max": 16, "ind": 16, "specifi": 16, "independ": 16, "sinc": 16, "t": [16, 22], "invalid": [16, 25, 26], "when": [16, 37], "p2phi_equiang": 16, "p": 16, "": [16, 19, 33, 35, 36], "indic": 16, "so3_sampl": 17, "flmn_1d": 17, "c": [17, 33], "flatten": 17, "prioriti": 17, "flmn_3d": 17, "flm_3d": 17, "flmn_shape_1d": 17, "non": 17, "inverse_numpi": [18, 20, 21], "inverse_jax": [18, 20, 21, 33, 34, 35, 36], "forward_numpi": [18, 20, 21], "forward_jax": [18, 20, 21, 33, 34, 35, 36], "inverse_latitudinal_step": [18, 19], "portion": [18, 32], "overal": 18, "inverse_latitudinal_step_jax": [18, 19], "forward_latitudinal_step": [18, 19], "forward_latitudinal_step_jax": [18, 19], "otf_recurs": 19, "latitundin": 19, "approach": [19, 32], "heavili": 19, "engineerd": 19, "price": [19, 20, 21, 32, 33], "mcewen": [19, 20, 21, 32, 33, 34, 35, 36], "found": 19, "most": [19, 20, 21, 37], "footprint": 19, "scalar": 19, "legendr": 19, "our": [19, 32, 33, 34], "arbitrari": [19, 27, 28], "sole": 19, "henc": [19, 27, 28, 32], "simultan": 19, "facilit": 19, "gpu": [19, 32, 33], "tpu": [19, 32], "ftm_in": 19, "beta_in": 19, "spmd": [19, 20, 21], "devic": [19, 20, 21], "avail": [19, 20, 21, 32], "program": [19, 20, 21], "determin": [19, 20, 21], "run": [19, 20, 21, 24, 33, 34, 35, 36, 37], "low": [19, 20, 21], "ineffici": [19, 20, 21], "commun": [19, 20, 21, 32], "between": [19, 20, 21], "notic": [19, 20, 21], "increas": [19, 20, 21], "asymptot": [19, 20, 21], "valid": [20, 21], "wiger": [20, 21], "theoret": [20, 21], "util": [22, 25, 26, 27, 28, 29, 30, 34, 36], "healpix_fft": [22, 23], "fast": 22, "spectral": [22, 23], "back": [22, 23, 27, 28, 33, 34, 35, 36], "project": [22, 23, 32, 37], "region": [22, 23], "manual": [22, 23], "enforc": [22, 23], "deploy": [22, 32], "latitud": 22, "healpix_fft_jax": [22, 23], "stack": 22, "healpix_fft_numpi": [22, 23], "healpix_ifft": [22, 23], "fold": [22, 23], "mitig": [22, 23], "alias": [22, 23], "healpix_ifft_jax": [22, 23], "healpix_ifft_numpi": [22, 23], "ndarrrai": 22, "indici": 22, "offset": 22, "p2phi_rings_jax": 22, "ring_phase_shifts_hp": 22, "ring_phase_shifts_hp_jax": 22, "spectral_fold": [22, 23], "fm": 22, "nphi": 22, "higher": [22, 23], "frequenc": [22, 23], "onto": [22, 23, 32], "high": [22, 32, 33], "latitut": 22, "spectral_folding_jax": [22, 23], "spectral_periodic_extens": [22, 23], "impos": 22, "spectral_periodic_extension_jax": [22, 23], "modifi": 22, "jit": [22, 32], "compil": [22, 32], "quad_weights_transform": [23, 25, 26], "integr": [23, 25, 26], "quad_weight": [23, 25, 26], "quad_weights_hp": [23, 25, 26], "quad_weights_dh": [23, 25, 26], "quad_weights_mw": [23, 25, 26], "quad_weights_mwss": [23, 25, 26], "quad_weight_dh_theta_onli": [23, 25, 26], "quad_weights_mw_theta_onli": [23, 25, 26], "quad_weights_mwss_theta_onli": [23, 25, 26], "mw_weight": [23, 25, 26], "share": 23, "almost": 23, "ident": [23, 25, 26], "trace": 23, "simpli": [23, 35, 36, 37], "sub": 23, "modul": 23, "quadrature_jax": 23, "periodic_extens": [23, 27, 28], "perform": [23, 27, 28, 34], "domain": [23, 27, 28], "periodic_extension_spatial_mwss": [23, 27, 28], "spatial": [23, 27, 28], "upsample_by_two_mwss": [23, 27, 28], "upsampl": [23, 27, 28], "factor": [23, 27, 28, 32], "two": [23, 27, 28, 32, 37], "upsample_by_two_mwss_ext": [23, 27, 28], "downsample_by_two_mwss": [23, 27], "downsampl": [23, 27], "unextend": [23, 27, 28], "mw_to_mwss_phi": [23, 27, 28], "compon": [23, 27, 28], "mw_to_mwss_theta": [23, 27, 28], "mw_to_mwss": [23, 27, 28], "generate_flm": [23, 30, 34], "random": [23, 30, 34, 36], "generate_flmn": [23, 30, 36], "resampling_jax": 23, "rotate_flm": [23, 29, 34], "generate_rotate_dl": [23, 29], "critical_log": 24, "messag": 24, "critic": 24, "core": [24, 37], "code": [24, 32], "failur": 24, "etc": 24, "debug_log": 24, "debug": 24, "background": 24, "assist": 24, "info_log": 24, "inform": 24, "evid": 24, "print": [24, 35, 36], "setup_log": 24, "custom_yaml_path": 24, "configur": 24, "call": 24, "desir": [24, 32], "level": [24, 33], "50": 24, "10": [24, 32, 35], "string": 24, "pathnam": 24, "yaml": 24, "empti": 24, "config": [24, 34, 35, 36], "warning_log": 24, "larg": 24, "dynam": 24, "w": [25, 26], "int_0": [25, 26], "sin": [25, 26], "exp": [25, 26], "vari": [25, 26], "nevertheless": [25, 26], "consist": [25, 26], "interfac": [25, 26], "across": [25, 26], "twice": [25, 26], "quad_weights_dh_theta_onli": 26, "f_ext": [27, 28], "appli": [27, 34, 35, 36], "either": [27, 37], "input": [27, 28, 35, 36], "even": 27, "integ": 27, "f_mw": [27, 28], "convers": [27, 28], "first": [27, 28, 32, 34, 35, 36, 37], "pad": [27, 28], "second": [27, 28, 32], "work": [27, 28, 32, 37], "both": [27, 28, 32, 37], "have": [27, 28, 37], "match": [27, 28, 37], "mww": [27, 28], "possibl": [27, 28], "do": [27, 28, 32, 35, 36], "dl_arrai": 29, "func": 29, "signal_gener": [30, 34, 36], "rng": [30, 34, 36], "produc": 30, "tangent": 30, "direction": 30, "2023": 32, "It": 32, "leverag": 32, "autodiff": 32, "also": 32, "modern": 32, "hardwar": 32, "more": [32, 33, 37], "adjoint": 32, "need": [32, 37], "select": 32, "depend": [32, 37], "resourc": 32, "angular": 32, "new": 32, "he": 32, "highli": 32, "parallelis": 32, "distribut": 32, "architectur": [32, 37], "diagram": 32, "illustr": 32, "With": 32, "hand": 32, "isolatitudin": 32, "longitud": 32, "extrem": 32, "equal": 32, "altern": [32, 37], "calcul": 32, "incur": 32, "slightli": 32, "slower": 32, "reason": 32, "slow": 32, "due": 32, "xla": 32, "unfold": 32, "cannot": 32, "effici": 32, "outlin": [32, 37], "paper": 32, "therefor": 32, "addit": 32, "onc": [32, 37], "awar": 32, "issu": 32, "subsequ": 32, "isolattitud": 32, "wiaux": [32, 34, 35], "2012": [32, 34, 35], "driscol": 32, "heali": 32, "1995": 32, "exhibit": 32, "theorem": [32, 36], "machin": [32, 35, 36, 37], "precis": [32, 35, 36], "nyquist": 32, "rate": 32, "compar": 32, "halv": 32, "gorski": 32, "et": [32, 36], "al": [32, 36], "2005": 32, "doe": 32, "achiev": 32, "some": [32, 35, 36], "error": [32, 33], "area": 32, "mani": [32, 33, 35, 36, 37], "advantag": 32, "thank": 32, "goe": 32, "wonder": 32, "peopl": 32, "emoji": 32, "kei": 32, "matt": 32, "jason": 32, "graham": 32, "sfmig": 32, "devaraj": 32, "gopinathan": 32, "francoi": 32, "lanuss": 32, "encourag": 32, "contribut": 32, "interest": 32, "simpl": [32, 33], "ad": [32, 37], "pattern": 32, "wai": [32, 34, 37], "kindli": 32, "request": 32, "articl": 32, "referenc": 32, "bibtex": 32, "refer": 32, "look": [32, 35], "like": 32, "author": 32, "matthew": 32, "titl": 32, "journal": 32, "physic": 32, "submit": 32, "year": 32, "eprint": 32, "arxiv": 32, "2311": 32, "14670": 32, "you": [32, 35, 36, 37], "might": 32, "consid": [32, 35], "cite": 32, "fssht": 32, "yve": 32, "novel": 32, "ieee": 32, "tran": 32, "sig": 32, "proc": 32, "2011": 32, "volum": 32, "59": 32, "12": 32, "page": 32, "5876": 32, "5887": 32, "1110": 32, "6298": 32, "doi": 32, "1109": 32, "tsp": 32, "2166394": 32, "so3": 32, "martin": 32, "b": 32, "u": [32, 36], "ttner": 32, "bori": 32, "leistedt": 32, "hiranya": 32, "v": 32, "peiri": 32, "let": [32, 35, 36], "2015": [32, 36], "22": 32, "2425": 32, "2429": 32, "1508": 32, "03101": 32, "lsp": 32, "2490676": 32, "mit": 32, "open": 32, "sourc": 32, "licenc": 32, "hope": 32, "wider": 32, "copyright": 32, "free": [32, 33], "made": 32, "file": 32, "seri": 33, "tutori": [33, 34, 35, 36, 37], "go": 33, "absolut": [33, 35, 36], "applic": 33, "post": 33, "releas": [33, 37], "add": 33, "exampl": 33, "involv": [33, 37], "being": [33, 37], "feel": 33, "contact": 33, "contributor": 33, "advic": 33, "easili": 33, "import": [33, 34, 35, 36, 37], "against": 33, "ssht": 33, "pacakg": 33, "brief": 33, "summari": 33, "shown": 33, "tabl": 33, "right": 33, "prep": 33, "agnost": 33, "linearli": 33, "wall": 33, "speed": 33, "up": [33, 37], "64": 33, "6": [33, 35, 36], "88": 33, "81e": 33, "15": 33, "52": 33, "4": [33, 35, 36], "\u03bc": 33, "60": 33, "5": [33, 34, 35, 36], "67e": 33, "mb": 33, "128": [33, 34, 36], "7": [33, 34, 35, 36], "26": 33, "80": 33, "32e": 33, "162": 33, "64e": 33, "33": 33, "256": 33, "17": 33, "32": 33, "66e": 33, "669": 33, "163": 33, "74e": 33, "268": 33, "58": 33, "11": 33, "43e": 33, "14": [33, 36], "184": 33, "37e": 33, "gb": 33, "194": 33, "9": [33, 34, 35, 37], "69e": 33, "195": 33, "47e": 33, "2048": 33, "44": 33, "49": 33, "17e": 33, "4096": 33, "8": [33, 34, 35], "48": 33, "133": 33, "06e": 33, "13": [33, 35], "8192": 33, "82": 33, "110": 33, "14e": 33, "demonstr": [34, 35, 36], "how": [34, 35, 36], "introduc": 34, "artifact": 34, "best": 34, "purpos": [34, 36], "ll": [34, 35, 36], "just": 34, "updat": [34, 35, 36], "jax_enable_x64": [34, 35, 36], "plotting_funct": [34, 35], "default_rng": [34, 36], "12346161": 34, "now": [34, 35], "flm_rotat": 34, "final": 34, "get": [34, 35, 36, 37], "f_rotat": 34, "load": 35, "galact": 35, "captur": 35, "esa": 35, "gaia": 35, "satellit": 35, "1000": 35, "gaia_edr3_flux": 35, "npy": 35, "take": 35, "pyvista": 35, "plot_spher": 35, "isnotebook": 35, "observ": 35, "plan": [35, 36], "dure": [35, 36], "train": [35, 36], "model": [35, 36], "recommend": [35, 36, 37], "small": [35, 36], "everi": [35, 36], "flm_pre": 35, "cmpute": 35, "f_recov": 35, "f_recov_pr": 35, "check": [35, 36], "close": [35, 36], "mean": [35, 36], "nanmean": [35, 36], "ab": [35, 36], "2041881386973936e": 35, "test": [36, 37], "f_pre": 36, "flmn_recov": 36, "flmn_recov_pr": 36, "roundtrip": 36, "126898555332371e": 36, "There": 37, "recent": 37, "benefit": 37, "abl": 37, "local": 37, "unit": 37, "onlin": 37, "python": 37, "manag": 37, "simplest": 37, "pick": 37, "notebook": 37, "collab": 37, "exist": 37, "conda": 37, "environ": 37, "creat": 37, "fresh": 37, "conflict": 37, "env_nam": 37, "activ": 37, "clone": 37, "repositori": 37, "git": 37, "http": 37, "com": 37, "astro": 37, "informat": 37, "cd": 37, "root": 37, "success": 37, "pytest": 37, "futur": 37, "yet": 37, "jaxlib": 37, "txt": 37, "thing": 37, "bit": 37, "strongli": 37, "guid": 37, "googl": 37, "summaris": 37, "driver": 37, "cuda": 37, "cudnn": 37, "pre": 37, "built": 37, "compat": 37, "wheel": 37, "shoulld": 37, "upgrad": 37, "linux": 37, "googleapi": 37, "jax_cuda_releas": 37, "html": 37, "cuda11_cudnn86": 37, "those": 37}, "objects": {"s2fft.base_transforms": [[1, 0, 0, "-", "spherical"], [2, 0, 0, "-", "wigner"]], "s2fft.base_transforms.spherical": [[1, 1, 1, "", "forward"], [1, 1, 1, "", "inverse"]], "s2fft.base_transforms.wigner": [[2, 1, 1, "", "forward"], [2, 1, 1, "", "inverse"]], "s2fft": [[24, 0, 0, "-", "logs"], [31, 0, 0, "-", "utils"]], "s2fft.logs": [[24, 1, 1, "", "critical_log"], [24, 1, 1, "", "debug_log"], [24, 1, 1, "", "info_log"], [24, 1, 1, "", "setup_logging"], [24, 1, 1, "", "warning_log"]], "s2fft.precompute_transforms": [[4, 0, 0, "-", "construct"], [6, 0, 0, "-", "spherical"], [7, 0, 0, "-", "wigner"]], "s2fft.precompute_transforms.construct": [[4, 1, 1, "", "healpix_phase_shifts"], [4, 1, 1, "", "spin_spherical_kernel"], [4, 1, 1, "", "spin_spherical_kernel_jax"], [4, 1, 1, "", "wigner_kernel"], [4, 1, 1, "", "wigner_kernel_jax"]], "s2fft.precompute_transforms.spherical": [[6, 1, 1, "", "forward"], [6, 1, 1, "", "forward_transform"], [6, 1, 1, "", "forward_transform_jax"], [6, 1, 1, "", "inverse"], [6, 1, 1, "", "inverse_transform"], [6, 1, 1, "", "inverse_transform_jax"]], "s2fft.precompute_transforms.wigner": [[7, 1, 1, "", "forward"], [7, 1, 1, "", "forward_transform"], [7, 1, 1, "", "forward_transform_jax"], [7, 1, 1, "", "inverse"], [7, 1, 1, "", "inverse_transform"], [7, 1, 1, "", "inverse_transform_jax"]], "s2fft.recursions": [[9, 0, 0, "-", "price_mcewen"], [10, 0, 0, "-", "risbo"], [11, 0, 0, "-", "risbo_jax"], [12, 0, 0, "-", "trapani"], [13, 0, 0, "-", "turok"], [14, 0, 0, "-", "turok_jax"]], "s2fft.recursions.price_mcewen": [[9, 1, 1, "", "compute_all_slices"], [9, 1, 1, "", "compute_all_slices_jax"], [9, 1, 1, "", "generate_precomputes"], [9, 1, 1, "", "generate_precomputes_jax"], [9, 1, 1, "", "generate_precomputes_wigner"], [9, 1, 1, "", "generate_precomputes_wigner_jax"]], "s2fft.recursions.risbo": [[10, 1, 1, "", "compute_full"]], "s2fft.recursions.risbo_jax": [[11, 1, 1, "", "compute_full"]], "s2fft.recursions.trapani": [[12, 1, 1, "", "compute_eighth"], [12, 1, 1, "", "compute_full"], [12, 1, 1, "", "compute_full_jax"], [12, 1, 1, "", "compute_full_loop"], [12, 1, 1, "", "compute_full_vectorized"], [12, 1, 1, "", "compute_quarter"], [12, 1, 1, "", "compute_quarter_jax"], [12, 1, 1, "", "compute_quarter_vectorized"], [12, 1, 1, "", "fill_eighth2quarter"], [12, 1, 1, "", "fill_half2full"], [12, 1, 1, "", "fill_half2full_jax"], [12, 1, 1, "", "fill_half2full_vectorized"], [12, 1, 1, "", "fill_quarter2half"], [12, 1, 1, "", "fill_quarter2half_jax"], [12, 1, 1, "", "fill_quarter2half_vectorized"], [12, 1, 1, "", "init"], [12, 1, 1, "", "init_jax"], [12, 1, 1, "", "init_nonjax"]], "s2fft.recursions.turok": [[13, 1, 1, "", "compute_full"], [13, 1, 1, "", "compute_quarter"], [13, 1, 1, "", "compute_quarter_slice"], [13, 1, 1, "", "compute_slice"], [13, 1, 1, "", "fill"]], "s2fft.recursions.turok_jax": [[14, 1, 1, "", "compute_slice"], [14, 1, 1, "", "reindex"]], "s2fft.sampling": [[16, 0, 0, "-", "s2_samples"], [17, 0, 0, "-", "so3_samples"]], "s2fft.sampling.s2_samples": [[16, 1, 1, "", "elm2ind"], [16, 1, 1, "", "f_shape"], [16, 1, 1, "", "flm_1d_to_2d"], [16, 1, 1, "", "flm_2d_to_1d"], [16, 1, 1, "", "flm_2d_to_hp"], [16, 1, 1, "", "flm_hp_to_2d"], [16, 1, 1, "", "flm_shape"], [16, 1, 1, "", "ftm_shape"], [16, 1, 1, "", "hp_ang2pix"], [16, 1, 1, "", "hp_getidx"], [16, 1, 1, "", "ind2elm"], [16, 1, 1, "", "lm2lm_hp"], [16, 1, 1, "", "ncoeff"], [16, 1, 1, "", "nphi_equiang"], [16, 1, 1, "", "nphi_equitorial_band"], [16, 1, 1, "", "nphi_ring"], [16, 1, 1, "", "ntheta"], [16, 1, 1, "", "ntheta_extension"], [16, 1, 1, "", "p2phi_equiang"], [16, 1, 1, "", "p2phi_ring"], [16, 1, 1, "", "phis_equiang"], [16, 1, 1, "", "phis_ring"], [16, 1, 1, "", "ring_phase_shift_hp"], [16, 1, 1, "", "t2theta"], [16, 1, 1, "", "thetas"]], "s2fft.sampling.so3_samples": [[17, 1, 1, "", "elmn2ind"], [17, 1, 1, "", "f_shape"], [17, 1, 1, "", "flmn_1d_to_3d"], [17, 1, 1, "", "flmn_3d_to_1d"], [17, 1, 1, "", "flmn_shape"], [17, 1, 1, "", "flmn_shape_1d"], [17, 1, 1, "", "fnab_shape"]], "s2fft.transforms": [[19, 0, 0, "-", "otf_recursions"], [20, 0, 0, "-", "spherical"], [21, 0, 0, "-", "wigner"]], "s2fft.transforms.otf_recursions": [[19, 1, 1, "", "forward_latitudinal_step"], [19, 1, 1, "", "forward_latitudinal_step_jax"], [19, 1, 1, "", "inverse_latitudinal_step"], [19, 1, 1, "", "inverse_latitudinal_step_jax"]], "s2fft.transforms.spherical": [[20, 1, 1, "", "forward"], [20, 1, 1, "", "forward_jax"], [20, 1, 1, "", "forward_numpy"], [20, 1, 1, "", "inverse"], [20, 1, 1, "", "inverse_jax"], [20, 1, 1, "", "inverse_numpy"]], "s2fft.transforms.wigner": [[21, 1, 1, "", "forward"], [21, 1, 1, "", "forward_jax"], [21, 1, 1, "", "forward_numpy"], [21, 1, 1, "", "inverse"], [21, 1, 1, "", "inverse_jax"], [21, 1, 1, "", "inverse_numpy"]], "s2fft.utils": [[22, 0, 0, "-", "healpix_ffts"], [25, 0, 0, "-", "quadrature"], [26, 0, 0, "-", "quadrature_jax"], [27, 0, 0, "-", "resampling"], [28, 0, 0, "-", "resampling_jax"], [29, 0, 0, "-", "rotation"], [30, 0, 0, "-", "signal_generator"]], "s2fft.utils.healpix_ffts": [[22, 1, 1, "", "healpix_fft"], [22, 1, 1, "", "healpix_fft_jax"], [22, 1, 1, "", "healpix_fft_numpy"], [22, 1, 1, "", "healpix_ifft"], [22, 1, 1, "", "healpix_ifft_jax"], [22, 1, 1, "", "healpix_ifft_numpy"], [22, 1, 1, "", "p2phi_rings"], [22, 1, 1, "", "p2phi_rings_jax"], [22, 1, 1, "", "ring_phase_shifts_hp"], [22, 1, 1, "", "ring_phase_shifts_hp_jax"], [22, 1, 1, "", "spectral_folding"], [22, 1, 1, "", "spectral_folding_jax"], [22, 1, 1, "", "spectral_periodic_extension"], [22, 1, 1, "", "spectral_periodic_extension_jax"]], "s2fft.utils.quadrature": [[25, 1, 1, "", "mw_weights"], [25, 1, 1, "", "quad_weight_dh_theta_only"], [25, 1, 1, "", "quad_weights"], [25, 1, 1, "", "quad_weights_dh"], [25, 1, 1, "", "quad_weights_hp"], [25, 1, 1, "", "quad_weights_mw"], [25, 1, 1, "", "quad_weights_mw_theta_only"], [25, 1, 1, "", "quad_weights_mwss"], [25, 1, 1, "", "quad_weights_mwss_theta_only"], [25, 1, 1, "", "quad_weights_transform"]], "s2fft.utils.quadrature_jax": [[26, 1, 1, "", "mw_weights"], [26, 1, 1, "", "quad_weight_dh_theta_only"], [26, 1, 1, "", "quad_weights"], [26, 1, 1, "", "quad_weights_dh"], [26, 1, 1, "", "quad_weights_hp"], [26, 1, 1, "", "quad_weights_mw"], [26, 1, 1, "", "quad_weights_mw_theta_only"], [26, 1, 1, "", "quad_weights_mwss"], [26, 1, 1, "", "quad_weights_mwss_theta_only"], [26, 1, 1, "", "quad_weights_transform"]], "s2fft.utils.resampling": [[27, 1, 1, "", "downsample_by_two_mwss"], [27, 1, 1, "", "mw_to_mwss"], [27, 1, 1, "", "mw_to_mwss_phi"], [27, 1, 1, "", "mw_to_mwss_theta"], [27, 1, 1, "", "periodic_extension"], [27, 1, 1, "", "periodic_extension_spatial_mwss"], [27, 1, 1, "", "unextend"], [27, 1, 1, "", "upsample_by_two_mwss"], [27, 1, 1, "", "upsample_by_two_mwss_ext"]], "s2fft.utils.resampling_jax": [[28, 1, 1, "", "mw_to_mwss"], [28, 1, 1, "", "mw_to_mwss_phi"], [28, 1, 1, "", "mw_to_mwss_theta"], [28, 1, 1, "", "periodic_extension"], [28, 1, 1, "", "periodic_extension_spatial_mwss"], [28, 1, 1, "", "unextend"], [28, 1, 1, "", "upsample_by_two_mwss"], [28, 1, 1, "", "upsample_by_two_mwss_ext"]], "s2fft.utils.rotation": [[29, 1, 1, "", "generate_rotate_dls"], [29, 1, 1, "", "rotate_flms"]], "s2fft.utils.signal_generator": [[30, 1, 1, "", "generate_flm"], [30, 1, 1, "", "generate_flmn"]]}, "objtypes": {"0": "py:module", "1": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "titleterms": {"refer": 0, "transform": [0, 1, 2, 5, 6, 7, 18, 20, 21, 23, 32, 35, 36], "spheric": [0, 1, 5, 6, 15, 16, 18, 20, 32, 35], "harmon": [0, 1, 5, 6, 18, 20, 35], "wigner": [0, 2, 5, 7, 8, 17, 18, 21, 36], "api": 3, "constructor": 4, "precomput": 5, "function": [5, 8, 15, 22, 23], "construct": 5, "kernel": 5, "d": 8, "recurs": [8, 18, 19], "price": [8, 9, 18], "mcewen": [8, 9, 18], "turok": [8, 13, 14], "bucher": [8, 13, 14], "trapani": [8, 12], "risbo": [8, 10, 11], "jax": [11, 14, 37], "sampl": [15, 16, 17, 32], "arrai": 15, "shape": 15, "pixel": 15, "index": 15, "dimension": 15, "convers": 15, "On": [18, 19], "fly": [18, 19], "otf": 19, "healpix": [22, 23], "util": [23, 31], "fast": 23, "fourier": 23, "plan": 23, "quadratur": [23, 25], "period": 23, "resampl": [23, 27], "signal": [23, 30, 34], "gener": [23, 30], "rotat": [23, 29, 34], "log": 24, "quadrature_jax": 26, "resampling_jax": 28, "differenti": 32, "acceler": 32, "algorithm": 32, "contributor": 32, "attribut": 32, "licens": 32, "notebook": 33, "usag": 33, "benchmark": 33, "execut": 34, "step": 34, "comput": [35, 36], "forward": [35, 36], "invers": [35, 36], "error": [35, 36], "instal": 37, "quick": 37, "pypi": 37, "from": 37, "sourc": 37, "github": 37, "nvidia": 37, "gpu": 37}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx": 60}, "alltitles": {"Reference Transforms": [[0, "reference-transforms"]], "Spherical harmonic transforms.": [[0, "id1"], [5, "id1"], [18, "id1"]], "Wigner transforms.": [[0, "id2"], [5, "id2"], [18, "id2"]], "Spherical Harmonic Transform": [[1, "spherical-harmonic-transform"], [6, "spherical-harmonic-transform"], [20, "spherical-harmonic-transform"]], "Wigner Transform": [[2, "module-s2fft.base_transforms.wigner"], [7, "module-s2fft.precompute_transforms.wigner"], [21, "module-s2fft.transforms.wigner"]], "API": [[3, "api"]], "constructor": [[4, "module-s2fft.precompute_transforms.construct"]], "Precompute Functions": [[5, "precompute-functions"]], "Constructing Kernels for precompute transforms.": [[5, "id3"]], "Wigner-d recursions": [[8, "wigner-d-recursions"]], "Price-McEwen recursion functions": [[8, "id1"]], "Turok-Bucher recursion functions": [[8, "id2"]], "Trapani recursion functions": [[8, "id3"]], "Risbo recursion functions": [[8, "id4"]], "Price & McEwen": [[9, "module-s2fft.recursions.price_mcewen"]], "Risbo": [[10, "module-s2fft.recursions.risbo"]], "Risbo JAX": [[11, "module-s2fft.recursions.risbo_jax"]], "Trapani": [[12, "module-s2fft.recursions.trapani"]], "Turok & Bucher": [[13, "module-s2fft.recursions.turok"]], "Turok & Bucher JAX": [[14, "module-s2fft.recursions.turok_jax"]], "Sampling Functions": [[15, "sampling-functions"]], "Array shaping functions": [[15, "id1"]], "Spherical sampling functions": [[15, "id2"]], "Pixel indexing functions": [[15, "id3"]], "Sampling & dimensionality conversions": [[15, "id4"]], "Spherical samples": [[16, "module-s2fft.sampling.s2_samples"]], "Wigner samples": [[17, "module-s2fft.sampling.so3_samples"]], "Transforms": [[18, "transforms"]], "On-the-fly Price-McEwen recursions.": [[18, "id3"]], "On-the-fly (OTF) recursions": [[19, "on-the-fly-otf-recursions"]], "healpix functions": [[22, "module-s2fft.utils.healpix_ffts"]], "Utility Functions": [[23, "utility-functions"]], "HEALPix fast Fourier transform planning functions": [[23, "id1"]], "Quadrature functions.": [[23, "id2"]], "Periodic resampling functions": [[23, "id3"]], "Signal generating functions": [[23, "id4"]], "Rotation functions": [[23, "id5"]], "logs": [[24, "module-s2fft.logs"]], "quadrature": [[25, "module-s2fft.utils.quadrature"]], "quadrature_jax": [[26, "module-s2fft.utils.quadrature_jax"]], "resampling": [[27, "module-s2fft.utils.resampling"]], "resampling_jax": [[28, "module-s2fft.utils.resampling_jax"]], "rotations": [[29, "module-s2fft.utils.rotation"]], "signal generator": [[30, "module-s2fft.utils.signal_generator"]], "utils": [[31, "module-s2fft.utils"]], "Differentiable and accelerated spherical transforms": [[32, "differentiable-and-accelerated-spherical-transforms"]], "Algorithms \u26a1": [[32, "algorithms-zap"]], "Sampling \ud83c\udf0d": [[32, "sampling-earth-africa"]], "Contributors \u2728": [[32, "contributors"]], "Attribution \ud83d\udcda": [[32, "attribution-books"]], "License \ud83d\udcdd": [[32, "license-memo"]], "Notebooks": [[33, "notebooks"]], "Usage \ud83d\ude80": [[33, "usage-rocket"]], "Benchmarking \u23f3": [[33, "benchmarking-hourglass-flowing-sand"]], "Rotate a signal": [[34, "Rotate-a-signal"]], "Execute the rotation steps": [[34, "Execute-the-rotation-steps"]], "Spherical harmonic transform": [[35, "Spherical-harmonic-transform"]], "Computing the forward spherical harmonic transform": [[35, "Computing-the-forward-spherical-harmonic-transform"]], "Computing the inverse spherical harmonic transform": [[35, "Computing-the-inverse-spherical-harmonic-transform"]], "Computing the error": [[35, "Computing-the-error"], [36, "Computing-the-error"]], "Wigner transform": [[36, "Wigner-transform"]], "Computing the inverse Wigner transform": [[36, "Computing-the-inverse-Wigner-transform"]], "Computing the forward Wigner transform": [[36, "Computing-the-forward-Wigner-transform"]], "Installation": [[37, "installation"]], "Quick install (PyPi)": [[37, "quick-install-pypi"]], "Install from source (GitHub)": [[37, "install-from-source-github"]], "Installing JAX for NVIDIA GPUs": [[37, "installing-jax-for-nvidia-gpus"]]}, "indexentries": {"forward() (in module s2fft.base_transforms.spherical)": [[1, "s2fft.base_transforms.spherical.forward"]], "inverse() (in module s2fft.base_transforms.spherical)": [[1, "s2fft.base_transforms.spherical.inverse"]], "module": [[1, "module-s2fft.base_transforms.spherical"], [2, "module-s2fft.base_transforms.wigner"], [4, "module-s2fft.precompute_transforms.construct"], [6, "module-s2fft.precompute_transforms.spherical"], [7, "module-s2fft.precompute_transforms.wigner"], [9, "module-s2fft.recursions.price_mcewen"], [10, "module-s2fft.recursions.risbo"], [11, "module-s2fft.recursions.risbo_jax"], [12, "module-s2fft.recursions.trapani"], [13, "module-s2fft.recursions.turok"], [14, "module-s2fft.recursions.turok_jax"], [16, "module-s2fft.sampling.s2_samples"], [17, "module-s2fft.sampling.so3_samples"], [19, "module-s2fft.transforms.otf_recursions"], [20, "module-s2fft.transforms.spherical"], [21, "module-s2fft.transforms.wigner"], [22, "module-s2fft.utils.healpix_ffts"], [24, "module-s2fft.logs"], [25, "module-s2fft.utils.quadrature"], [26, "module-s2fft.utils.quadrature_jax"], [27, "module-s2fft.utils.resampling"], [28, "module-s2fft.utils.resampling_jax"], [29, "module-s2fft.utils.rotation"], [30, "module-s2fft.utils.signal_generator"], [31, "module-s2fft.utils"]], "s2fft.base_transforms.spherical": [[1, "module-s2fft.base_transforms.spherical"]], "forward() (in module s2fft.base_transforms.wigner)": [[2, "s2fft.base_transforms.wigner.forward"]], "inverse() (in module s2fft.base_transforms.wigner)": [[2, "s2fft.base_transforms.wigner.inverse"]], "s2fft.base_transforms.wigner": [[2, "module-s2fft.base_transforms.wigner"]], "healpix_phase_shifts() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.healpix_phase_shifts"]], "s2fft.precompute_transforms.construct": [[4, "module-s2fft.precompute_transforms.construct"]], "spin_spherical_kernel() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.spin_spherical_kernel"]], "spin_spherical_kernel_jax() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.spin_spherical_kernel_jax"]], "wigner_kernel() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.wigner_kernel"]], "wigner_kernel_jax() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.wigner_kernel_jax"]], "forward() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward"]], "forward_transform() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward_transform"]], "forward_transform_jax() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward_transform_jax"]], "inverse() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse"]], "inverse_transform() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse_transform"]], "inverse_transform_jax() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse_transform_jax"]], "s2fft.precompute_transforms.spherical": [[6, "module-s2fft.precompute_transforms.spherical"]], "forward() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward"]], "forward_transform() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward_transform"]], "forward_transform_jax() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward_transform_jax"]], "inverse() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse"]], "inverse_transform() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse_transform"]], "inverse_transform_jax() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse_transform_jax"]], "s2fft.precompute_transforms.wigner": [[7, "module-s2fft.precompute_transforms.wigner"]], "compute_all_slices() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.compute_all_slices"]], "compute_all_slices_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.compute_all_slices_jax"]], "generate_precomputes() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes"]], "generate_precomputes_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_jax"]], "generate_precomputes_wigner() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_wigner"]], "generate_precomputes_wigner_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_wigner_jax"]], "s2fft.recursions.price_mcewen": [[9, "module-s2fft.recursions.price_mcewen"]], "compute_full() (in module s2fft.recursions.risbo)": [[10, "s2fft.recursions.risbo.compute_full"]], "s2fft.recursions.risbo": [[10, "module-s2fft.recursions.risbo"]], "compute_full() (in module s2fft.recursions.risbo_jax)": [[11, "s2fft.recursions.risbo_jax.compute_full"]], "s2fft.recursions.risbo_jax": [[11, "module-s2fft.recursions.risbo_jax"]], "compute_eighth() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_eighth"]], "compute_full() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full"]], "compute_full_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_jax"]], "compute_full_loop() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_loop"]], "compute_full_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_vectorized"]], "compute_quarter() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter"]], "compute_quarter_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter_jax"]], "compute_quarter_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter_vectorized"]], "fill_eighth2quarter() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_eighth2quarter"]], "fill_half2full() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full"]], "fill_half2full_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full_jax"]], "fill_half2full_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full_vectorized"]], "fill_quarter2half() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half"]], "fill_quarter2half_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half_jax"]], "fill_quarter2half_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half_vectorized"]], "init() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init"]], "init_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init_jax"]], "init_nonjax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init_nonjax"]], "s2fft.recursions.trapani": [[12, "module-s2fft.recursions.trapani"]], "compute_full() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_full"]], "compute_quarter() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_quarter"]], "compute_quarter_slice() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_quarter_slice"]], "compute_slice() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_slice"]], "fill() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.fill"]], "s2fft.recursions.turok": [[13, "module-s2fft.recursions.turok"]], "compute_slice() (in module s2fft.recursions.turok_jax)": [[14, "s2fft.recursions.turok_jax.compute_slice"]], "reindex() (in module s2fft.recursions.turok_jax)": [[14, "s2fft.recursions.turok_jax.reindex"]], "s2fft.recursions.turok_jax": [[14, "module-s2fft.recursions.turok_jax"]], "elm2ind() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.elm2ind"]], "f_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.f_shape"]], "flm_1d_to_2d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_1d_to_2d"]], "flm_2d_to_1d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_2d_to_1d"]], "flm_2d_to_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_2d_to_hp"]], "flm_hp_to_2d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_hp_to_2d"]], "flm_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_shape"]], "ftm_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ftm_shape"]], "hp_ang2pix() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.hp_ang2pix"]], "hp_getidx() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.hp_getidx"]], "ind2elm() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ind2elm"]], "lm2lm_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.lm2lm_hp"]], "ncoeff() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ncoeff"]], "nphi_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_equiang"]], "nphi_equitorial_band() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_equitorial_band"]], "nphi_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_ring"]], "ntheta() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ntheta"]], "ntheta_extension() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ntheta_extension"]], "p2phi_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.p2phi_equiang"]], "p2phi_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.p2phi_ring"]], "phis_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.phis_equiang"]], "phis_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.phis_ring"]], "ring_phase_shift_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ring_phase_shift_hp"]], "s2fft.sampling.s2_samples": [[16, "module-s2fft.sampling.s2_samples"]], "t2theta() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.t2theta"]], "thetas() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.thetas"]], "elmn2ind() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.elmn2ind"]], "f_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.f_shape"]], "flmn_1d_to_3d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_1d_to_3d"]], "flmn_3d_to_1d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_3d_to_1d"]], "flmn_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_shape"]], "flmn_shape_1d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_shape_1d"]], "fnab_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.fnab_shape"]], "s2fft.sampling.so3_samples": [[17, "module-s2fft.sampling.so3_samples"]], "forward_latitudinal_step() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.forward_latitudinal_step"]], "forward_latitudinal_step_jax() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.forward_latitudinal_step_jax"]], "inverse_latitudinal_step() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.inverse_latitudinal_step"]], "inverse_latitudinal_step_jax() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.inverse_latitudinal_step_jax"]], "s2fft.transforms.otf_recursions": [[19, "module-s2fft.transforms.otf_recursions"]], "forward() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward"]], "forward_jax() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward_jax"]], "forward_numpy() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward_numpy"]], "inverse() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse"]], "inverse_jax() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse_jax"]], "inverse_numpy() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse_numpy"]], "s2fft.transforms.spherical": [[20, "module-s2fft.transforms.spherical"]], "forward() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward"]], "forward_jax() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward_jax"]], "forward_numpy() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward_numpy"]], "inverse() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse"]], "inverse_jax() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse_jax"]], "inverse_numpy() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse_numpy"]], "s2fft.transforms.wigner": [[21, "module-s2fft.transforms.wigner"]], "healpix_fft() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft"]], "healpix_fft_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft_jax"]], "healpix_fft_numpy() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft_numpy"]], "healpix_ifft() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft"]], "healpix_ifft_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft_jax"]], "healpix_ifft_numpy() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft_numpy"]], "p2phi_rings() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.p2phi_rings"]], "p2phi_rings_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.p2phi_rings_jax"]], "ring_phase_shifts_hp() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.ring_phase_shifts_hp"]], "ring_phase_shifts_hp_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.ring_phase_shifts_hp_jax"]], "s2fft.utils.healpix_ffts": [[22, "module-s2fft.utils.healpix_ffts"]], "spectral_folding() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_folding"]], "spectral_folding_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_folding_jax"]], "spectral_periodic_extension() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_periodic_extension"]], "spectral_periodic_extension_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_periodic_extension_jax"]], "critical_log() (in module s2fft.logs)": [[24, "s2fft.logs.critical_log"]], "debug_log() (in module s2fft.logs)": [[24, "s2fft.logs.debug_log"]], "info_log() (in module s2fft.logs)": [[24, "s2fft.logs.info_log"]], "s2fft.logs": [[24, "module-s2fft.logs"]], "setup_logging() (in module s2fft.logs)": [[24, "s2fft.logs.setup_logging"]], "warning_log() (in module s2fft.logs)": [[24, "s2fft.logs.warning_log"]], "mw_weights() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.mw_weights"]], "quad_weight_dh_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weight_dh_theta_only"]], "quad_weights() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights"]], "quad_weights_dh() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_dh"]], "quad_weights_hp() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_hp"]], "quad_weights_mw() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mw"]], "quad_weights_mw_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mw_theta_only"]], "quad_weights_mwss() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mwss"]], "quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mwss_theta_only"]], "quad_weights_transform() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_transform"]], "s2fft.utils.quadrature": [[25, "module-s2fft.utils.quadrature"]], "mw_weights() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.mw_weights"]], "quad_weight_dh_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weight_dh_theta_only"]], "quad_weights() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights"]], "quad_weights_dh() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_dh"]], "quad_weights_hp() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_hp"]], "quad_weights_mw() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mw"]], "quad_weights_mw_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mw_theta_only"]], "quad_weights_mwss() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mwss"]], "quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mwss_theta_only"]], "quad_weights_transform() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_transform"]], "s2fft.utils.quadrature_jax": [[26, "module-s2fft.utils.quadrature_jax"]], "downsample_by_two_mwss() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.downsample_by_two_mwss"]], "mw_to_mwss() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.mw_to_mwss"]], "mw_to_mwss_phi() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.mw_to_mwss_phi"]], "mw_to_mwss_theta() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.mw_to_mwss_theta"]], "periodic_extension() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.periodic_extension"]], "periodic_extension_spatial_mwss() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.periodic_extension_spatial_mwss"]], "s2fft.utils.resampling": [[27, "module-s2fft.utils.resampling"]], "unextend() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.unextend"]], "upsample_by_two_mwss() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.upsample_by_two_mwss"]], "upsample_by_two_mwss_ext() (in module s2fft.utils.resampling)": [[27, "s2fft.utils.resampling.upsample_by_two_mwss_ext"]], "mw_to_mwss() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.mw_to_mwss"]], "mw_to_mwss_phi() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.mw_to_mwss_phi"]], "mw_to_mwss_theta() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.mw_to_mwss_theta"]], "periodic_extension() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.periodic_extension"]], "periodic_extension_spatial_mwss() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.periodic_extension_spatial_mwss"]], "s2fft.utils.resampling_jax": [[28, "module-s2fft.utils.resampling_jax"]], "unextend() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.unextend"]], "upsample_by_two_mwss() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.upsample_by_two_mwss"]], "upsample_by_two_mwss_ext() (in module s2fft.utils.resampling_jax)": [[28, "s2fft.utils.resampling_jax.upsample_by_two_mwss_ext"]], "generate_rotate_dls() (in module s2fft.utils.rotation)": [[29, "s2fft.utils.rotation.generate_rotate_dls"]], "rotate_flms() (in module s2fft.utils.rotation)": [[29, "s2fft.utils.rotation.rotate_flms"]], "s2fft.utils.rotation": [[29, "module-s2fft.utils.rotation"]], "generate_flm() (in module s2fft.utils.signal_generator)": [[30, "s2fft.utils.signal_generator.generate_flm"]], "generate_flmn() (in module s2fft.utils.signal_generator)": [[30, "s2fft.utils.signal_generator.generate_flmn"]], "s2fft.utils.signal_generator": [[30, "module-s2fft.utils.signal_generator"]], "s2fft.utils": [[31, "module-s2fft.utils"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api/base_transforms/index", "api/base_transforms/spin_spherical_transform", "api/base_transforms/wigner_transform", "api/index", "api/precompute_transforms/construct", "api/precompute_transforms/index", "api/precompute_transforms/spin_spherical", "api/precompute_transforms/wigner", "api/recursions/index", "api/recursions/price_mcewen", "api/recursions/risbo", "api/recursions/risbo_jax", "api/recursions/trapani", "api/recursions/turok", "api/recursions/turok_jax", "api/sampling/index", "api/sampling/spherical_samples", "api/sampling/wigner_samples", "api/transforms/index", "api/transforms/on_the_fly_recursions", "api/transforms/spin_spherical_transform", "api/transforms/wigner", "api/utility/healpix_ffts", "api/utility/index", "api/utility/logs", "api/utility/quadrature", "api/utility/quadrature_jax", "api/utility/quadrature_torch", "api/utility/resampling", "api/utility/resampling_jax", "api/utility/resampling_torch", "api/utility/rotation", "api/utility/signal_generator", "api/utility/utils", "index", "tutorials/index", "tutorials/rotation/rotation", "tutorials/spherical_harmonic/spherical_harmonic_transform", "tutorials/torch_frontend/torch_frontend", "tutorials/wigner/wigner_transform", "user_guide/install"], "filenames": ["api/base_transforms/index.rst", "api/base_transforms/spin_spherical_transform.rst", "api/base_transforms/wigner_transform.rst", "api/index.rst", "api/precompute_transforms/construct.rst", "api/precompute_transforms/index.rst", "api/precompute_transforms/spin_spherical.rst", "api/precompute_transforms/wigner.rst", "api/recursions/index.rst", "api/recursions/price_mcewen.rst", "api/recursions/risbo.rst", "api/recursions/risbo_jax.rst", "api/recursions/trapani.rst", "api/recursions/turok.rst", "api/recursions/turok_jax.rst", "api/sampling/index.rst", "api/sampling/spherical_samples.rst", "api/sampling/wigner_samples.rst", "api/transforms/index.rst", "api/transforms/on_the_fly_recursions.rst", "api/transforms/spin_spherical_transform.rst", "api/transforms/wigner.rst", "api/utility/healpix_ffts.rst", "api/utility/index.rst", "api/utility/logs.rst", "api/utility/quadrature.rst", "api/utility/quadrature_jax.rst", "api/utility/quadrature_torch.rst", "api/utility/resampling.rst", "api/utility/resampling_jax.rst", "api/utility/resampling_torch.rst", "api/utility/rotation.rst", "api/utility/signal_generator.rst", "api/utility/utils.rst", "index.rst", "tutorials/index.rst", "tutorials/rotation/rotation.nblink", "tutorials/spherical_harmonic/spherical_harmonic_transform.nblink", "tutorials/torch_frontend/torch_frontend.nblink", "tutorials/wigner/wigner_transform.nblink", "user_guide/install.rst"], "titles": ["Reference Transforms", "Spherical Harmonic Transform", "Wigner Transform", "API", "constructor", "Precompute Functions", "Spherical Harmonic Transform", "Wigner Transform", "Wigner-d recursions", "Price & McEwen", "Risbo", "Risbo JAX", "Trapani", "Turok & Bucher", "Turok & Bucher JAX", "Sampling Functions", "Spherical samples", "Wigner samples", "Transforms", "On-the-fly (OTF) recursions", "Spherical Harmonic Transform", "Wigner Transform", "healpix functions", "Utility Functions", "logs", "quadrature", "quadrature_jax", "quadrature_torch", "resampling", "resampling_jax", "resampling_torch", "rotations", "signal generator", "utils", "Differentiable and accelerated spherical transforms", "Notebooks", "Rotate a signal", "Spherical harmonic transform", "Torch frontend guide", "Wigner transform", "Installation"], "terms": {"function": [0, 3, 4, 9, 16, 18, 20, 21, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 37, 38, 39], "name": [0, 5, 8, 15, 18, 23], "descript": [0, 5, 8, 15, 18, 23], "invers": [0, 1, 2, 4, 5, 6, 7, 9, 16, 18, 19, 20, 21, 22, 23, 36, 38], "wrapper": [0, 5, 18, 20, 21, 22, 23], "around": [0, 5, 14, 18], "variou": [0, 23, 25, 26, 27], "version": [0, 19, 23, 34, 40], "classic": 0, "forward": [0, 1, 2, 4, 5, 6, 7, 9, 16, 18, 19, 20, 21, 22, 23, 36, 38], "algorithm": [0, 35], "s2fft": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40], "base_transform": [1, 2], "f": [1, 2, 6, 7, 17, 20, 21, 22, 28, 29, 30, 35, 36, 37, 38, 39, 40], "ndarrai": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 31, 32], "l": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39], "int": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32], "spin": [1, 4, 6, 8, 9, 19, 20, 25, 26, 27, 28, 29, 30, 32, 34, 35], "0": [1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 34, 35, 38, 39], "sampl": [1, 2, 4, 6, 7, 9, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 36, 37, 39], "str": [1, 2, 4, 6, 7, 9, 12, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "mw": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 36, 37], "nside": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 25, 26, 27], "none": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 24, 25, 26, 27, 31], "realiti": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 32, 36, 37, 39], "bool": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 32], "fals": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 32, 37, 38, 39], "l_lower": [1, 2, 9, 19, 20, 21, 32], "comput": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27, 34, 35, 36, 38], "us": [1, 2, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 34, 35, 36, 37, 38, 39], "vectoris": [1, 8, 12, 22], "separ": [1, 20, 21, 34], "variabl": [1, 19, 20, 21], "method": [1, 5, 6, 7, 18, 20, 21, 22, 35, 38], "np": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 27, 28, 32, 36, 37, 38, 39], "fft": [1, 22], "paramet": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32], "signal": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 28, 29, 30, 34, 35, 37, 38, 39], "sphere": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 23, 28, 29, 30, 31, 34, 35, 36, 37, 38], "band": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32], "limit": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32], "option": [1, 2, 4, 6, 7, 9, 12, 13, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32], "default": [1, 2, 4, 6, 7, 9, 12, 13, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32], "scheme": [1, 2, 4, 6, 7, 9, 15, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 34, 36, 37, 39], "support": [1, 2, 4, 6, 7, 9, 12, 16, 17, 19, 20, 21, 25, 26, 27, 28, 29, 30, 34, 40], "includ": [1, 2, 4, 5, 6, 7, 8, 9, 12, 16, 17, 19, 20, 21, 25, 26, 27, 28, 29, 30, 38, 40], "mwss": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], "dh": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 23, 25, 26, 27], "healpix": [1, 2, 4, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 25, 26, 27, 34], "resolut": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 34], "onli": [1, 2, 4, 6, 7, 8, 9, 12, 13, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 34, 40], "requir": [1, 2, 4, 6, 7, 9, 12, 13, 14, 16, 17, 19, 20, 21, 25, 26, 27, 34, 40], "whether": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22], "i": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40], "real": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 32, 34, 37], "If": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 24, 37, 39], "so": [1, 2, 4, 6, 7, 9, 16, 17, 19, 20, 21, 22, 28, 34, 39], "conjug": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22, 32], "symmetri": [1, 2, 4, 6, 7, 8, 9, 12, 13, 16, 19, 20, 21, 22, 32], "exploit": [1, 2, 4, 6, 7, 9, 13, 16, 19, 20, 21, 22], "reduc": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 23, 31, 34], "cost": [1, 2, 4, 6, 7, 9, 16, 19, 20, 21, 22, 34], "lower": [1, 2, 9, 19, 20, 21, 22, 23, 32], "bound": [1, 2, 9, 19, 20, 21, 32], "texttt": [1, 9, 19, 20, 21], "leq": [1, 9, 19, 20, 21], "ell": [1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21], "return": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32], "coeffici": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 22, 23, 31, 32, 34, 35, 36, 38, 39], "type": [1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32], "flm": [1, 6, 7, 16, 19, 20, 31, 35, 36, 37, 38], "n": [2, 4, 7, 9, 17, 21, 32, 35, 39, 40], "e": [2, 7, 9, 16, 17, 21, 22, 24, 25, 26, 27, 32, 34, 37, 39], "fourier": [2, 7, 21, 22, 32, 34, 39], "3": [2, 4, 7, 9, 16, 17, 21, 35, 37, 38, 39, 40], "importantli": [2, 7, 17, 21], "convent": [2, 7, 16, 17, 21, 23], "adopt": [2, 7, 12, 17, 21, 36, 37, 39], "storag": [2, 7, 16, 17, 21, 40], "gamma": [2, 7, 17, 21, 31, 36], "beta": [2, 7, 8, 9, 10, 11, 13, 14, 17, 19, 21, 23, 31, 36], "alpha": [2, 7, 17, 21, 31, 35, 36], "euler": [2, 7, 17, 21, 23], "angl": [2, 7, 8, 9, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 31], "follow": [2, 7, 16, 17, 21, 28, 29, 30, 34, 35, 40], "zyz": [2, 7, 17, 21, 23], "order": [2, 7, 13, 14, 15, 16, 17, 21], "simplifi": [2, 7, 17, 21], "index": [2, 7, 8, 9, 12, 13, 14, 16, 17, 19, 21, 22, 23, 25, 26, 27], "intern": [2, 7, 17, 21, 24], "For": [2, 7, 12, 17, 19, 20, 21, 28, 29, 30, 34, 35, 36, 38], "given": [2, 7, 9, 12, 13, 14, 15, 16, 17, 21, 23, 25, 26, 27, 31], "we": [2, 7, 8, 9, 13, 14, 16, 17, 21, 34, 35, 36, 37, 38, 39, 40], "thu": [2, 7, 8, 10, 11, 12, 16, 17, 21], "recov": [2, 7, 17, 19, 20, 21], "theta": [2, 4, 7, 9, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30], "phi": [2, 7, 15, 16, 17, 21, 22, 23, 25, 26, 27, 28, 29, 30], "associ": [2, 7, 17, 19, 21, 34, 37, 40], "shape": [2, 4, 6, 7, 13, 14, 16, 17, 21, 22, 28, 29, 30, 31], "n_": [2, 7, 9, 16, 21, 22], "where": [2, 7, 14, 16, 21, 24, 34, 40], "xi": [2, 7, 21], "denot": [2, 7, 8, 9, 13, 14, 21], "number": [2, 7, 15, 16, 17, 19, 20, 21, 22, 28, 29, 30, 32, 34, 35], "harmon": [2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 38, 39], "bandlimit": [2, 9, 19, 20, 21, 34, 36, 38], "direct": [2, 4, 7, 17], "rais": [2, 6, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "valueerror": [2, 6, 13, 16, 17, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30], "current": [2, 19, 20, 21, 34], "flmn": [2, 7, 17, 21, 35, 39], "2n": [2, 7, 9, 21], "1": [2, 4, 7, 9, 10, 11, 12, 13, 14, 16, 17, 21, 22, 31, 32, 34, 35, 38, 39], "2l": [2, 4, 7, 9, 13, 14, 16, 21, 22, 31], "automat": 3, "gener": [3, 4, 15, 16, 22, 31, 36, 38], "document": 3, "all": [3, 4, 8, 9, 12, 19, 20, 21, 22, 23, 25, 26, 27, 34], "access": [3, 23, 35], "through": [3, 35, 36], "pip": [3, 38, 40], "instal": [3, 38], "packag": [3, 34, 35, 40], "below": [3, 34, 35], "an": [3, 12, 16, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 37, 39, 40], "overview": 3, "directori": [3, 24, 40], "structur": [3, 34, 35], "softwar": [3, 34], "precompute_transform": [4, 6, 7, 38], "construct": [4, 8, 13, 19, 38, 39], "healpix_phase_shift": [4, 5], "phase": [4, 5, 15, 16, 22], "shift": [4, 5, 9, 15, 16, 22], "vector": [4, 5, 6, 8, 12, 15, 16, 22], "ring": [4, 5, 15, 16, 22, 34], "provid": [4, 9, 16, 22, 24, 34, 40], "spin_spherical_kernel": [4, 5, 38], "using_torch": [4, 32, 38], "precomput": [4, 6, 8, 9, 19, 20, 21, 31, 34, 35, 37, 38, 39], "wigner": [4, 6, 9, 10, 11, 12, 13, 14, 15, 19, 23, 31, 32, 34, 35, 36], "d": [4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 19, 20, 21, 23, 25, 26, 27, 31, 34, 36], "kernel": [4, 6, 7, 38], "spheric": [4, 8, 10, 11, 12, 19, 23, 28, 29, 30, 31, 32, 35, 36, 38], "transform": [4, 8, 9, 19, 22, 25, 26, 27, 35, 36, 38], "thi": [4, 9, 12, 13, 14, 16, 19, 20, 21, 28, 29, 30, 34, 36, 37, 38, 39, 40], "can": [4, 9, 12, 13, 14, 19, 24, 25, 26, 27, 28, 29, 30, 34, 35, 36, 38, 40], "drastic": 4, "faster": 4, "come": [4, 34, 40], "mathcal": [4, 8, 9, 13, 14, 19, 20, 21], "o": [4, 8, 9, 13, 14, 19, 20, 21], "memori": [4, 9, 19, 20, 21, 34, 35], "overhead": [4, 9, 19, 20, 21, 34], "make": 4, "infeas": [4, 34], "geq": 4, "512": [4, 35], "desir": [4, 24, 32, 34], "frontend": [4, 32], "spin_spherical_kernel_jax": 4, "jnp": [4, 6, 7, 9, 12, 14, 19, 20, 21, 22, 26, 29, 31], "wigner_kernel": [4, 5], "nl": [4, 8, 21], "wigner_kernel_jax": 4, "numpi": [5, 6, 7, 8, 18, 20, 21, 22, 23, 36, 37, 38, 39], "jax": [5, 6, 7, 8, 9, 12, 18, 19, 20, 21, 22, 23, 26, 27, 29, 34, 36, 37, 38, 39], "torch": [5, 6, 7, 22, 23, 27, 30], "inverse_transform": [5, 6, 7], "inverse_transform_jax": [5, 6, 7], "inverse_transform_torch": [5, 6, 7], "forward_transform": [5, 6, 7], "forward_transform_jax": [5, 6, 7], "forward_transform_torch": [5, 6, 7], "build": [5, 34, 40], "quadratur": [5, 26, 27], "weight": [5, 23, 25, 26, 27], "correspond": [5, 16, 17, 22, 25, 26, 27, 28, 29, 30, 34, 38], "each": [5, 22, 25, 26, 27, 34, 36], "latitudin": [5, 15, 16, 18, 34], "via": [6, 8, 13], "execut": [6, 7, 20, 21, 34, 38, 40], "mode": [6, 7, 20, 21], "recognis": [6, 20, 21], "warn": [6, 13, 24], "set": [6, 16, 22, 23, 32, 38], "field": [6, 19], "complex": [6, 34], "implement": [6, 8, 9, 11, 12, 13, 14, 19, 20, 21, 22, 26, 27, 29, 30, 34, 35], "pixel": [6, 7, 16, 17, 22, 25, 26, 27, 34, 35, 36], "space": [6, 7, 16, 17, 22, 28, 29, 30, 35, 36, 39], "arrai": [6, 7, 8, 9, 11, 12, 14, 16, 19, 20, 21, 22, 23, 25, 26, 27, 29, 31, 37, 39], "tranclearsform": 6, "tensor": [6, 7, 22, 27, 30, 38], "compute_all_slic": [8, 9], "necessari": [8, 14], "slice": [8, 9, 13, 14, 22], "plane": [8, 10, 11, 12, 13, 31, 32, 37], "compute_all_slices_jax": [8, 9], "generate_precomput": [8, 9], "list": [8, 9, 19, 20, 21], "2": [8, 9, 12, 16, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30, 34, 35, 36, 37, 38, 39], "acceler": [8, 9, 19, 20, 21], "generate_precomputes_jax": [8, 9, 37], "generate_precomputes_wign": [8, 9], "generate_precomputes_wigner_jax": [8, 9, 39], "compute_ful": [8, 10, 11, 12, 13], "complet": [8, 9, 13, 14, 24, 31], "matrix": [8, 9, 13, 14], "polar": [8, 9, 13, 14, 19, 22, 23, 34], "compute_slic": [8, 13, 14], "particular": [8, 9, 13, 14, 34], "m": [8, 9, 12, 13, 14, 15, 16, 17, 19, 23, 25, 26, 27, 35], "prime": [8, 9, 12, 13, 14, 25, 26, 27], "mm": [8, 9, 12, 13, 14], "compute_quarter_slic": [8, 13], "singl": [8, 13, 19, 20, 21], "evalu": [8, 9, 13, 14, 19, 22], "compute_quart": [8, 12, 13], "left": [8, 13, 35], "quarter": [8, 12, 13], "triangl": [8, 13], "fill": [8, 12, 13], "reflect": [8, 13], "full": [8, 10, 11, 12, 13], "properti": [8, 13], "matric": [8, 13, 36], "reindex": [8, 14], "reorder": [8, 14], "maintain": 8, "fix": [8, 31], "length": [8, 9, 14, 16, 19, 20, 21], "compute_eighth": [8, 12], "argument": [8, 10, 11, 12, 37, 39], "pi": [8, 12, 16, 23, 25, 26, 27, 28, 29, 30, 36], "eighth": [8, 12, 13], "navaza": [8, 12], "compute_quarter_vector": [8, 12], "compute_quarter_jax": [8, 12], "fill_eighth2quart": [8, 12], "from": [8, 9, 12, 13, 14, 15, 16, 17, 23, 28, 29, 30, 32, 34, 38], "fill_quarter2half": [8, 12], "half": [8, 12], "fill_quarter2half_vector": [8, 12], "fill_quarter2half_jax": [8, 12], "fill_half2ful": [8, 12], "fill_half2full_vector": [8, 12], "fill_half2full_jax": [8, 12], "multipl": [8, 9, 12, 19, 20, 21], "compute_full_loop": [8, 12], "loop": [8, 12, 34], "base": [8, 12, 22, 25, 26, 27, 34, 35], "compute_full_vector": [8, 12], "compute_full_jax": [8, 12], "The": [8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 28, 29, 30, 34, 36, 40], "primari": [8, 35, 40], "though": [8, 19, 38], "other": [8, 16, 25, 26, 27, 35], "popular": [8, 34], "comparison": 8, "One": [8, 34, 40], "should": [8, 9, 12, 14, 24, 34, 37, 39, 40], "howev": [8, 9, 13, 14, 19, 20, 21, 34, 36, 40], "note": [8, 16, 32, 34, 35, 38], "develop": [8, 34], "time": [8, 19, 34, 35, 37, 39], "wa": [8, 40], "minim": [8, 9, 19, 20, 21, 38], "veri": [8, 19, 20, 21, 34, 40], "recurs": [9, 10, 11, 12, 13, 14, 20, 21, 31, 34, 35], "price_mcewen": [9, 19], "precomp": [9, 19, 20, 21, 37, 39], "el": [9, 10, 11, 12, 13, 14, 16, 17], "over": [9, 10, 11, 12, 13, 14, 19, 20, 21, 34], "label": [9, 13, 14], "specif": [9, 13, 14, 22, 34, 36, 37, 39], "analyt": [9, 13, 14, 25, 26, 27], "correct": [9, 13, 14, 28, 29, 30], "numer": [9, 13, 14, 20, 21, 38], "becom": [9, 13, 14, 34], "unstabl": [9, 13, 14], "To": [9, 13, 14, 35, 37, 38, 39, 40], "avoid": [9, 13, 14, 34, 40], "d_": [9, 13, 14], "neg": [9, 13, 14, 16], "which": [9, 10, 11, 13, 14, 19, 20, 21, 25, 26, 27, 31, 34, 35, 37, 38, 39, 40], "again": [9, 13, 14, 37, 39], "same": [9, 28, 29, 30], "On": 9, "fly": [9, 20, 21, 34], "renormalis": 9, "potenti": 9, "under": [9, 34], "flow": 9, "within": [9, 15, 16, 38, 40], "ani": [9, 34, 40], "iter": 9, "ar": [9, 12, 13, 14, 16, 23, 25, 26, 27, 32, 34, 37, 39, 40], "sim": [9, 13, 14, 19], "ell_": [9, 12, 13, 14, 16], "dl": [9, 10, 11, 12, 13, 14], "ha": [9, 13, 14, 19, 34], "scale": [9, 13, 14, 35], "typic": [9, 13, 14], "oper": [9, 13, 14], "radian": [9, 13, 14, 19], "dimens": [9, 13, 14, 16], "In": [9, 34, 40], "practic": [9, 34], "one": [9, 19, 20, 21, 34, 40], "could": [9, 34], "neglig": [9, 34], "well": [9, 34], "worth": 9, "todo": 9, "optimis": [9, 34], "wrap": 9, "extens": [9, 23, 28, 29, 30], "case": [9, 35], "azimuth": [9, 21], "float": [10, 11, 13, 14, 16, 25, 26, 27, 31], "must": [10, 11, 12, 19, 28, 29, 30, 38], "alreadi": [10, 11, 12, 17], "At": [10, 11, 19, 20, 21, 35], "present": [10, 11], "recus": [10, 11, 12], "initialis": [10, 11, 12, 24], "degre": [10, 11, 12, 13, 14, 16, 17], "risbo_jax": 11, "see": [12, 13, 16, 31, 34, 35], "init": 12, "relat": [12, 13, 34], "remaind": [12, 13], "mai": [12, 34, 40], "stabl": [12, 20, 21, 34], "abov": 12, "gtrsim": 12, "1024": [12, 34, 35], "directli": [12, 40], "further": [12, 34, 35], "detail": [12, 16, 34, 35], "better": 12, "rather": 12, "than": [12, 13, 16], "eight": 12, "write": 12, "garbag": 12, "outsid": 12, "rang": [12, 24], "pass": [12, 16, 37, 39], "alloc": 12, "init_jax": 12, "init_nonjax": 12, "greater": 13, "popul": [13, 14], "positive_m_onli": 13, "zero": [13, 17, 28, 29, 30], "By": [13, 19], "lead": 13, "signific": 13, "improv": [13, 34], "less": 13, "true": [13, 36, 37, 38, 39], "A": [13, 34, 35, 36], "turok_jax": 14, "centr": 14, "valu": [14, 16, 24, 25, 26, 27], "origin": [14, 28], "rightarrow": 14, "dot": [14, 16], "result": [14, 28, 29, 30], "repres": 14, "entri": [14, 19, 34], "ignor": 14, "These": 14, "extra": 14, "ensur": [14, 40], "static": [14, 37, 39], "f_shape": [15, 16, 17], "rotat": [15, 17, 32, 34, 35, 39], "group": [15, 17, 34, 35, 39], "flm_shape": [15, 16], "standard": [15, 16], "flmn_shape": [15, 17], "ftm_shape": [15, 16], "intermedi": [15, 16, 19], "befor": [15, 16, 28, 29, 30], "after": [15, 16, 34, 40], "step": [15, 16, 19, 34], "fnab_shap": [15, 17], "ncoeff": [15, 16], "ntheta": [15, 16, 22], "total": [15, 17, 22], "ntheta_extens": [15, 16], "period": [15, 22, 28, 29, 30], "extend": [15, 16, 22, 23, 28, 29, 30, 34], "t2theta": [15, 16], "convert": [15, 16, 17, 22, 23, 28, 29, 30], "nphi_equiang": [15, 16], "longitudin": 15, "equiangular": [15, 16, 34], "nphi_equitorial_band": [15, 16], "equitori": [15, 16], "nphi_r": [15, 16], "phis_r": [15, 16], "p2phi_r": [15, 16, 22], "phis_equiang": [15, 16], "ring_phase_shift_hp": [15, 16], "elm2ind": [15, 16], "2d": [15, 16, 23, 32], "1d": [15, 16, 17, 34], "ind2elm": [15, 16], "elmn2ind": [15, 17], "3d": [15, 17, 23, 32], "hp_ang2pix": [15, 16], "hp_getidx": [15, 16], "lm2lm_hp": [15, 16], "healpi": [15, 16], "flm_2d_to_1d": [15, 16], "flm_1d_to_2d": [15, 16], "harmnon": [15, 16], "flm_hp_to_2d": [15, 16], "flm_2d_to_hp": [15, 16], "flmn_3d_to_1d": [15, 17], "flmn_1d_to_3d": [15, 17], "s2_sampl": 16, "defin": [16, 23, 25, 26, 27, 28, 29, 30], "tupl": [16, 17, 31], "instead": 16, "flm_1d": [16, 17], "flm_": 16, "g": [16, 24, 34, 37, 39], "text": [16, 25, 26, 27], "data": [16, 19, 20, 21, 37], "format": 16, "begin": [16, 24], "bmatrix": 16, "end": 16, "flm_2d": 16, "implicitli": 16, "assum": 16, "store": [16, 34, 37, 38, 39], "posit": 16, "discard": 16, "process": [16, 34], "NOT": 16, "invert": 16, "api": [16, 35], "doc": 16, "f_": 16, "explicitli": [16, 32], "differ": [16, 34], "lmax": 16, "flm_hp": 16, "here": [16, 36], "unpack": 16, "unknown": [16, 17], "ftm": [16, 19, 22], "4nside": 16, "map": [16, 19, 20, 21, 34, 35, 37], "math": 16, "max": 16, "ind": 16, "specifi": 16, "independ": 16, "sinc": 16, "t": [16, 22], "invalid": [16, 25, 26, 27], "when": [16, 40], "p2phi_equiang": 16, "p": 16, "": [16, 19, 35, 37, 39], "indic": 16, "so3_sampl": 17, "flmn_1d": 17, "c": [17, 35], "flatten": 17, "prioriti": 17, "flmn_3d": 17, "flm_3d": 17, "flmn_shape_1d": 17, "non": 17, "inverse_numpi": [18, 20, 21], "inverse_jax": [18, 20, 21, 35, 36, 37, 39], "forward_numpi": [18, 20, 21], "forward_jax": [18, 20, 21, 35, 36, 37, 39], "inverse_latitudinal_step": [18, 19], "portion": [18, 34], "overal": 18, "inverse_latitudinal_step_jax": [18, 19], "forward_latitudinal_step": [18, 19], "forward_latitudinal_step_jax": [18, 19], "otf_recurs": 19, "latitundin": 19, "approach": [19, 34], "heavili": 19, "engineerd": 19, "price": [19, 20, 21, 34, 35], "mcewen": [19, 20, 21, 34, 35, 36, 37, 39], "found": 19, "most": [19, 20, 21, 40], "footprint": 19, "scalar": 19, "legendr": 19, "our": [19, 34, 35, 36], "arbitrari": [19, 28, 29, 30, 38], "sole": 19, "henc": [19, 28, 29, 30, 34], "simultan": 19, "facilit": 19, "gpu": [19, 34, 35], "tpu": [19, 34], "ftm_in": 19, "beta_in": 19, "spmd": [19, 20, 21], "devic": [19, 20, 21], "avail": [19, 20, 21, 34], "program": [19, 20, 21], "determin": [19, 20, 21], "run": [19, 20, 21, 24, 35, 36, 37, 38, 39, 40], "low": [19, 20, 21], "ineffici": [19, 20, 21], "commun": [19, 20, 21, 34], "between": [19, 20, 21], "notic": [19, 20, 21], "increas": [19, 20, 21], "asymptot": [19, 20, 21], "valid": [20, 21], "wiger": [20, 21], "theoret": [20, 21], "util": [22, 25, 26, 27, 28, 29, 30, 31, 32, 36, 38, 39], "healpix_fft": [22, 23], "fast": 22, "spectral": [22, 23], "back": [22, 23, 28, 29, 30, 35, 36, 37, 39], "project": [22, 23, 34, 40], "region": [22, 23], "manual": [22, 23], "enforc": [22, 23], "deploy": [22, 34], "latitud": 22, "healpix_fft_jax": [22, 23], "stack": 22, "healpix_fft_numpi": [22, 23], "healpix_fft_torch": [22, 23], "healpix_ifft": [22, 23], "fold": [22, 23], "mitig": [22, 23], "alias": [22, 23], "healpix_ifft_jax": [22, 23], "healpix_ifft_numpi": [22, 23], "healpix_ifft_torch": [22, 23], "ndarrrai": 22, "indici": 22, "offset": 22, "p2phi_rings_jax": 22, "ring_phase_shifts_hp": 22, "ring_phase_shifts_hp_jax": 22, "spectral_fold": [22, 23], "fm": 22, "nphi": 22, "higher": [22, 23], "frequenc": [22, 23], "onto": [22, 23, 34], "high": [22, 34, 35], "latitut": 22, "spectral_folding_jax": [22, 23], "spectral_folding_torch": [22, 23], "spectral_periodic_extens": [22, 23], "impos": 22, "spectral_periodic_extension_jax": [22, 23], "modifi": 22, "jit": [22, 34], "compil": [22, 34], "spectral_periodic_extension_torch": [22, 23], "quad_weights_transform": [23, 25, 26, 27], "integr": [23, 25, 26, 27], "quad_weight": [23, 25, 26, 27], "quad_weights_hp": [23, 25, 26, 27], "quad_weights_dh": [23, 25, 26, 27], "quad_weights_mw": [23, 25, 26, 27], "quad_weights_mwss": [23, 25, 26, 27], "quad_weight_dh_theta_onli": [23, 25, 26, 27], "quad_weights_mw_theta_onli": [23, 25, 26, 27], "quad_weights_mwss_theta_onli": [23, 25, 26, 27], "mw_weight": [23, 25, 26, 27], "share": 23, "almost": 23, "ident": [23, 25, 26, 27], "trace": 23, "simpli": [23, 37, 39, 40], "sub": 23, "modul": 23, "quadrature_jax": 23, "quadrature_torch": 23, "respect": 23, "periodic_extens": [23, 28, 29, 30], "perform": [23, 28, 29, 30, 36], "domain": [23, 28, 29, 30], "periodic_extension_spatial_mwss": [23, 28, 29, 30], "spatial": [23, 28, 29, 30], "upsample_by_two_mwss": [23, 28, 29, 30], "upsampl": [23, 28, 29, 30], "factor": [23, 28, 29, 30, 34], "two": [23, 28, 29, 30, 34, 40], "upsample_by_two_mwss_ext": [23, 28, 29, 30], "downsample_by_two_mwss": [23, 28], "downsampl": [23, 28], "unextend": [23, 28, 29, 30], "mw_to_mwss_phi": [23, 28, 29, 30], "compon": [23, 28, 29, 30], "mw_to_mwss_theta": [23, 28, 29, 30], "mw_to_mwss": [23, 28, 29, 30], "generate_flm": [23, 32, 36, 38], "random": [23, 32, 36, 38, 39], "generate_flmn": [23, 32, 39], "resampling_jax": 23, "resampling_torch": 23, "rotate_flm": [23, 31, 36], "generate_rotate_dl": [23, 31], "critical_log": 24, "messag": 24, "critic": 24, "core": [24, 40], "code": [24, 34], "failur": 24, "etc": 24, "debug_log": 24, "debug": 24, "background": 24, "assist": 24, "info_log": 24, "inform": 24, "evid": 24, "print": [24, 37, 38, 39], "setup_log": 24, "custom_yaml_path": 24, "configur": 24, "call": 24, "level": [24, 35], "50": 24, "10": [24, 34, 37], "string": 24, "pathnam": 24, "yaml": 24, "empti": 24, "config": [24, 36, 37, 39], "warning_log": 24, "larg": 24, "dynam": 24, "w": [25, 26, 27], "int_0": [25, 26, 27], "sin": [25, 26, 27], "exp": [25, 26, 27], "vari": [25, 26, 27], "nevertheless": [25, 26, 27], "consist": [25, 26, 27], "interfac": [25, 26, 27], "across": [25, 26, 27], "twice": [25, 26, 27], "quad_weights_dh_theta_onli": [26, 27], "f_ext": [28, 29, 30], "appli": [28, 36, 37, 38, 39], "either": [28, 40], "input": [28, 29, 30, 37, 39], "even": [28, 38], "integ": 28, "f_mw": [28, 29, 30], "convers": [28, 29, 30], "first": [28, 29, 30, 34, 36, 37, 39, 40], "pad": [28, 29, 30], "second": [28, 29, 30, 34], "work": [28, 29, 30, 34, 40], "both": [28, 29, 30, 34, 40], "have": [28, 29, 30, 40], "match": [28, 29, 30, 40], "mww": [28, 29, 30], "possibl": [28, 29, 30], "do": [28, 29, 30, 34, 37, 39], "dl_arrai": 31, "func": 31, "signal_gener": [32, 36, 38, 39], "rng": [32, 36, 38, 39], "produc": 32, "tangent": 32, "direction": 32, "2023": 34, "It": 34, "leverag": 34, "autodiff": 34, "also": [34, 38], "modern": 34, "hardwar": 34, "more": [34, 35, 40], "adjoint": 34, "need": [34, 40], "select": 34, "depend": [34, 40], "resourc": 34, "angular": 34, "As": 34, "pytorch": 34, "underli": 34, "futur": [34, 40], "releas": [34, 35, 40], "new": 34, "he": 34, "highli": 34, "parallelis": 34, "distribut": 34, "architectur": [34, 40], "diagram": 34, "illustr": 34, "With": 34, "hand": 34, "isolatitudin": 34, "longitud": 34, "extrem": 34, "equal": 34, "altern": [34, 40], "calcul": [34, 38], "incur": 34, "slightli": 34, "slower": 34, "reason": 34, "slow": 34, "due": 34, "xla": 34, "unfold": 34, "cannot": 34, "effici": 34, "outlin": [34, 40], "paper": 34, "therefor": 34, "addit": 34, "onc": [34, 40], "awar": 34, "issu": 34, "subsequ": 34, "isolattitud": 34, "wiaux": [34, 36, 37], "2012": [34, 36, 37], "driscol": 34, "heali": 34, "1995": 34, "exhibit": 34, "theorem": [34, 39], "machin": [34, 37, 38, 39, 40], "precis": [34, 37, 38, 39], "nyquist": 34, "rate": 34, "compar": 34, "halv": 34, "gorski": 34, "et": [34, 39], "al": [34, 39], "2005": 34, "doe": 34, "achiev": 34, "some": [34, 37, 38, 39], "error": [34, 35, 38], "area": 34, "mani": [34, 35, 37, 39, 40], "advantag": 34, "thank": 34, "goe": 34, "wonder": 34, "peopl": 34, "emoji": 34, "kei": 34, "matt": 34, "jason": 34, "graham": 34, "sfmig": 34, "devaraj": 34, "gopinathan": 34, "francoi": 34, "lanuss": 34, "encourag": 34, "contribut": 34, "interest": 34, "simpl": [34, 35], "ad": [34, 40], "pattern": 34, "wai": [34, 36, 40], "kindli": 34, "request": 34, "articl": 34, "referenc": 34, "bibtex": 34, "refer": 34, "look": [34, 37], "like": 34, "author": 34, "matthew": 34, "titl": 34, "journal": 34, "physic": 34, "submit": 34, "year": 34, "eprint": 34, "arxiv": 34, "2311": 34, "14670": 34, "you": [34, 37, 39, 40], "might": 34, "consid": [34, 37], "cite": 34, "fssht": 34, "yve": 34, "novel": 34, "ieee": 34, "tran": 34, "sig": 34, "proc": 34, "2011": 34, "volum": 34, "59": 34, "12": 34, "page": 34, "5876": 34, "5887": 34, "1110": 34, "6298": 34, "doi": 34, "1109": 34, "tsp": 34, "2166394": 34, "so3": 34, "martin": 34, "b": 34, "u": [34, 39], "ttner": 34, "bori": 34, "leistedt": 34, "hiranya": 34, "v": 34, "peiri": 34, "let": [34, 37, 38, 39], "2015": [34, 39], "22": 34, "2425": 34, "2429": 34, "1508": 34, "03101": 34, "lsp": 34, "2490676": 34, "mit": 34, "open": 34, "sourc": [34, 38], "licenc": 34, "hope": 34, "wider": 34, "copyright": 34, "free": [34, 35], "made": 34, "file": 34, "seri": 35, "tutori": [35, 36, 37, 38, 39, 40], "go": 35, "absolut": [35, 37, 38, 39], "applic": 35, "post": 35, "add": 35, "exampl": 35, "involv": [35, 40], "being": [35, 40], "feel": 35, "contact": 35, "contributor": 35, "advic": 35, "easili": 35, "import": [35, 36, 37, 38, 39, 40], "against": 35, "ssht": 35, "pacakg": 35, "brief": 35, "summari": 35, "shown": 35, "tabl": 35, "right": 35, "prep": 35, "agnost": 35, "linearli": 35, "wall": 35, "speed": 35, "up": [35, 38, 40], "64": [35, 38], "6": [35, 37, 38, 39], "88": 35, "81e": 35, "15": 35, "52": 35, "4": [35, 37, 38, 39], "\u03bc": 35, "60": 35, "5": [35, 36, 37, 38, 39], "67e": 35, "mb": 35, "128": [35, 36, 39], "7": [35, 36, 37, 39], "26": 35, "80": 35, "32e": 35, "162": 35, "64e": 35, "33": 35, "256": 35, "17": 35, "32": 35, "66e": 35, "669": 35, "163": 35, "74e": 35, "268": 35, "58": 35, "11": 35, "43e": 35, "14": [35, 38, 39], "184": 35, "37e": 35, "gb": 35, "194": 35, "9": [35, 36, 37, 40], "69e": 35, "195": 35, "47e": 35, "2048": 35, "44": 35, "49": 35, "17e": 35, "4096": 35, "8": [35, 36, 37], "48": 35, "133": 35, "06e": 35, "13": [35, 37], "8192": 35, "82": 35, "110": 35, "14e": 35, "demonstr": [36, 37, 38, 39], "how": [36, 37, 38, 39], "introduc": 36, "artifact": 36, "best": 36, "purpos": [36, 39], "ll": [36, 37, 39], "just": 36, "updat": [36, 37, 39], "jax_enable_x64": [36, 37, 39], "plotting_funct": [36, 37], "default_rng": [36, 38, 39], "12346161": 36, "now": [36, 37, 38], "flm_rotat": 36, "final": [36, 38], "get": [36, 37, 39, 40], "f_rotat": 36, "load": 37, "galact": 37, "captur": 37, "esa": 37, "gaia": 37, "satellit": 37, "1000": 37, "gaia_edr3_flux": 37, "npy": 37, "take": 37, "pyvista": 37, "plot_spher": 37, "isnotebook": 37, "observ": 37, "plan": [37, 39], "dure": [37, 39], "train": [37, 39], "model": [37, 38, 39], "recommend": [37, 39, 40], "small": [37, 39], "everi": [37, 39], "flm_pre": 37, "cmpute": 37, "f_recov": 37, "f_recov_pr": 37, "check": [37, 38, 39], "close": [37, 39], "mean": [37, 38, 39], "nanmean": [37, 38, 39], "ab": [37, 38, 39], "2041881386973936e": 37, "pypi": 38, "clone": [38, 40], "repositori": [38, 40], "primarili": 38, "design": 38, "fulli": 38, "unit": [38, 40], "test": [38, 39, 40], "gradient": 38, "straightforwardli": 38, "learnabl": 38, "layer": 38, "exist": [38, 40], "bit": [38, 40], "dramat": 38, "affect": 38, "moder": 38, "mock": 38, "problem": 38, "specifii": 38, "1234951510": 38, "seed": 38, "inverse_kernel": 38, "forward_kernel": 38, "represent": 38, "flm_check": 38, "roundtrip": [38, 39], "64bit": 38, "1866908936078849e": 38, "f_pre": 39, "flmn_recov": 39, "flmn_recov_pr": 39, "126898555332371e": 39, "There": 40, "recent": 40, "benefit": 40, "abl": 40, "local": 40, "onlin": 40, "python": 40, "manag": 40, "simplest": 40, "pick": 40, "notebook": 40, "collab": 40, "conda": 40, "environ": 40, "creat": 40, "fresh": 40, "conflict": 40, "env_nam": 40, "activ": 40, "git": 40, "http": 40, "com": 40, "astro": 40, "informat": 40, "cd": 40, "root": 40, "success": 40, "pytest": 40, "yet": 40, "jaxlib": 40, "txt": 40, "thing": 40, "strongli": 40, "guid": 40, "googl": 40, "summaris": 40, "driver": 40, "cuda": 40, "cudnn": 40, "pre": 40, "built": 40, "compat": 40, "wheel": 40, "shoulld": 40, "upgrad": 40, "linux": 40, "googleapi": 40, "jax_cuda_releas": 40, "html": 40, "cuda11_cudnn86": 40, "those": 40}, "objects": {"s2fft.base_transforms": [[1, 0, 0, "-", "spherical"], [2, 0, 0, "-", "wigner"]], "s2fft.base_transforms.spherical": [[1, 1, 1, "", "forward"], [1, 1, 1, "", "inverse"]], "s2fft.base_transforms.wigner": [[2, 1, 1, "", "forward"], [2, 1, 1, "", "inverse"]], "s2fft": [[24, 0, 0, "-", "logs"], [33, 0, 0, "-", "utils"]], "s2fft.logs": [[24, 1, 1, "", "critical_log"], [24, 1, 1, "", "debug_log"], [24, 1, 1, "", "info_log"], [24, 1, 1, "", "setup_logging"], [24, 1, 1, "", "warning_log"]], "s2fft.precompute_transforms": [[4, 0, 0, "-", "construct"], [6, 0, 0, "-", "spherical"], [7, 0, 0, "-", "wigner"]], "s2fft.precompute_transforms.construct": [[4, 1, 1, "", "healpix_phase_shifts"], [4, 1, 1, "", "spin_spherical_kernel"], [4, 1, 1, "", "spin_spherical_kernel_jax"], [4, 1, 1, "", "wigner_kernel"], [4, 1, 1, "", "wigner_kernel_jax"]], "s2fft.precompute_transforms.spherical": [[6, 1, 1, "", "forward"], [6, 1, 1, "", "forward_transform"], [6, 1, 1, "", "forward_transform_jax"], [6, 1, 1, "", "forward_transform_torch"], [6, 1, 1, "", "inverse"], [6, 1, 1, "", "inverse_transform"], [6, 1, 1, "", "inverse_transform_jax"], [6, 1, 1, "", "inverse_transform_torch"]], "s2fft.precompute_transforms.wigner": [[7, 1, 1, "", "forward"], [7, 1, 1, "", "forward_transform"], [7, 1, 1, "", "forward_transform_jax"], [7, 1, 1, "", "forward_transform_torch"], [7, 1, 1, "", "inverse"], [7, 1, 1, "", "inverse_transform"], [7, 1, 1, "", "inverse_transform_jax"], [7, 1, 1, "", "inverse_transform_torch"]], "s2fft.recursions": [[9, 0, 0, "-", "price_mcewen"], [10, 0, 0, "-", "risbo"], [11, 0, 0, "-", "risbo_jax"], [12, 0, 0, "-", "trapani"], [13, 0, 0, "-", "turok"], [14, 0, 0, "-", "turok_jax"]], "s2fft.recursions.price_mcewen": [[9, 1, 1, "", "compute_all_slices"], [9, 1, 1, "", "compute_all_slices_jax"], [9, 1, 1, "", "generate_precomputes"], [9, 1, 1, "", "generate_precomputes_jax"], [9, 1, 1, "", "generate_precomputes_wigner"], [9, 1, 1, "", "generate_precomputes_wigner_jax"]], "s2fft.recursions.risbo": [[10, 1, 1, "", "compute_full"]], "s2fft.recursions.risbo_jax": [[11, 1, 1, "", "compute_full"]], "s2fft.recursions.trapani": [[12, 1, 1, "", "compute_eighth"], [12, 1, 1, "", "compute_full"], [12, 1, 1, "", "compute_full_jax"], [12, 1, 1, "", "compute_full_loop"], [12, 1, 1, "", "compute_full_vectorized"], [12, 1, 1, "", "compute_quarter"], [12, 1, 1, "", "compute_quarter_jax"], [12, 1, 1, "", "compute_quarter_vectorized"], [12, 1, 1, "", "fill_eighth2quarter"], [12, 1, 1, "", "fill_half2full"], [12, 1, 1, "", "fill_half2full_jax"], [12, 1, 1, "", "fill_half2full_vectorized"], [12, 1, 1, "", "fill_quarter2half"], [12, 1, 1, "", "fill_quarter2half_jax"], [12, 1, 1, "", "fill_quarter2half_vectorized"], [12, 1, 1, "", "init"], [12, 1, 1, "", "init_jax"], [12, 1, 1, "", "init_nonjax"]], "s2fft.recursions.turok": [[13, 1, 1, "", "compute_full"], [13, 1, 1, "", "compute_quarter"], [13, 1, 1, "", "compute_quarter_slice"], [13, 1, 1, "", "compute_slice"], [13, 1, 1, "", "fill"]], "s2fft.recursions.turok_jax": [[14, 1, 1, "", "compute_slice"], [14, 1, 1, "", "reindex"]], "s2fft.sampling": [[16, 0, 0, "-", "s2_samples"], [17, 0, 0, "-", "so3_samples"]], "s2fft.sampling.s2_samples": [[16, 1, 1, "", "elm2ind"], [16, 1, 1, "", "f_shape"], [16, 1, 1, "", "flm_1d_to_2d"], [16, 1, 1, "", "flm_2d_to_1d"], [16, 1, 1, "", "flm_2d_to_hp"], [16, 1, 1, "", "flm_hp_to_2d"], [16, 1, 1, "", "flm_shape"], [16, 1, 1, "", "ftm_shape"], [16, 1, 1, "", "hp_ang2pix"], [16, 1, 1, "", "hp_getidx"], [16, 1, 1, "", "ind2elm"], [16, 1, 1, "", "lm2lm_hp"], [16, 1, 1, "", "ncoeff"], [16, 1, 1, "", "nphi_equiang"], [16, 1, 1, "", "nphi_equitorial_band"], [16, 1, 1, "", "nphi_ring"], [16, 1, 1, "", "ntheta"], [16, 1, 1, "", "ntheta_extension"], [16, 1, 1, "", "p2phi_equiang"], [16, 1, 1, "", "p2phi_ring"], [16, 1, 1, "", "phis_equiang"], [16, 1, 1, "", "phis_ring"], [16, 1, 1, "", "ring_phase_shift_hp"], [16, 1, 1, "", "t2theta"], [16, 1, 1, "", "thetas"]], "s2fft.sampling.so3_samples": [[17, 1, 1, "", "elmn2ind"], [17, 1, 1, "", "f_shape"], [17, 1, 1, "", "flmn_1d_to_3d"], [17, 1, 1, "", "flmn_3d_to_1d"], [17, 1, 1, "", "flmn_shape"], [17, 1, 1, "", "flmn_shape_1d"], [17, 1, 1, "", "fnab_shape"]], "s2fft.transforms": [[19, 0, 0, "-", "otf_recursions"], [20, 0, 0, "-", "spherical"], [21, 0, 0, "-", "wigner"]], "s2fft.transforms.otf_recursions": [[19, 1, 1, "", "forward_latitudinal_step"], [19, 1, 1, "", "forward_latitudinal_step_jax"], [19, 1, 1, "", "inverse_latitudinal_step"], [19, 1, 1, "", "inverse_latitudinal_step_jax"]], "s2fft.transforms.spherical": [[20, 1, 1, "", "forward"], [20, 1, 1, "", "forward_jax"], [20, 1, 1, "", "forward_numpy"], [20, 1, 1, "", "inverse"], [20, 1, 1, "", "inverse_jax"], [20, 1, 1, "", "inverse_numpy"]], "s2fft.transforms.wigner": [[21, 1, 1, "", "forward"], [21, 1, 1, "", "forward_jax"], [21, 1, 1, "", "forward_numpy"], [21, 1, 1, "", "inverse"], [21, 1, 1, "", "inverse_jax"], [21, 1, 1, "", "inverse_numpy"]], "s2fft.utils": [[22, 0, 0, "-", "healpix_ffts"], [25, 0, 0, "-", "quadrature"], [26, 0, 0, "-", "quadrature_jax"], [27, 0, 0, "-", "quadrature_torch"], [28, 0, 0, "-", "resampling"], [29, 0, 0, "-", "resampling_jax"], [30, 0, 0, "-", "resampling_torch"], [31, 0, 0, "-", "rotation"], [32, 0, 0, "-", "signal_generator"]], "s2fft.utils.healpix_ffts": [[22, 1, 1, "", "healpix_fft"], [22, 1, 1, "", "healpix_fft_jax"], [22, 1, 1, "", "healpix_fft_numpy"], [22, 1, 1, "", "healpix_fft_torch"], [22, 1, 1, "", "healpix_ifft"], [22, 1, 1, "", "healpix_ifft_jax"], [22, 1, 1, "", "healpix_ifft_numpy"], [22, 1, 1, "", "healpix_ifft_torch"], [22, 1, 1, "", "p2phi_rings"], [22, 1, 1, "", "p2phi_rings_jax"], [22, 1, 1, "", "ring_phase_shifts_hp"], [22, 1, 1, "", "ring_phase_shifts_hp_jax"], [22, 1, 1, "", "spectral_folding"], [22, 1, 1, "", "spectral_folding_jax"], [22, 1, 1, "", "spectral_folding_torch"], [22, 1, 1, "", "spectral_periodic_extension"], [22, 1, 1, "", "spectral_periodic_extension_jax"], [22, 1, 1, "", "spectral_periodic_extension_torch"]], "s2fft.utils.quadrature": [[25, 1, 1, "", "mw_weights"], [25, 1, 1, "", "quad_weight_dh_theta_only"], [25, 1, 1, "", "quad_weights"], [25, 1, 1, "", "quad_weights_dh"], [25, 1, 1, "", "quad_weights_hp"], [25, 1, 1, "", "quad_weights_mw"], [25, 1, 1, "", "quad_weights_mw_theta_only"], [25, 1, 1, "", "quad_weights_mwss"], [25, 1, 1, "", "quad_weights_mwss_theta_only"], [25, 1, 1, "", "quad_weights_transform"]], "s2fft.utils.quadrature_jax": [[26, 1, 1, "", "mw_weights"], [26, 1, 1, "", "quad_weight_dh_theta_only"], [26, 1, 1, "", "quad_weights"], [26, 1, 1, "", "quad_weights_dh"], [26, 1, 1, "", "quad_weights_hp"], [26, 1, 1, "", "quad_weights_mw"], [26, 1, 1, "", "quad_weights_mw_theta_only"], [26, 1, 1, "", "quad_weights_mwss"], [26, 1, 1, "", "quad_weights_mwss_theta_only"], [26, 1, 1, "", "quad_weights_transform"]], "s2fft.utils.quadrature_torch": [[27, 1, 1, "", "mw_weights"], [27, 1, 1, "", "quad_weight_dh_theta_only"], [27, 1, 1, "", "quad_weights"], [27, 1, 1, "", "quad_weights_dh"], [27, 1, 1, "", "quad_weights_hp"], [27, 1, 1, "", "quad_weights_mw"], [27, 1, 1, "", "quad_weights_mw_theta_only"], [27, 1, 1, "", "quad_weights_mwss"], [27, 1, 1, "", "quad_weights_mwss_theta_only"], [27, 1, 1, "", "quad_weights_transform"]], "s2fft.utils.resampling": [[28, 1, 1, "", "downsample_by_two_mwss"], [28, 1, 1, "", "mw_to_mwss"], [28, 1, 1, "", "mw_to_mwss_phi"], [28, 1, 1, "", "mw_to_mwss_theta"], [28, 1, 1, "", "periodic_extension"], [28, 1, 1, "", "periodic_extension_spatial_mwss"], [28, 1, 1, "", "unextend"], [28, 1, 1, "", "upsample_by_two_mwss"], [28, 1, 1, "", "upsample_by_two_mwss_ext"]], "s2fft.utils.resampling_jax": [[29, 1, 1, "", "mw_to_mwss"], [29, 1, 1, "", "mw_to_mwss_phi"], [29, 1, 1, "", "mw_to_mwss_theta"], [29, 1, 1, "", "periodic_extension"], [29, 1, 1, "", "periodic_extension_spatial_mwss"], [29, 1, 1, "", "unextend"], [29, 1, 1, "", "upsample_by_two_mwss"], [29, 1, 1, "", "upsample_by_two_mwss_ext"]], "s2fft.utils.resampling_torch": [[30, 1, 1, "", "mw_to_mwss"], [30, 1, 1, "", "mw_to_mwss_phi"], [30, 1, 1, "", "mw_to_mwss_theta"], [30, 1, 1, "", "periodic_extension"], [30, 1, 1, "", "periodic_extension_spatial_mwss"], [30, 1, 1, "", "unextend"], [30, 1, 1, "", "upsample_by_two_mwss"], [30, 1, 1, "", "upsample_by_two_mwss_ext"]], "s2fft.utils.rotation": [[31, 1, 1, "", "generate_rotate_dls"], [31, 1, 1, "", "rotate_flms"]], "s2fft.utils.signal_generator": [[32, 1, 1, "", "generate_flm"], [32, 1, 1, "", "generate_flmn"]]}, "objtypes": {"0": "py:module", "1": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "titleterms": {"refer": 0, "transform": [0, 1, 2, 5, 6, 7, 18, 20, 21, 23, 34, 37, 39], "spheric": [0, 1, 5, 6, 15, 16, 18, 20, 34, 37], "harmon": [0, 1, 5, 6, 18, 20, 37], "wigner": [0, 2, 5, 7, 8, 17, 18, 21, 39], "api": 3, "constructor": 4, "precomput": 5, "function": [5, 8, 15, 22, 23], "construct": 5, "kernel": 5, "d": 8, "recurs": [8, 18, 19], "price": [8, 9, 18], "mcewen": [8, 9, 18], "turok": [8, 13, 14], "bucher": [8, 13, 14], "trapani": [8, 12], "risbo": [8, 10, 11], "jax": [11, 14, 40], "sampl": [15, 16, 17, 34], "arrai": 15, "shape": 15, "pixel": 15, "index": 15, "dimension": 15, "convers": 15, "On": [18, 19], "fly": [18, 19], "otf": 19, "healpix": [22, 23], "util": [23, 33], "fast": 23, "fourier": 23, "plan": 23, "quadratur": [23, 25], "period": 23, "resampl": [23, 28], "signal": [23, 32, 36], "gener": [23, 32], "rotat": [23, 31, 36], "log": 24, "quadrature_jax": 26, "quadrature_torch": 27, "resampling_jax": 29, "resampling_torch": 30, "differenti": 34, "acceler": 34, "algorithm": 34, "contributor": 34, "attribut": 34, "licens": 34, "notebook": 35, "usag": 35, "benchmark": 35, "execut": 36, "step": 36, "comput": [37, 39], "forward": [37, 39], "invers": [37, 39], "error": [37, 39], "torch": 38, "frontend": 38, "guid": 38, "instal": 40, "quick": 40, "pypi": 40, "from": 40, "sourc": 40, "github": 40, "nvidia": 40, "gpu": 40}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx": 60}, "alltitles": {"Reference Transforms": [[0, "reference-transforms"]], "Spherical harmonic transforms.": [[0, "id1"], [5, "id1"], [18, "id1"]], "Wigner transforms.": [[0, "id2"], [5, "id2"], [18, "id2"]], "Spherical Harmonic Transform": [[1, "spherical-harmonic-transform"], [6, "spherical-harmonic-transform"], [20, "spherical-harmonic-transform"]], "Wigner Transform": [[2, "module-s2fft.base_transforms.wigner"], [7, "module-s2fft.precompute_transforms.wigner"], [21, "module-s2fft.transforms.wigner"]], "API": [[3, "api"]], "constructor": [[4, "module-s2fft.precompute_transforms.construct"]], "Precompute Functions": [[5, "precompute-functions"]], "Constructing Kernels for precompute transforms.": [[5, "id3"]], "Wigner-d recursions": [[8, "wigner-d-recursions"]], "Price-McEwen recursion functions": [[8, "id1"]], "Turok-Bucher recursion functions": [[8, "id2"]], "Trapani recursion functions": [[8, "id3"]], "Risbo recursion functions": [[8, "id4"]], "Price & McEwen": [[9, "module-s2fft.recursions.price_mcewen"]], "Risbo": [[10, "module-s2fft.recursions.risbo"]], "Risbo JAX": [[11, "module-s2fft.recursions.risbo_jax"]], "Trapani": [[12, "module-s2fft.recursions.trapani"]], "Turok & Bucher": [[13, "module-s2fft.recursions.turok"]], "Turok & Bucher JAX": [[14, "module-s2fft.recursions.turok_jax"]], "Sampling Functions": [[15, "sampling-functions"]], "Array shaping functions": [[15, "id1"]], "Spherical sampling functions": [[15, "id2"]], "Pixel indexing functions": [[15, "id3"]], "Sampling & dimensionality conversions": [[15, "id4"]], "Spherical samples": [[16, "module-s2fft.sampling.s2_samples"]], "Wigner samples": [[17, "module-s2fft.sampling.so3_samples"]], "Transforms": [[18, "transforms"]], "On-the-fly Price-McEwen recursions.": [[18, "id3"]], "On-the-fly (OTF) recursions": [[19, "on-the-fly-otf-recursions"]], "healpix functions": [[22, "module-s2fft.utils.healpix_ffts"]], "Utility Functions": [[23, "utility-functions"]], "HEALPix fast Fourier transform planning functions": [[23, "id1"]], "Quadrature functions.": [[23, "id2"]], "Periodic resampling functions": [[23, "id3"]], "Signal generating functions": [[23, "id4"]], "Rotation functions": [[23, "id5"]], "logs": [[24, "module-s2fft.logs"]], "quadrature": [[25, "module-s2fft.utils.quadrature"]], "quadrature_jax": [[26, "module-s2fft.utils.quadrature_jax"]], "quadrature_torch": [[27, "module-s2fft.utils.quadrature_torch"]], "resampling": [[28, "module-s2fft.utils.resampling"]], "resampling_jax": [[29, "module-s2fft.utils.resampling_jax"]], "resampling_torch": [[30, "module-s2fft.utils.resampling_torch"]], "rotations": [[31, "module-s2fft.utils.rotation"]], "signal generator": [[32, "module-s2fft.utils.signal_generator"]], "utils": [[33, "module-s2fft.utils"]], "Differentiable and accelerated spherical transforms": [[34, "differentiable-and-accelerated-spherical-transforms"]], "Algorithms \u26a1": [[34, "algorithms-zap"]], "Sampling \ud83c\udf0d": [[34, "sampling-earth-africa"]], "Contributors \u2728": [[34, "contributors"]], "Attribution \ud83d\udcda": [[34, "attribution-books"]], "License \ud83d\udcdd": [[34, "license-memo"]], "Notebooks": [[35, "notebooks"]], "Usage \ud83d\ude80": [[35, "usage-rocket"]], "Benchmarking \u23f3": [[35, "benchmarking-hourglass-flowing-sand"]], "Rotate a signal": [[36, "Rotate-a-signal"]], "Execute the rotation steps": [[36, "Execute-the-rotation-steps"]], "Spherical harmonic transform": [[37, "Spherical-harmonic-transform"]], "Computing the forward spherical harmonic transform": [[37, "Computing-the-forward-spherical-harmonic-transform"]], "Computing the inverse spherical harmonic transform": [[37, "Computing-the-inverse-spherical-harmonic-transform"]], "Computing the error": [[37, "Computing-the-error"], [39, "Computing-the-error"]], "Torch frontend guide": [[38, "Torch-frontend-guide"]], "Wigner transform": [[39, "Wigner-transform"]], "Computing the inverse Wigner transform": [[39, "Computing-the-inverse-Wigner-transform"]], "Computing the forward Wigner transform": [[39, "Computing-the-forward-Wigner-transform"]], "Installation": [[40, "installation"]], "Quick install (PyPi)": [[40, "quick-install-pypi"]], "Install from source (GitHub)": [[40, "install-from-source-github"]], "Installing JAX for NVIDIA GPUs": [[40, "installing-jax-for-nvidia-gpus"]]}, "indexentries": {"forward() (in module s2fft.base_transforms.spherical)": [[1, "s2fft.base_transforms.spherical.forward"]], "inverse() (in module s2fft.base_transforms.spherical)": [[1, "s2fft.base_transforms.spherical.inverse"]], "module": [[1, "module-s2fft.base_transforms.spherical"], [2, "module-s2fft.base_transforms.wigner"], [4, "module-s2fft.precompute_transforms.construct"], [6, "module-s2fft.precompute_transforms.spherical"], [7, "module-s2fft.precompute_transforms.wigner"], [9, "module-s2fft.recursions.price_mcewen"], [10, "module-s2fft.recursions.risbo"], [11, "module-s2fft.recursions.risbo_jax"], [12, "module-s2fft.recursions.trapani"], [13, "module-s2fft.recursions.turok"], [14, "module-s2fft.recursions.turok_jax"], [16, "module-s2fft.sampling.s2_samples"], [17, "module-s2fft.sampling.so3_samples"], [19, "module-s2fft.transforms.otf_recursions"], [20, "module-s2fft.transforms.spherical"], [21, "module-s2fft.transforms.wigner"], [22, "module-s2fft.utils.healpix_ffts"], [24, "module-s2fft.logs"], [25, "module-s2fft.utils.quadrature"], [26, "module-s2fft.utils.quadrature_jax"], [27, "module-s2fft.utils.quadrature_torch"], [28, "module-s2fft.utils.resampling"], [29, "module-s2fft.utils.resampling_jax"], [30, "module-s2fft.utils.resampling_torch"], [31, "module-s2fft.utils.rotation"], [32, "module-s2fft.utils.signal_generator"], [33, "module-s2fft.utils"]], "s2fft.base_transforms.spherical": [[1, "module-s2fft.base_transforms.spherical"]], "forward() (in module s2fft.base_transforms.wigner)": [[2, "s2fft.base_transforms.wigner.forward"]], "inverse() (in module s2fft.base_transforms.wigner)": [[2, "s2fft.base_transforms.wigner.inverse"]], "s2fft.base_transforms.wigner": [[2, "module-s2fft.base_transforms.wigner"]], "healpix_phase_shifts() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.healpix_phase_shifts"]], "s2fft.precompute_transforms.construct": [[4, "module-s2fft.precompute_transforms.construct"]], "spin_spherical_kernel() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.spin_spherical_kernel"]], "spin_spherical_kernel_jax() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.spin_spherical_kernel_jax"]], "wigner_kernel() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.wigner_kernel"]], "wigner_kernel_jax() (in module s2fft.precompute_transforms.construct)": [[4, "s2fft.precompute_transforms.construct.wigner_kernel_jax"]], "forward() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward"]], "forward_transform() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward_transform"]], "forward_transform_jax() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward_transform_jax"]], "forward_transform_torch() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.forward_transform_torch"]], "inverse() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse"]], "inverse_transform() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse_transform"]], "inverse_transform_jax() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse_transform_jax"]], "inverse_transform_torch() (in module s2fft.precompute_transforms.spherical)": [[6, "s2fft.precompute_transforms.spherical.inverse_transform_torch"]], "s2fft.precompute_transforms.spherical": [[6, "module-s2fft.precompute_transforms.spherical"]], "forward() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward"]], "forward_transform() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward_transform"]], "forward_transform_jax() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward_transform_jax"]], "forward_transform_torch() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.forward_transform_torch"]], "inverse() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse"]], "inverse_transform() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse_transform"]], "inverse_transform_jax() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse_transform_jax"]], "inverse_transform_torch() (in module s2fft.precompute_transforms.wigner)": [[7, "s2fft.precompute_transforms.wigner.inverse_transform_torch"]], "s2fft.precompute_transforms.wigner": [[7, "module-s2fft.precompute_transforms.wigner"]], "compute_all_slices() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.compute_all_slices"]], "compute_all_slices_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.compute_all_slices_jax"]], "generate_precomputes() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes"]], "generate_precomputes_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_jax"]], "generate_precomputes_wigner() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_wigner"]], "generate_precomputes_wigner_jax() (in module s2fft.recursions.price_mcewen)": [[9, "s2fft.recursions.price_mcewen.generate_precomputes_wigner_jax"]], "s2fft.recursions.price_mcewen": [[9, "module-s2fft.recursions.price_mcewen"]], "compute_full() (in module s2fft.recursions.risbo)": [[10, "s2fft.recursions.risbo.compute_full"]], "s2fft.recursions.risbo": [[10, "module-s2fft.recursions.risbo"]], "compute_full() (in module s2fft.recursions.risbo_jax)": [[11, "s2fft.recursions.risbo_jax.compute_full"]], "s2fft.recursions.risbo_jax": [[11, "module-s2fft.recursions.risbo_jax"]], "compute_eighth() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_eighth"]], "compute_full() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full"]], "compute_full_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_jax"]], "compute_full_loop() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_loop"]], "compute_full_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_full_vectorized"]], "compute_quarter() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter"]], "compute_quarter_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter_jax"]], "compute_quarter_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.compute_quarter_vectorized"]], "fill_eighth2quarter() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_eighth2quarter"]], "fill_half2full() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full"]], "fill_half2full_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full_jax"]], "fill_half2full_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_half2full_vectorized"]], "fill_quarter2half() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half"]], "fill_quarter2half_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half_jax"]], "fill_quarter2half_vectorized() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.fill_quarter2half_vectorized"]], "init() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init"]], "init_jax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init_jax"]], "init_nonjax() (in module s2fft.recursions.trapani)": [[12, "s2fft.recursions.trapani.init_nonjax"]], "s2fft.recursions.trapani": [[12, "module-s2fft.recursions.trapani"]], "compute_full() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_full"]], "compute_quarter() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_quarter"]], "compute_quarter_slice() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_quarter_slice"]], "compute_slice() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.compute_slice"]], "fill() (in module s2fft.recursions.turok)": [[13, "s2fft.recursions.turok.fill"]], "s2fft.recursions.turok": [[13, "module-s2fft.recursions.turok"]], "compute_slice() (in module s2fft.recursions.turok_jax)": [[14, "s2fft.recursions.turok_jax.compute_slice"]], "reindex() (in module s2fft.recursions.turok_jax)": [[14, "s2fft.recursions.turok_jax.reindex"]], "s2fft.recursions.turok_jax": [[14, "module-s2fft.recursions.turok_jax"]], "elm2ind() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.elm2ind"]], "f_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.f_shape"]], "flm_1d_to_2d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_1d_to_2d"]], "flm_2d_to_1d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_2d_to_1d"]], "flm_2d_to_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_2d_to_hp"]], "flm_hp_to_2d() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_hp_to_2d"]], "flm_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.flm_shape"]], "ftm_shape() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ftm_shape"]], "hp_ang2pix() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.hp_ang2pix"]], "hp_getidx() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.hp_getidx"]], "ind2elm() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ind2elm"]], "lm2lm_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.lm2lm_hp"]], "ncoeff() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ncoeff"]], "nphi_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_equiang"]], "nphi_equitorial_band() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_equitorial_band"]], "nphi_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.nphi_ring"]], "ntheta() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ntheta"]], "ntheta_extension() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ntheta_extension"]], "p2phi_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.p2phi_equiang"]], "p2phi_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.p2phi_ring"]], "phis_equiang() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.phis_equiang"]], "phis_ring() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.phis_ring"]], "ring_phase_shift_hp() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.ring_phase_shift_hp"]], "s2fft.sampling.s2_samples": [[16, "module-s2fft.sampling.s2_samples"]], "t2theta() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.t2theta"]], "thetas() (in module s2fft.sampling.s2_samples)": [[16, "s2fft.sampling.s2_samples.thetas"]], "elmn2ind() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.elmn2ind"]], "f_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.f_shape"]], "flmn_1d_to_3d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_1d_to_3d"]], "flmn_3d_to_1d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_3d_to_1d"]], "flmn_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_shape"]], "flmn_shape_1d() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.flmn_shape_1d"]], "fnab_shape() (in module s2fft.sampling.so3_samples)": [[17, "s2fft.sampling.so3_samples.fnab_shape"]], "s2fft.sampling.so3_samples": [[17, "module-s2fft.sampling.so3_samples"]], "forward_latitudinal_step() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.forward_latitudinal_step"]], "forward_latitudinal_step_jax() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.forward_latitudinal_step_jax"]], "inverse_latitudinal_step() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.inverse_latitudinal_step"]], "inverse_latitudinal_step_jax() (in module s2fft.transforms.otf_recursions)": [[19, "s2fft.transforms.otf_recursions.inverse_latitudinal_step_jax"]], "s2fft.transforms.otf_recursions": [[19, "module-s2fft.transforms.otf_recursions"]], "forward() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward"]], "forward_jax() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward_jax"]], "forward_numpy() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.forward_numpy"]], "inverse() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse"]], "inverse_jax() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse_jax"]], "inverse_numpy() (in module s2fft.transforms.spherical)": [[20, "s2fft.transforms.spherical.inverse_numpy"]], "s2fft.transforms.spherical": [[20, "module-s2fft.transforms.spherical"]], "forward() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward"]], "forward_jax() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward_jax"]], "forward_numpy() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.forward_numpy"]], "inverse() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse"]], "inverse_jax() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse_jax"]], "inverse_numpy() (in module s2fft.transforms.wigner)": [[21, "s2fft.transforms.wigner.inverse_numpy"]], "s2fft.transforms.wigner": [[21, "module-s2fft.transforms.wigner"]], "healpix_fft() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft"]], "healpix_fft_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft_jax"]], "healpix_fft_numpy() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft_numpy"]], "healpix_fft_torch() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_fft_torch"]], "healpix_ifft() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft"]], "healpix_ifft_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft_jax"]], "healpix_ifft_numpy() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft_numpy"]], "healpix_ifft_torch() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.healpix_ifft_torch"]], "p2phi_rings() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.p2phi_rings"]], "p2phi_rings_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.p2phi_rings_jax"]], "ring_phase_shifts_hp() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.ring_phase_shifts_hp"]], "ring_phase_shifts_hp_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.ring_phase_shifts_hp_jax"]], "s2fft.utils.healpix_ffts": [[22, "module-s2fft.utils.healpix_ffts"]], "spectral_folding() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_folding"]], "spectral_folding_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_folding_jax"]], "spectral_folding_torch() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_folding_torch"]], "spectral_periodic_extension() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_periodic_extension"]], "spectral_periodic_extension_jax() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_periodic_extension_jax"]], "spectral_periodic_extension_torch() (in module s2fft.utils.healpix_ffts)": [[22, "s2fft.utils.healpix_ffts.spectral_periodic_extension_torch"]], "critical_log() (in module s2fft.logs)": [[24, "s2fft.logs.critical_log"]], "debug_log() (in module s2fft.logs)": [[24, "s2fft.logs.debug_log"]], "info_log() (in module s2fft.logs)": [[24, "s2fft.logs.info_log"]], "s2fft.logs": [[24, "module-s2fft.logs"]], "setup_logging() (in module s2fft.logs)": [[24, "s2fft.logs.setup_logging"]], "warning_log() (in module s2fft.logs)": [[24, "s2fft.logs.warning_log"]], "mw_weights() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.mw_weights"]], "quad_weight_dh_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weight_dh_theta_only"]], "quad_weights() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights"]], "quad_weights_dh() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_dh"]], "quad_weights_hp() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_hp"]], "quad_weights_mw() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mw"]], "quad_weights_mw_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mw_theta_only"]], "quad_weights_mwss() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mwss"]], "quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_mwss_theta_only"]], "quad_weights_transform() (in module s2fft.utils.quadrature)": [[25, "s2fft.utils.quadrature.quad_weights_transform"]], "s2fft.utils.quadrature": [[25, "module-s2fft.utils.quadrature"]], "mw_weights() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.mw_weights"]], "quad_weight_dh_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weight_dh_theta_only"]], "quad_weights() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights"]], "quad_weights_dh() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_dh"]], "quad_weights_hp() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_hp"]], "quad_weights_mw() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mw"]], "quad_weights_mw_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mw_theta_only"]], "quad_weights_mwss() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mwss"]], "quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_mwss_theta_only"]], "quad_weights_transform() (in module s2fft.utils.quadrature_jax)": [[26, "s2fft.utils.quadrature_jax.quad_weights_transform"]], "s2fft.utils.quadrature_jax": [[26, "module-s2fft.utils.quadrature_jax"]], "mw_weights() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.mw_weights"]], "quad_weight_dh_theta_only() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weight_dh_theta_only"]], "quad_weights() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights"]], "quad_weights_dh() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_dh"]], "quad_weights_hp() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_hp"]], "quad_weights_mw() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_mw"]], "quad_weights_mw_theta_only() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_mw_theta_only"]], "quad_weights_mwss() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_mwss"]], "quad_weights_mwss_theta_only() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_mwss_theta_only"]], "quad_weights_transform() (in module s2fft.utils.quadrature_torch)": [[27, "s2fft.utils.quadrature_torch.quad_weights_transform"]], "s2fft.utils.quadrature_torch": [[27, "module-s2fft.utils.quadrature_torch"]], "downsample_by_two_mwss() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.downsample_by_two_mwss"]], "mw_to_mwss() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.mw_to_mwss"]], "mw_to_mwss_phi() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.mw_to_mwss_phi"]], "mw_to_mwss_theta() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.mw_to_mwss_theta"]], "periodic_extension() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.periodic_extension"]], "periodic_extension_spatial_mwss() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.periodic_extension_spatial_mwss"]], "s2fft.utils.resampling": [[28, "module-s2fft.utils.resampling"]], "unextend() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.unextend"]], "upsample_by_two_mwss() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.upsample_by_two_mwss"]], "upsample_by_two_mwss_ext() (in module s2fft.utils.resampling)": [[28, "s2fft.utils.resampling.upsample_by_two_mwss_ext"]], "mw_to_mwss() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.mw_to_mwss"]], "mw_to_mwss_phi() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.mw_to_mwss_phi"]], "mw_to_mwss_theta() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.mw_to_mwss_theta"]], "periodic_extension() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.periodic_extension"]], "periodic_extension_spatial_mwss() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.periodic_extension_spatial_mwss"]], "s2fft.utils.resampling_jax": [[29, "module-s2fft.utils.resampling_jax"]], "unextend() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.unextend"]], "upsample_by_two_mwss() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.upsample_by_two_mwss"]], "upsample_by_two_mwss_ext() (in module s2fft.utils.resampling_jax)": [[29, "s2fft.utils.resampling_jax.upsample_by_two_mwss_ext"]], "mw_to_mwss() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.mw_to_mwss"]], "mw_to_mwss_phi() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.mw_to_mwss_phi"]], "mw_to_mwss_theta() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.mw_to_mwss_theta"]], "periodic_extension() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.periodic_extension"]], "periodic_extension_spatial_mwss() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.periodic_extension_spatial_mwss"]], "s2fft.utils.resampling_torch": [[30, "module-s2fft.utils.resampling_torch"]], "unextend() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.unextend"]], "upsample_by_two_mwss() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.upsample_by_two_mwss"]], "upsample_by_two_mwss_ext() (in module s2fft.utils.resampling_torch)": [[30, "s2fft.utils.resampling_torch.upsample_by_two_mwss_ext"]], "generate_rotate_dls() (in module s2fft.utils.rotation)": [[31, "s2fft.utils.rotation.generate_rotate_dls"]], "rotate_flms() (in module s2fft.utils.rotation)": [[31, "s2fft.utils.rotation.rotate_flms"]], "s2fft.utils.rotation": [[31, "module-s2fft.utils.rotation"]], "generate_flm() (in module s2fft.utils.signal_generator)": [[32, "s2fft.utils.signal_generator.generate_flm"]], "generate_flmn() (in module s2fft.utils.signal_generator)": [[32, "s2fft.utils.signal_generator.generate_flmn"]], "s2fft.utils.signal_generator": [[32, "module-s2fft.utils.signal_generator"]], "s2fft.utils": [[33, "module-s2fft.utils"]]}}) \ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html index 32e8ced4..fa5048ad 100644 --- a/tutorials/index.html +++ b/tutorials/index.html @@ -8,7 +8,7 @@ - Notebooks — S2FFT 1.0.1 documentation + Notebooks — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + + @@ -403,6 +425,7 @@
  • Spherical harmonic transform
  • Wigner transform
  • Rotate a signal
  • +
  • Torch frontend guide
  • diff --git a/tutorials/rotation/rotation.html b/tutorials/rotation/rotation.html index 98f91323..54f3d294 100644 --- a/tutorials/rotation/rotation.html +++ b/tutorials/rotation/rotation.html @@ -8,7 +8,7 @@ - Rotate a signal — S2FFT 1.0.1 documentation + Rotate a signal — S2FFT 1.0.2 documentation @@ -44,7 +44,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -139,8 +139,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -232,6 +232,17 @@ + PyPi + + @@ -369,6 +380,17 @@ + PyPi + + @@ -410,6 +432,7 @@
  • Spherical harmonic transform
  • Wigner transform
  • Rotate a signal
  • +
  • Torch frontend guide
  • @@ -549,11 +572,11 @@

    Execute the rotation steps

    next

    -

    API

    +

    Torch frontend guide

    diff --git a/tutorials/spherical_harmonic/spherical_harmonic_transform.html b/tutorials/spherical_harmonic/spherical_harmonic_transform.html index 4661e2d9..ea05f9a8 100644 --- a/tutorials/spherical_harmonic/spherical_harmonic_transform.html +++ b/tutorials/spherical_harmonic/spherical_harmonic_transform.html @@ -8,7 +8,7 @@ - Spherical harmonic transform — S2FFT 1.0.1 documentation + Spherical harmonic transform — S2FFT 1.0.2 documentation @@ -44,7 +44,7 @@ - + @@ -139,8 +139,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -232,6 +232,17 @@ + PyPi + + @@ -369,6 +380,17 @@ + PyPi + + @@ -410,6 +432,7 @@
  • Spherical harmonic transform
  • Wigner transform
  • Rotate a signal
  • +
  • Torch frontend guide
  • diff --git a/tutorials/torch_frontend/torch_frontend.html b/tutorials/torch_frontend/torch_frontend.html new file mode 100644 index 00000000..16a6d6a4 --- /dev/null +++ b/tutorials/torch_frontend/torch_frontend.html @@ -0,0 +1,679 @@ + + + + + + + + + + + Torch frontend guide — S2FFT 1.0.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    s2fft is currently in an open beta, please provide feedback on GitHub
    +
    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + +
    +

    Torch frontend guide#

    +
    +

    This minimal tutorial demonstrates how to use the torch frontend for S2FFT to compute spherical harmonic transforms.

    +

    Note that to install S2FFT with torch functionality from PyPi run

    +
    pip install s2fft[torch]
    +
    +
    +

    or from source by cloning the repository and running

    +
    pip install .\[torch\]
    +
    +
    +

    Though S2FFT is primarily designed for JAX, this torch functionality is fully unit tested (including gradients) and can be used straightforwardly as a learnable layer within existing models.

    +
    +
    [1]:
    +
    +
    +
    import torch
    +import numpy as np
    +from s2fft.precompute_transforms.spherical import inverse, forward
    +from s2fft.precompute_transforms.construct import spin_spherical_kernel
    +from s2fft.utils import signal_generator
    +
    +
    +
    +
    +
    +
    +
    +
    +JAX is not using 64-bit precision. This will dramatically affect numerical precision at even moderate L.
    +
    +
    +

    Lets set up a mock problem by specifiying a bandlimit \(L\) and generating some arbitrary harmonic coefficients.

    +
    +
    [2]:
    +
    +
    +
    L = 64                                                          # Spherical harmonic bandlimit
    +rng = np.random.default_rng(1234951510)                         # Random seed for signal generator
    +flm = signal_generator.generate_flm(rng, L, using_torch=True)   # Random set of spherical harmonic coefficients
    +
    +
    +
    +

    For the fully precompute transform we must also generate the precompute kernels which we store as a torch tensors.

    +
    +
    [3]:
    +
    +
    +
    inverse_kernel = spin_spherical_kernel(L, using_torch=True, forward=False)
    +forward_kernel = spin_spherical_kernel(L, using_torch=True, forward=True)
    +
    +
    +
    +

    Now lets calculate the signal on the sphere by applying the inverse spherical harmonic transform

    +
    +
    [4]:
    +
    +
    +
    f = inverse(flm, L, 0, inverse_kernel, method="torch")
    +
    +
    +
    +

    To calculate the corresponding spherical harmonic representation execute

    +
    +
    [5]:
    +
    +
    +
    flm_check = forward(f, L, 0, forward_kernel, method="torch")
    +
    +
    +
    +

    Finally, lets check the error on the roundtrip is at 64bit machine precision

    +
    +
    [6]:
    +
    +
    +
    print(f"Mean absolute error = {np.nanmean(np.abs(flm_check - flm))}")
    +
    +
    +
    +
    +
    +
    +
    +
    +Mean absolute error = 1.1866908936078849e-14
    +
    +
    +
    + + +
    + + + + + + + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/tutorials/torch_frontend/torch_frontend.ipynb b/tutorials/torch_frontend/torch_frontend.ipynb new file mode 100644 index 00000000..ae1b8d21 --- /dev/null +++ b/tutorials/torch_frontend/torch_frontend.ipynb @@ -0,0 +1,170 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# __Torch frontend guide__\n", + "\n", + "---\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This minimal tutorial demonstrates how to use the torch frontend for `S2FFT` to compute spherical harmonic transforms.\n", + "\n", + "Note that to install `S2FFT` with torch functionality from ``PyPi`` run \n", + "``` bash\n", + "pip install s2fft[torch] \n", + "```\n", + "or from source by cloning the repository and running \n", + "``` bash\n", + "pip install .\\[torch\\] \n", + "```\n", + "\n", + "Though `S2FFT` is primarily designed for JAX, this torch functionality is fully unit tested (including gradients) and can be used straightforwardly as a learnable layer within existing models." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "JAX is not using 64-bit precision. This will dramatically affect numerical precision at even moderate L.\n" + ] + } + ], + "source": [ + "import torch \n", + "import numpy as np \n", + "from s2fft.precompute_transforms.spherical import inverse, forward\n", + "from s2fft.precompute_transforms.construct import spin_spherical_kernel\n", + "from s2fft.utils import signal_generator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets set up a mock problem by specifiying a bandlimit $L$ and generating some arbitrary harmonic coefficients." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "L = 64 # Spherical harmonic bandlimit\n", + "rng = np.random.default_rng(1234951510) # Random seed for signal generator\n", + "flm = signal_generator.generate_flm(rng, L, using_torch=True) # Random set of spherical harmonic coefficients" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the fully precompute transform we must also generate the precompute kernels which we store as a torch tensors." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "inverse_kernel = spin_spherical_kernel(L, using_torch=True, forward=False) \n", + "forward_kernel = spin_spherical_kernel(L, using_torch=True, forward=True) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now lets calculate the signal on the sphere by applying the inverse spherical harmonic transform" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "f = inverse(flm, L, 0, inverse_kernel, method=\"torch\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To calculate the corresponding spherical harmonic representation execute" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "flm_check = forward(f, L, 0, forward_kernel, method=\"torch\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, lets check the error on the roundtrip is at 64bit machine precision" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean absolute error = 1.1866908936078849e-14\n" + ] + } + ], + "source": [ + "print(f\"Mean absolute error = {np.nanmean(np.abs(flm_check - flm))}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.4 ('s2fft')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.0" + }, + "vscode": { + "interpreter": { + "hash": "3425e24474cbe920550266ea26b478634978cc419579f9dbcf479231067df6a3" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tutorials/wigner/wigner_transform.html b/tutorials/wigner/wigner_transform.html index 78e72261..fc9b1058 100644 --- a/tutorials/wigner/wigner_transform.html +++ b/tutorials/wigner/wigner_transform.html @@ -8,7 +8,7 @@ - Wigner transform — S2FFT 1.0.1 documentation + Wigner transform — S2FFT 1.0.2 documentation @@ -44,7 +44,7 @@ - + @@ -139,8 +139,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -232,6 +232,17 @@ + PyPi + + @@ -369,6 +380,17 @@ + PyPi + + @@ -410,6 +432,7 @@
  • Spherical harmonic transform
  • Wigner transform
  • Rotate a signal
  • +
  • Torch frontend guide
  • diff --git a/user_guide/install.html b/user_guide/install.html index 74c412ac..b13555ee 100644 --- a/user_guide/install.html +++ b/user_guide/install.html @@ -8,7 +8,7 @@ - Installation — S2FFT 1.0.1 documentation + Installation — S2FFT 1.0.2 documentation @@ -43,7 +43,7 @@ - + @@ -136,8 +136,8 @@ - S2FFT 1.0.1 documentation - Home - + S2FFT 1.0.2 documentation - Home + @@ -229,6 +229,17 @@ + PyPi + + @@ -362,6 +373,17 @@ + PyPi + +