September (v2023.9.18.4)
This release implements two major changes to PyAutoLens:
Nautilus:
For the past ~3 years, lens model fitting has used the nested sampling algorithm Dynesty.
Recently, a new nested sampler, Nautilus (https://nautilus-sampler.readthedocs.io/en/stable/), was released, which uses machine-learning based techniques to improve sampling.
Extensive testing of lens modeling with Nautilus has revealed that it:
- Speeds up the fitting of simple lens models by ~x2 - x3.
- Speeds up the fitting of complex lens models by ~x3 - x5+.
- Is more robust and reliable (e.g less likely to infer a local maxima, can fit more complex lens models).
- Controlled predominantly by just one parameter
n_live
, so is simpler to use thandynesty
. - Parallelization using Python
multiprocessing
is more efficient thandynesty
and now supports proper error handling.
Nautilus
is therefore now the default lens modeler, with all workspace examples updated accordingly.
NOTE: Nautilus
does not currently support on-the-fly output and to get the results of a lens model mid-fit a user can instead cancel the run (e.g. via Ctrl + C) and restart it, where the maximum likelihood model will be output.
Results Output
Result metadata was previously output as .pickle
files, which were not human readable and depended on project imports, hurting backwards compatibility.
All metadata is now output as human readable .json
files and dataset as .fits
files, making it a lot more straight forward for a user to interpret how data is stored internally within PyAutoLens:
Here is an example of the search.json
file:
All internal functionality (e.g. the sqlite database) has been updated to use these files.
All workspace documentation has been updated accordingly.
Other:
imaging/modeling/features
split to make linear light profiles and multi gaussian expansion more visible.- Improved HowToLens tutorial 5 on linear light profiles.
- Power law with multipole parameterization updated, now supports multipoles of any order (Jammy2211/PyAutoGalaxy#115).
- Update certain requirements (e.g. PyYAML) to mitigate installation issues (rhayes777/PyAutoConf#41).
- Lots of quality-of-life improvements thoughout the code bases.