🌟 Matthijs Mars (@MatthijsMars) made their first
contribution by expanding aperture transformations to support all
BaseCoordTransform implementations
(#333).
🌟 Yinzi Xin (@yinzi-xin) made their first
contribution by adding independently sized aperture grids through
array_diameter, including tests
(#336).
Complex wavefronts:Wavefront now stores the complex electric-field phasor
directly, improving field arithmetic and avoiding undefined gradients when fields
cancel (#291,
#295).
Sampling-aware propagation: FFT and MFT propagation now track coordinate
sampling, support inverse propagation, and correct centring-dependent phase ramps.
Callable models: optical layers, detector layers, unified layers, and detectors
now share a consistent object(target) interface.
Expanded modelling toolkit: this release adds ABCD propagation, static telescope
apertures, cached Fourier bases, mask-design tools, and NaN-safe norms.
Wavefronts: added from_phasor(...), to_psf(), coordinate specifications,
configurable power or peak normalisation, angular units for tilt(...), and direct
complex-field arithmetic
(#288).
Coordinates: added Spec, PadSpec, and CoordSpec; expanded
pixel_coords(...) to support diameter, radius, pixel scale, and FFT-style
centring; and added generic angular-unit conversion helpers.
Propagation: added ABCD elements and ABCD-backed MFT, FFT, and ASM propagators,
plus coordinate sampling, inverse propagation, padding, cropping, and phase-ramp
utilities.
Layers: publicly exported OpticalLayer, added the cached FourierBasis OPD
layer, and added the no-op Lambda layer
(#301,
#315).
Apertures: added circular, segmented, sparse, HST-like, JWST-like, and
Euclid-like static aperture builders, with optional support masks for basis
normalisation.
Numerical utilities: added CLIMB-style soft_binarise(...), masked NaN-safe
norms, n-dimensional Gaussian kernels, cached Fourier helpers, and fill values for
resizing and padding
(#276,
#317).
Detectors and PSFs: added BaseDetector, made layered detectors callable,
expanded PSF arithmetic, and updated ApplyJitter with pixel-based sigma and
oversampled kernel generation
(#262).
Sources and spectra: added consistent return-mode and shape validation, 2D
spectral weights, inferred default weight shapes, and consistent PSF outputs.
Wavefront construction changed from Wavefront(npixels, diameter, wavelength) to
Wavefront(wavelength, npixels, diameter=...), with pixel_scale available as an
alternative to diameter.
Wavefront stores phasor; amplitude and phase are now derived properties and
should be modified through phasor, add_phase(...), or add_opd(...).
wavefront.coordinates became the method wavefront.coordinates().
Wavefront arithmetic now acts on complex fields. In particular, wavefront + opd
no longer applies OPD; use wavefront.add_opd(opd).
Custom layers should implement __call__(...), and optical systems now invoke layers
as callables rather than through .apply(...).
The Fourier-transform sign convention and propagation interfaces changed. FFT
propagation now produces corrected coordinates and phases after centring
(#300).
Removed ShiftedMFT, FarFieldFresnel, fresnel_MFT(...),
fresnel_phase_factors(...), and quadratic_phase(...).
Resolved-source convolution no longer supports return_wf=True, because image-plane
convolution cannot preserve coherent wavefront information.
Minimum requirements increased to Python 3.10 and Zodiax 0.5, with
abcdLux>=0.0.2 added as a runtime dependency.