All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add
dataframe_to_live_points
function tonessai.livepoint
for converting from apandas.DataFrame
to live points. - Add
fallback_reparameterisation
toFlowProposal
. This allows the user to specify which reparameterisation to use for parameters that are not included in the reparameterisations dictionary. Default behaviour remains unchanged (defaults to no reparameterisation). - Add
rolling_mean
tonessai.utils.stats
. - Add
nessai.flows.utils.create_linear_transform
as a common function for creating linear transforms in the flows. - Add
nessai.flows.transforms.LULinear
to address a bug in nflows that has not been patched and prevents the use of CUDA withLULinear
. - Add
calibration_example.py
to the gravitational wave examples. - Add
defaults
keyword argument tonessai.reparameterisations.get_reparameterisation
for overriding the dictionary of default reparameterisations. - Add explicit tests for
nessai.flowsampler
- Add more tests for
nessai.reparameterisations
- Add more tests for
nessai.gw
- Add support for vectorised likelihoods and automatically detect if the likelihood is vectorised.
- Add support for passing a user-defined pool instead of using
n_pool
.
NestedSampler.plot_state
now includes the log-prior volume in one of the subplots and the rolling mean of the gradient (|dlogL/dLogX|) is plotted instead of the gradient directly.- The figure produced by
NestedSampler.plot_state
now includes a legend for the different vertical lines that can appear in the subplots. RealNVP
andNeuralSplineFlow
now usenessai.flows.utils.create_linear_transform
.- The figure produced by
NestedSampler.plot_state
now includes a legend for the different vertical lines that can appear in the subplots. - Updated all of the examples to reflect the new defaults.
- Rework
nessai.gw.reparameterisations.get_gw_reparameterisation
to useget_reparameterisation
with thedefaults
keyword argument. - Switch to
os.path.join
for joining paths innessai.flowsampler
. - Context is now passed to the transform in
nessai.flows.base.NFlow
enabling the use of flows with conditional transforms. - Add
context_features
to RealNVP and NeuralSplineFlows - Rework
MaskedAutoregressiveFlow
to addcontext_features
- Rework how likelihood parallelisation is handled. The model now contains the pool instead of the sampler and proposals.
- Update
parallelisation_example.py
to show use ofn_pool
andpool
for parallelisation. - Simplify how the normalising flow is reset in
FlowModel
andNestedSampler
.
- Fixed a bug in
RescaleToBounds
when usingpre_rescaling
without boundary inversion.
- Removed
legacy_gw_example.py
- Removed
keep_samples
fromFlowProposal
.
0.4.0 - 2021-11-23
- Add a constant volume mode to
FlowProposal
. In this mode the radius of the latent contour is fixed to the q'th quantile, which by default is0.95
. (#125) - Add a check for
resume_file
whenresume=True
. (#126) - Change default logging level to
WARNING
. (#126) - Add
angle-cosine
reparameterisation. (#126) - Added an explicit check for one-dimensional models that raises a custom exception
OneDimensionalModelError
. (#121) RealNVP
andNeuralSplineFlow
now raise an error iffeatures<=1
. (#121)- Add option in
nessai.reparameterisations.Angle
to setscale=None
, the scale is then set as2 * pi / angle_prior_range
. (#127) - Add
'periodic'
reparameterisation that usesscale=None
innessai.reparameterisations.Angle
. (#127) - Add the
use_default_reparameterisations
option toFlowProposal
to allow the use of the default reparameterisations inGWFlowProposal
without specifying any reparameterisations. (#129) - Add
chi_1
,chi_2
andtime_jitter
to known parameters inGWFlowProposal
with corresponding defaults. (#130)
- Reparameterisation
angle-sine
is now an alias forRescaledToBounds
instead ofAngle
with specific keyword arguments. (#126) maximum_uninformed=None
now defaults to 2 timesnlive
instead ofnp.inf
. (#126)nlive=2000
by default. (#126)- Default
batch_size
is now 1000. (#126) - Default
n_neurons
is now 2 times the dimensions of the normalising flow. (#126) - Default mode for
FlowProposal
isconstant_volume_mode=True
. (#126) - Proposal plots are now disabled by default. (#126)
cooldown
now defaults to200
to reflect the change innlive
. (#126)- Default optimiser is now
adamw
. (#126) - Rework
AugmentedFlowProposal
to work with the new defaults. (#126) Model.names
andModel.bounds
are now properties by default and their setters include checks to verify the values provided are valid and raise errors if not. (#121)- Logger now has propagation enabled by default. (#128)
FlowProposal.configure_reparameterisations
can now handle an input ofNone
. In this case only the default reparameterisations will be added. (#129)- Changed default reparameterisation for gravitational-wave parameters
a_1
anda_2
to'default'
. (#130)
- Fixed a bug where the parameters list passed to
Reparameterisation
(or its child classes) wasn't being copied and changes made within the reparameterisation would change the original list. (#127)
keep_samples
inFlowProposal
will be removed in the next minor release.
0.3.3 - 2021-11-04
- Fixed a bug in
nessai.livepoint.dict_to_live_points
when passing a dictionary where the entries contained floats instead of objects with a length raised an error. (#119)
0.3.2 - 2021-10-12
- Added more checks to the init method for
nessai.reparameterisations.AnglePair
to catch invalid combinations of priors and/or angle conventions. Now supports RA or azimuth defined on [-pi, pi] in addition to [0, 2pi]. (#114) - Add a check in
nessai.flowmodel.update_config
for'noise_scale'
, aValueError
is now raised ifnoise_scale
is not a float or'adaptive'
. (#115) - Add
codespell
to the pre-commit checks. (#116)
- The dtype for tensors passed to the flow is now set using
torch.get_default_dtype()
rather than always usingfloat32
. (#108) - Incorrect values for
mask
innessai.flows.realnvp.RealNVP
now raiseValueError
and improved the error messages returned by all the exceptions in the class. (#109) - Change scale of y-axis of the log-prior volume vs. log-likelihood plot from
symlog
to the default linear axis. (#110) nessai.plot.plot_trace
now includes additional parameters such aslogL
andlogP
default, previously the last two parameters (assumed to belogL
andlogP
were always excluded). (#111)
- Fixed an issue where
nessai.reparameterisations.AnglePair
would silently break when the prior range for RA or azimuth was set to a range that wasn't [0, 2pi]. It now correctly handles both [0, 2pi] and [-pi, pi] and raises an error for any other ranges. (#114) - Fixed various spelling mistakes throughtout the source code and documentation. (#116)
0.3.1 Minor improvements and bug fixes - 2021-08-23
This release has a few minor improvements and bug fixes. It also explicitly adds support for python 3.9, which worked previously but was not tested.
- Add
in_bounds
,parameter_in_bounds
andsample_parameter
methods tonessai.model.Model
. (#90) - Implemented the option to specify the cosmology in
nessai.gw.utils.ComovingDistanceConverter
usingastropy
. Previously changing the value had no effect of the transformation. (#91) - Improve test coverage for
nessai.proposal.base.Proposal
(#92) - Add
'logit'
to the default reparameterisations (#98) - Add example using the Rosenbrock likelihood in two dimensions (#99)
- Add a
colours
argument tonessai.plot.plot_1d_comparison
(#102) - Explicitly support Python 3.9 (Added Python 3.9 to unit tests) (#103)
nessai.gw.utils.DistanceConverter
now inherits fromabc.ABC
andto_uniform_parameter
andfrom_uniform_parameter
are both abstract methods. (#91)nessai.proposal.base.Proposal
now inherits fromabc.ABC
anddraw
is an abstract method. (#92)nessai.proposal.rejection.RejectionProposal
now inherits fromnessai.proposal.analytic.AnalyticProposal
. Functionality is the same but the code will be easier to maintain since this removes several methods that were identical. (#93)noise_scale='adaptive'
option inFlowModel
now correctly uses a standard deviation of 0.2 times the mean nearest neighbour separation as described in Moss 2019. Note that this feature is disabled by default, so this does not change the default behaviour. (#95)- Refactor
nessai.utils
into a submodule. (#96) - Change behaviour of
determine_rescaled_bounds
so thatrescale_bounds
is ignored wheninversion=True
. This matches the behaviour inRescaledToBounds
where when boundary inversion is enabled, values are rescaled to [0, 1] and then if no inversion if applied, changed to [-1, 1]. (#96) - Tweaked
detect_edges
so thatboth
is returned in cases where the lower and upper regions contain zero probability. (#96) NestedSampler
no longer checks capitalisation offlow_class
when determining which proposal class to use. E.g.'FlowProposal'
and'flowproposal'
are now both valid values. (#100)NestedSampler.configure_flow_proposal
now raisesValueError
instead ofRuntimeError
ifflow_class
is an invalid string. (#100)- Raise a
ValueError
ifnessai.plot.plot_1d_comparison
is called with a labels list and the length does not match the number of sets of live points being compared. (#102) nessai.flow.base.BaseFlow
now also inherits fromabc.ABC
and methods that should be defined by the user are abstract methods. (#104)- Changed default to
fuzz=1e-12
innessai.utils.rescaling.logit
andnessai.utils.rescaling.sigmoid
and improved stability. (#105)
- Fixed a typo in
nessai.gw.utils.NullDistanceConverter.from_uniform_parameter
that broke the method. (#91) - Fixed a bug in
nessai.reparameterisations.RescaleToBounds
when usingoffset=True
andpre_rescaling
where the prime prior bounds were incorrectly set. (#97) - Fixed a bug that prevented disabling periodic checkpointing. (#101)
- Fixed a bug when calling
nessai.plot.plot_1d_comparison
with live points that contain a field with only infinite values. (#102) - Fixed the log Jacobian determinant for
nessai.utils.rescaling.logit
andnessai.utils.rescaling.sigmoid
which previously did not include the Jacobian for the fuzz when it was used. (#105)
0.3.0 Testing, testing and more testing - 2021-07-05
This release contains a large number of changes related to bugs and issues that were discovered when writing more tests for nessai
.
It also adds a number of feature and examples.
Note: Runs produced with previous releases are incompatible with this release and cannot be resumed with out manual intervention.
- Added code to catch errors when calling
plot_live_points
whengwpy
is installed. - Added tests for
_NSIntegralState
. - Add code coverage upload
- Added an example of using unbounded priors,
bilby_unbounded_priors.py
- Added
Rescale
reparameterisation that just rescales by a constant and does not require prior bounds. Also add tests for this reparameterisation. - Added more GW examples.
- Added tests for
AugmentedFlowProposal
. - Added an example using
AugmentedFlowProposal
. - Added eggbox example.
- Added an error if calling
FlowProposal.rejection_sampling
withFlowProposal.truncate=True
butworst_q=None
. - Add option to train using dataloaders or directly with tensors. This is faster when using CUDA.
- Add options to train with different optimisers: Adam, AdamW, SGD
- Add tests for
NestedSampler
- Explicitly check prior bounds when using reparameterisations. This catches cases where infinite bounds are used and break some reparameterisations. (#82)
- Add error when calling
FlowProposal.populate
without initialising the proposal. - Add
NestedSampler.plot_insertion_indices
to allow for easier plotting of insertion indices. - Add
filename
keyword argument toNestedSampler.plot_trace
. - Added
batch_norm_within_layers
toNeuralSplineFlow
- Plotting logX vs logL now returns the figure is
filename=None
NestedSampler.plot_state
now has the keyword argumentfilename
and the figure is only saved if it is specified.- Changed name from
_NSintegralState
to_NSIntegralState
. nessai.model.Model
now inherits fromabc.ABC
andlog_prior
andlog_likelihood
are nowabstractmethods
. This prevents the class from being used without redefining those methods.- Updated
AumgentedFlowProposal
to work with current version ofFlowProposal
- Fix random seed unit tests.
- Improved
FlowProposal.reset
so that all attributes that are changed by callingdraw
are reset. - Move
_NSIntegralState
and some functions fromposterior.py
toevidence.py
NestedSampler.check_flow_model_reset
will now NOT reset the flow it has never been trained (i.eproposal.training_count==0
)- Moved all legacy gw functions to
nessai/gw/legacy.py
and removed them from the coverage report. - Minor improvements to
NestedSampler
- Better handling on NaNs in
NestedSampler.populate_live_points
- Minor improvements to plotting in
FlowProposal
and moved plotting to separate methods inFlowProposal
. - Switch to using
os.path.join
when joins paths. - Improved
FlowProposal.reset
- Renamed
FlexibleRealNVP
toRealNVP
, shouldn't affect most uses since the default way to specify a flow is via strings inconfigure_model
. - Renamed
nessai.flows.utils.setup_model
toconfigure_model
. - Renamed
nessai.flows.utils.CustomMLP
toMLP
- Changed default value for
tail_bound
inNeuralSplineFlow
to 5.
- Fixed a bug when plotting the state plot from a saved instance of the sampler where the sampling time was changed based on the current time.
- Fixed a bug when using
plot_trace
,plot_1d_comparison
orplot_live_points
with a single parameter - Total sampling time is now correctly displayed when producing a state plot from a saved sampler.
- Fixed a bug when using unbounded priors related to
Model.verify_model
- Fix inversion-split with
RescaleToBounds
- Fixed
AugmentedGWFlowProposal
. - Fixed a bug with
plot_live_points
when the hue parameter (c
) was constant. - Fixed a bug with the reparameterisation
Rescale
whenscale
was set to a negative number. - Fixed a bug where
scale
could not be changed inToCartesian
. - Fixed a error when specifying
NullReparameterisation
(!82) - Fix typo in
FlowProposal.set_poolsize_scale
whenacceptance=0
- Fixed unintended behaviour when
rescale_parameters
is a list andboundary_inversion=True
, where the code would try apply inversion to all parameters inModel.names
. - Fixed bug where
z
returned byFlowProposal.rejection_sampling
was incorrect when using truncation (which is not recommended). - Fix
prior_sampling
- Fixed minor typos in
nessai.proposal.flowproposal.py
- Remove "clip" option in
FlowProposal
, this was unused and untested.
0.2.4 - 2021-03-08
This release includes a number of bug fixes, changes to make the GWFlowProposal
consistent with LegacyGWFlowProposal
and a number of new unit tests to improve test coverage.
- Add poolsize to
AnalyticProposal
- Add a test for sampling with multiprocessing.
- Add a test for sampling with
AnalyticProposal
andRejectionProposal
. - Add a test for using the proposal methods with
n_pool
- Add tests for reparameterisations.
- Add a test for comparing
GWFlowProposal
andLegacyGWFlowProposal
.
- Changed prime priors in
LegacyGWFlowProposal
to not update. This improves efficiency. - Changes to the reparameterisations to the the proposal consistent with
LegacayGWFlowProposal
:- Use [-1, 1] when inversion is enabled but not applied
- Improved errors when reparameterisations are configured incorrectly.
- Fixed a bug with saving results when multiprocessing is enabled.
- Fixed a bug with
AnalyticProposal
introduced in the last release. - Fixed a bug with resuming when using certain reparameterisations.
0.2.3 - 2021-02-24
Add support for Python >= 3.6 and other minor changes and bug fixes
- Badges for DOI and PyPI versions.
- Add support for Python >= 3.6.
- Improve doc-strings and tweak settings for doc-strings in the documentation.
- Add tests for plotting functions.
- Added sections to README and docs on citing
nessai
.
- Remove
:=
operator to enable support for Python >= 3.6. - Plotting functions are now more consistent and all return the figure if
filename=None
.
- Fixed bug when plotting non-structured arrays with
plot_1d_comparison
and specifyingparameters
. - Fixed bug where
plot_indices
failed if using an empty array but worked with an empty list.
- Remove
plot_posterior
because functionality is include inplot_live_points
. - Remove
plot_likelihood_evaluations
because information is already contained in the state plot. - Remove
plot_acceptance
as it is only by augmented proposal which is subject to change. - Remove
plot_flow
.
0.2.2 - 2021-02-19
This release was added to trigger Zenodo for producing a DOI.
- Docs badge
0.2.1 - 2021-02-18
Minor repository related fixes. Core code remains unchanged.
- PyPI workflow to automatically release package to PyPI
- Fixed issue with README not rendering of PyPi
0.2.0 - 2021-02-18
First public release.
- Complete documentation
- Use
setup.cfg
andpyproject.toml
for installing package reparemeterisations
submodule for more specific reparameterisationshalf_gaussian.py
example
- Change to use
main
instead ofmaster
- Default
GWFlowProposal
changed to usedreparameterisations
- Split
proposal.py
into various submodules - Minor updates to examples
max_threads
default changed to 1.
- Fix a bug where
maximum_uninformed
did not have the expected behaviour.
- Original
GWFlowProposal
method renamed toLegacyGWFlowProposal
. Will be removed in the next release.