Skip to main content

A Python and JAX wrapper to create a coronagraph object from a yield input package

Project description

yippy logo

PyPI Documentation Status


yippy

A wrapper to create a coronagraph object from a yield input package (a "YIP"). A core feature is its ability to use Fourier interpolation to generate off axis PSFs at arbitrary locations in the (x,y) plane efficiently. yippy uses JAX to speed up computation by default, with an optional Python backend.

Installation

pip install yippy

Use

Typical use will look like

from lod_unit import lod
from yippy import Coronagraph

# Create a coronagraph object by specifying the path to the yield input package
coro = Coronagraph("input/LUVOIR_VVC")

# Off-axis PSF at a given point source position in the (x,y) plane
x_pos = 2 * lod # 2 lambda/D
y_pos = 5 * lod # 5 lambda/D
offaxis_psf = coro.offax(x_pos, y_pos)

# On-axis intensity map with a stellar diameter
stellar_diameter = 1*lod
stellar_intensity = coro.stellar_intensity(stellar_diameter)

# Sky transmission map for extended sources
sky_trans = coro.sky_trans()

Units

Yield input packages use $\lambda / D$ units so yippy treats them as the default and uses the lod_unit package to define the lod unit. However, it can use three different astropy units: pixels (as defined by the yield input package), angular separation (angle units), or apparent separation (length units). If no units are provided it assumes the input is in $\lambda / D$.

import astropy.units as u
# pixels
x_pos = 2 * u.pix
y_pos = 5 * u.pix
offaxis_psf = aplc.offax(x_pos, y_pos)

# angular separation
telescope_diameter = 10 * u.m
wavelength = 500 * u.nm
offaxis_psf = aplc.offax(x_pos, y_pos, lam=wavelength, D=telescope_diameter)

# apparent separation
star_dist = 10 * u.pc
offaxis_psf = aplc.offax(x_pos, y_pos, lam=wavelength, D=telescope_diameter, dist=star_dist)

JAX

The default backend is JAX, which is a high-performance numerical computing library that we use for JIT compilation and GPU/TPU support. By default, JAX uses 32-bit floating point precision, which leads to faster computation and lower memory overhead but results in lower precision (~1e-6 precision). If you need precision at the 1e-16 level, set use_x64=True.

Off-axis PSF options

  • use_jax: Use JAX for computation. Default is True.
  • use_x64: Use 64-bit floating point precision. Default is False.
  • x_symmetric: Off-axis PSF is symmetric about the x-axis. Default is True.
  • y_symmetric: Off-axis PSF is symmetric about the y-axis. Default is False.
  • cpu_cores: Number of CPU cores to use. Default is 1.
  • platform: Computing platform to use for JAX computation. Options are cpu, gpu, tpu. Default is cpu.

Parallel processing of off-axis PSFs

The base call of coronagraph.offax(x,y) is the most user-friendly, but is not the most efficient. When generating many PSFs it is recommended to convert all required (x,y) positions into arrays of floats (in $\lambda / D$) and use the coronagraph.offax.create_psfs_parallel(x_arr, y_arr) function. This function uses JAX's shard_map to distribute the computation across multiple devices or CPU cores.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yippy-1.7.2.tar.gz (3.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yippy-1.7.2-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file yippy-1.7.2.tar.gz.

File metadata

  • Download URL: yippy-1.7.2.tar.gz
  • Upload date:
  • Size: 3.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for yippy-1.7.2.tar.gz
Algorithm Hash digest
SHA256 16951463dd5bd515450b655a176244dad420f97822a33958853efed3321de2bc
MD5 b4c1a7cb8a6c3fa6807f169104d2a097
BLAKE2b-256 f4d2786c330cf86d04e0c95ea9b84e2d0f17d1abd9ca07c02e67ff92081b5d6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for yippy-1.7.2.tar.gz:

Publisher: publish-to-pypi.yml on CoreySpohn/yippy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yippy-1.7.2-py3-none-any.whl.

File metadata

  • Download URL: yippy-1.7.2-py3-none-any.whl
  • Upload date:
  • Size: 30.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for yippy-1.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d7b35ddfec63831d193bf2b24b2d930c5f1b7d5fd01bc8333002a9f0ebcbd038
MD5 e1fb8b96cd83d255b360fee19f148dba
BLAKE2b-256 5a47135b71a5a1c956cbf3f40e2229e7c5f9ee6073c9e841f8a0e3adb2378f6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for yippy-1.7.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on CoreySpohn/yippy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page