physicaloptix
Physical optics -- PSFs and diffraction -- for the HWO direct-imaging simulation suite.
What physicaloptix is
physicaloptix turns an optixstuff
hardware description into point-spread functions by wave-optics propagation.
It is a downstream consumer of optixstuff -- parallel to
coronagraphoto (2D image
simulation) and jaxEDITH
(exposure-time and yield calculations) -- so optixstuff itself stays free of
diffraction code.
The propagation core is owned: a
plane-aware Field/Grid data model, the continuous-FT MFT pair, the
multi-scale vortex, and the OpticalPath fold with construction-time
sampling gates, validated against the HWO Coronagraph Design Survey
(cds_pipeline) EAC-1 AAVC to an on-axis null of 3.05e-11 (0.2 percent of the
reference; the acceptance gates live in tests/validation/).
The key piece is PathCoronagraph, which implements optixstuff's
AbstractCoronagraph: build an OpticalPath (entrance pupil to Lyot plane),
wrap it, and hand it to any downstream tool. Its IWA and scalar performance
curves are derived from the propagated PSFs at construction, never declared.
import physicaloptix as po
coro = po.PathCoronagraph.from_path(
core_path, pupil_field, diameter_m=6.0, owa_lod=32.0
)
psf = coro.on_axis_psf(600.0, pixel_scale_rad, npix) # unit-flux PSF out
eta = coro.throughput(6.0, 600.0) # derived, not declared
What physicaloptix is not
- Not a hardware model. The telescope / coronagraph / detector description lives in optixstuff; physicaloptix consumes it.
- Not a PSF interpolator. That is yippy's
job (a sampled YIP table). physicaloptix is its functional sibling -- live
propagation -- and both back the same
AbstractCoronagraphslot. - Not a scene model. Stars, planets, disks, and zodi live in skyscapes.
Architecture
Built on JAX and
Equinox, physicaloptix provides:
- The owned core (
physicaloptix.core) --Grid(all-static, half-pixel offset, continuous-FT weights),PlaneKind-taggedFieldpytrees, andSpectrumfor chromatic fields. - Propagators (
physicaloptix.transforms) -- the validatedcmft_fwd/cmft_bwdcontinuous-FT MFT pair and the plane-awareFraunhoferwrapper, with sampling diagnostics evaluated at construction time. - Elements (
physicaloptix.elements) -- grid-stampedSampledOpticfor ingested masks and theMultiScaleVortexladder (hcipy port; reaches the cds EAC-1 on-axis null). - The optical path (
physicaloptix.path) --OpticalPath, named plane-checked stages folded once, with static taps for free instrumented propagation. - The speckle layer --
SpeckleProcess/AnalyticSpeckleField, the linear speckle generator (E_nom, G) behind optixstuff'sAbstractSpeckleField. - Interop (
physicaloptix.interop) --PathCoronagraph, the optixstuffAbstractCoronagraphadapter: cached-Lyot image interface and scalar curves (throughput, core area/intensity, occulter transmission) derived from a build-time separation sweep.
Ecosystem position
flowchart TB
optix["<b>optixstuff</b><br/>Telescope · Coronagraph · Detector · OpticalPath"]
physopt["<b>physicaloptix</b><br/>Owned propagation core / diffraction<br/>OpticalPath · PathCoronagraph"]
yippy["<b>yippy</b><br/>Sampled-YIP PSF interpolation"]
corono["<b>coronagraphoto</b><br/>2D image simulation"]
jaxedith["<b>jaxEDITH</b><br/>Exposure-time / yield"]
optix --> physopt
optix --> yippy
physopt -- AbstractCoronagraph --> corono
physopt -- AbstractCoronagraph --> jaxedith
yippy -- AbstractCoronagraph --> corono
Installation
pip install physicaloptix
Status
Early development. The owned core propagates a full apodized vortex
coronagraph chain (see tests/validation/), and PathCoronagraph serves it
through the optixstuff interface with derived performance curves. The optical
model is scalar; the chain propagates broadband on a fixed angular grid, and
the yield-input-package emitter freezes it to tables.
Verification and validation
The propagation core is verified against closed-form physics in tests that
run everywhere (the Airy pattern absolutely, the Mawet ideal-null theorem at
the 1e-11 contrast regime, Talbot and Gaussian-beam laws, gradient
correctness against finite differences) and validated against the HWO
Coronagraph Design Survey EAC-1 reference to a 0.2 percent on-axis null
agreement at 3e-11 contrast. The evidence, tolerances, and how to reproduce
them are documented on the
validation page.
The deep-contrast path requires float64 (jax_enable_x64).
Metadata
Release files for physicaloptix 2.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| physicaloptix-2.2.0.tar.gz | 196.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| physicaloptix-2.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 411.8 kB
Release files / physicaloptix-2.2.0.tar.gz
| Download URL | physicaloptix-2.2.0.tar.gz |
|---|---|
| Size | 196.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
609a411dccbfd888d920045b37ffb01f22c25d3277625b21b5589b396fd2c6a5
|
|
BLAKE2b-256 checksum How to use checksums |
c0e1093aa0d5b9550c1702900060b72fc57a12f74932e4176f16422836af7064
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / physicaloptix-2.2.0-py3-none-any.whl
| Download URL | physicaloptix-2.2.0-py3-none-any.whl |
|---|---|
| Size | 215.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a7be98debf5054bf5a5b31a419b2b7f7137c84a1efc062616ce7a16f95a3d8d9
|
|
BLAKE2b-256 checksum How to use checksums |
aab9b4a82dd72d3d233f29b4df81c88945de3e46fa54cb553856ce08ce246bb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency log