This release brings a number of new features and enhancements. Users are encouraged to upgrade from older releases.
New Features
* `SlantedEdge` object for image simulation
* `deconv` method on the `Convolvable` class to perform Wiener-Hunt deconvolution
* convenience properties on `OpticalPhase` (`FringeZernike`, `Interferogram`, ...) and `Convolvable` objects
* * `shape,` `diameter_x,` `diameter_y`, and `diameter` on the former
* * `shape,` `support_x,` `support_y,` and `support` on the latter
* `std` property for the standard deviation in `OpticalPhase` instances and `strehl` for the approximate Strehl ratio for `Pupil` instances
* band-limited RMS evaluation on `Interferogram` objects based on a 2D PSD calculation
* analytical Fourier transform on the AiryDisk class for faster convolutions
* flexible linewidth in many plots, log scaling on 2D PSF plots
* `residual` parameter in the `fit` function from the `fringezernike` module
* azimuthally averaged MTF via the `azimuthal_average` method on the `MTF` class
* convolvables can now be saved with 16-bit precision
Under-the-hood changes and bug fixes
* Interferogram instances no longer cache PSD calculations internally
* The wavefunction associated with an optical pupil is now a property, `(Pupil).fcn` instead of an attribute. It will be calculated on an as-needed basis which eliminates synchronization problems when `Pupil` instances are modified.
* FZCache and MCache for Fringe Zernikes and masks now implement `__call__`, you can use `mcache(128, 'hexagon')` instead of `mcache.get_mask(128, 'hexagon')` and the equivalent for `zcache`.
* importing of zygo datx files is now more robust. Files from the NexView NX2 now import properly
* `Convolvable` is now exported at the top level
* `Convolvable.from_file` no longer errors. Users must now scale the data after importing on their own, e.g. `Convolvable.data /= 255` for an 8 bit per pixel file, or `/= 65535` for a 16-bit file
Remove features
* `bandreject_filter` has been removed on the `Interferogram` class; the implementation was not well done and the results of low quality.
* `MultispectralPSF` an `RGBPSF` have been dropped; they have been neglected for a significant amount of time. MultispectralPSF only differed from a PSF in the call to `__init__,` users can replicate this behavior independently.