- This is the first PyFstat release to officially support python 3.11.
- LALSuite is introducing an SFT specification and filename update
- see https://dcc.ligo.org/T040164-v2/public)
- This version of PyFstat is pinned to
lalsuite<=7.11
(orlalpulsar<6.0
) so that it is ensured to keep working with the old convention. - Next PyFstat release will adapt to the LALSuite changes.
- Added
get_official_sft_filename()
utility function to ease migration.
- Improvements to
injection_parameters
module with new priors logic (see documentation); old input style still supported for now but deprecated. Writer
: improved timestamps handling: support 1-column format (without nanoseconds), which has been the LALPulsar default for a while.- Changed
ComputeFstat.write_atoms_to_file()
method to use consistent%%
comment markers. - Fixed segfault in
get_semicoherent_single_IFO_twoFs()
with recent LALSuite (need to properly copy FstatAtomVector struct). - Fixed
TransientGridSearch
when not setting any actual transient parameters. - Added (h0,cosi)<->(aplus,across) functions to
utils.converting
. - Added
utils.atom
submodule with tools related to F-stat atoms. utils.get_sft_as_arrays()
now user-accessibleWriter
: warning about inferring parameters (innoiseSFTs is not None
case) downgraded to info message- improvements to documentation and test suite
- fixed finalizer setup for calling
ComputeFstat
and its children in context-manager mode - reverted "walrus operators" (
:=
) and use ofLiteral
typing checks to facilitatepython 3.7
backwards compatibility (not officially supported from release, but can be easily restored on branches / local clones) - lalsuite-from-source install instructions no longer included in README, now live on wiki
- fixed logging use in examples
- improved testing of tutorial notebooks
- refurbished logging system:
- on
import.pyfstat
, stdout logging at INFO level is activated unless there are already handlers attached to the root logger - recommended to further call
pyfstat.set_up_logger
and define an output log file, as demonstrated in our examples - see https://pyfstat.readthedocs.io/en/v1.18.0/pyfstat.html#module-pyfstat.logging for details
- removed the last global argparse options
--quite
and--verbose
, along with the remainders of thehelper_functions.set_up_command_line_arguments()
function. Please usepyfstat.set_up_logger
instead to determine verbosity level. - tests now by default print all >=WARNING messages even for passing cases and full >=INFO for failing cases
- improved handling of LALSuite executables through
run_commandline
- better stderr/stdout capture
- return is now either a
subprocess.CompletedProcess
object orNone
- default is now
return_output=False
log_level
argument removed (please usepyfstat.set_up_logger
instead)
- capture and handling of output from SWIG-wrapped LALSuite functions likely to be further improved in future versions
- on
- refactored
helper_functions
module intoutils
subpackage with multiple source files;- user can access all functions directly as
utils.some_function
without worrying about the level one further down - moved
matplotlib
setup into newutils.safe_X_less_plt()
- removed deprecated/unused helper functions
get_peak_values
get_comb_values
get_sft_array
- user can access all functions directly as
- can install with
NO_LALSUITE_FROM_PYPI
environment variable, e.g. to avoid duplication of dependencies from conda and pip (now used this way in recommendedpyfstat-dev.yml
) - removed
peakutils
dependency - optional
[dev]
set of dependencies now also includesdocs
dependencies - added
sphinx_autodoc_typehints
todocs
dependencies and updated pinned versions of other sphinx packages DetectorStates
: fixed passing plain lists as values of atimestamps
dict
- dropped python 3.7 support
- dropped dependency on
lalapps
and now requiringlalpulsar>=5.0.0
instead, where LALSuite executables now live (corresponding tolalsuite>=7.7
)- there is a
get_lal_exec()
helper function to still allow running on old installations where the executables live inlalapps
- there is a
- removed most of the old package-level hardcoded
argparse
options, this should reduce conflicts when users import it in their own caller scripts:--clean
to be given as an argument to supporting classes-N
to be given as class argumentnum_threads
to the one classFrequencyModulatedArtifactWriter
that supported it--setup-only
and--no-template-counting
to be given as class arguments to the (now deprecated)MCMCFollowUpSearch
--no-interactive
was not supported anywhere
- LaTeX no longer enabled for plotting by default
- removed
bashplotlib
dependency and SFT timestamps ASCII art - removed fallbacks in case
tqdm
is not available, which is a dependency anyway snr
class: fixed behaviour when instantiating with a dictionary of timestamps- removed old backwards compatibility code from
FrequencyModulatedArtifactWriter
- developers: updated pre-commit hooks
- include local versions of autocorr functions from
ptemcee
to restore compatibility withnumpy>=1.23.0
Writer
: remove deprecatedtimestampsFiles
option, please use the more generaltimestamps
instead- added
BtSG
option to transient searches (transient Bayes factor from PGM2011) pyTransientFstatMap
is now available viaimport pyfstat
- some refactoring of internal detection statistics functions
- use of
lalapps_tconvert
replaced by newgps_to_datestr_utc()
helper function (which usesXLALGPSToUTC
anddatetime
) - fix CUDA context detaching at garbage collection time for
ComputeFstat
andTransientGridSearch
classes- using
weakref
- should not require any caller code changes in standard use cases
- but if user wants to initiate more than one such object from one session/script,
these should be used in context manager style (
with ComputeFstat as
etc)
- using
- remove redundant complex entries from output of
tcw_fstat_map_funcs.reshape_FstatAtomsVector()
- streamline installation instructions for developers and remove single-use helper bash scripts
- pin
numpy<1.23.0
to work aroundptemcee
incompatibility pyfstat.__version__
now reported with the leadingv
stripped out (e.g. just1.15.0
)- added new method
compute_h0_from_snr2()
toSignalToNoiseRatio
class init_transient_fstat_map_features()
now is stricter about feature name strings- added tutorial notebooks to binder
- improved installation instructions
- fixed
phi0
argument name tophi
inSignalToNoiseRatio.compute_snr2()
function to match conventions elsewhere - fixed syntax error in
Writer
when both timestamps and detector names are given - added new set of intro notebooks
in
examples/tutorials
- new dependencies:
attr
(core),flaky
(for tests only) - removed deprecated option to use
$LALPULSAR_DATADIR
for ephemerides - added
SignalToNoiseRatio
class (equivalent tolalapps_PredictFstat
) andDetectorStates
helper class in newsnr
module InjectionParametersGenerator
and its children moved to separate moduleinjection_parameters
Writer
(and its children) now acceptstimestamps
as a list, dict over detectors, or comma-separated string of files per detector (timestampsFiles
input is now deprecated)- some simplifications to
Writer
internal methods - for developers:
- test suite now split up by module,
full suite can now be run with
pytest tests/
- flaky MCMC tests will be rerun 3 times if needed
- now enforcing
isort
import ordering style and some other simple pre-commit-hook rules
- test suite now split up by module,
full suite can now be run with
- add new helper function
get_sft_as_arrays()
- deprecate
get_sft_array()
- the new one supports multiple IFOs and returns full complex amplitude info
- note that the order of returned values is different
- now tested for python 3.10
- simpler handling of ephemerides files:
- lalsuite >= 7.2.0 (lalpulsar >= 3.1.1) now includes a sufficient minimal set by default and has gotten much better at resolving default paths
- no manual setup should be required any more for
pip
installs - remove download script
- deprecate using
$LALPULSAR_DATADIR
- bump LALSuite version requirements correspondingly
Writer
classes: fix bug with spurious expected filename mismatch if givennoiseSFTs
including multiple frequency-segmented SFTsGridSearch
now hasgenerate_loudest()
method like MCMC classes- fix some deprecation warnings
- add backwards compatibility workaround
for lalapps 7.3.0 in
FrequencyModulatedArtifactWriter
to fix running with conda dependencies
- drop python 3.6 support
- require LALSuite >= 7.1
- no longer pinning numpy
- resolved various deprecation warnings
- follow updated "narrowband" SFT file name convention from lalapps_splitSFTs
- new
timestampsFiles
option forWriter
classes - new
allowedMismatchFromSFTLength
option for core and MCMC classes - new
singleFstats
option forComputeFstat
and derived classes - new
randSeed
option forComputeFstat
and derived classes for reproducible on-the-fly Gaussian noise generation - fix data-from-disk reuse in
LineWriter
and some internal cleanup toWriter
and derived classes in general
- new reference paper for PyFstat: https://doi.org/10.21105/joss.03000
- all requirements are now handled through setup.py,
e.g. instead of
pip install -r requirements.txt
and manually installing optional dependencies, just usepip install pyfstat[optionalpackage]
- improved formatting of MCMC corner plots
- extended cumulative 2F plots for the transient case
- ComputeFstat.get_semicoherent_twoF() now returns its value
- minor internal cleanups
- test coverage improvements
- PyPI source tarball for v1.11.4 didn't include files needed to build conda package
- improved codecov setup
- no actual changes to package
- python 3.9 now supported
- improvements to documentation and examples
- for developers: flake8-docstrings and flake8-executable rules now enforced
- added a codemeta.json file
- started tracking test coverage with codecov
- added LineWriter class for simulating unmodulated noise artifacts
- pinned numpy dependency to <1.20 to fix incompatibility with lalsuite 6.81
- updated ephemerides instructions and citation requests in README
- fixed FrequencyModulatedArtifactWriter class
- matplotlib will no longer be automatically forced to
agg
, but only ifenv["DISPLAY"]
is not set - improved default scaling of MCMC corner plots
- fixed missing unit for
tp
binary parameter in MCMC default plot labels
- LALSuite >= 6.80 now required
- simplified calls to F-stat prediction
- Writer:
- internal cleanup of sftfilenames vs sftfilepath
- SFTs are validated at end of
run_makefakedata()
- core and search classes: improved and fixed non-standard detection statistics
- fixed basic twoFX and BSGL computation logic for transient and semicoherent cases, generalized to Ndet>2
- reorganised methods for these computations
- additional results are stored as class attributes
- for transients, the detection statistic is now called explicitly
maxTwoF
- grid classes now initiate their
.search
object at instantiation instead of at firstrun()
call
- bugfix for
MCMCSearch.plot_prior_posterior()
- documentation now available from https://pyfstat.readthedocs.io
- and examples can be run on https://mybinder.org/v2/gh/PyFstat/PyFstat/master
- still being improved
- added
gridcorner
module for plotting GridSearch results - removed the specialist grid-based classes which were deprecated in 1.9.0
- internal changes to search classes
- should ideally not change anything for standard CW use cases
- but fix some corner cases and make for more robustness
- made tstart,tend optional in
get_fullycoherent_twoF()
- adapted most high-level search classes to this change
- grid searches now internally use named-column ndarrays
- some cleanup to keys storage in MCMC classes
- changed
helper_functions.get_doppler_params_output_format()
to return dict - fixed sorting of output fmt specifiers for both MCMC and grid classes
- changed
GridSearch.inititate_search_object()
to internal method_initiate_search_object()
- line-robust statistics are now always stored and returned as log10BSGL (for consistency with LALSuite)
- made various class methods private that had no obvious end-user use case
MCMCSearch.run()
: initiate search object before checking for old dataMCMCGlitchSearch.plot_cumulative_max()
: add savefig option (defaults to false)GridSearch.plot_2D()
: renamendsave
option tosavefig
for consistency with other plotting functions- removed unused
ComputeFstat.get_full_CFSv2_output()
- removed unused helper functions:
compute_P_twoFstarcheck()
compute_pstar()
twoFDMoffThreshold()
- new example
other_examples/PyFstat_example_spectrogram.py
- some improvements to tests and examples
- KNOWN ISSUES: implementation of line-robust statistic BSGL will need to be overhauled
- new class
InjectionParametersGenerator
- draws dicts of parameters from arbitrary priors
- can then be directly passed e.g. to Writer as
**params
- and derived
AllSkyInjectionParametersGenerator
- deprecate various grid-based specialist classes:
- these were all more or less unmaintained since a long time
- SliceGridSearch
- GridUniformPriorSearch
- SlidingWindow
- FrequencySlidingWindow
- EarthTest
- DMoff_NO_SPIN
- will be removed in next version unless users speak up
- these were all more or less unmaintained since a long time
- big overhaul of cumulative twoF calculations and plotting
- Writer: fix expected sftfilepattern in multi-IFO and custom-TSFT cases
- fixed internal consistency of parameter names:
- Freq->F0 and phi0->phi for all PyFstat classes/functions
- consistent conversion to lalappas arguments
- fixed parsing of injectSqrtSX and assumeSqrtSX arguments
- helper_functions.predict_fstat() no longer takes
**kwargs
- new instructions and helpful scripts for setting up developer environments (venv or conda)
- various improvements to test suite
- GridSearch: will now always include the end point in each 1D parameter points array
- restored MCMCSearch.plot_chainconsumer() to a workable state
- optional dependency checked and documented more cleanly
- the injections parameter option for this is actually called "truth" not "truths
- fixed checks of injection parameter keys for other MCMC plotting functions
- improved GridSearch.check_old_data_is_okay_to_use()
- minor logging improvements for Writer, GridSearch, TransientGridSearch
- new binary_mcmc_vs_grid example
- minor improvements to tests and other examples
- LALSuite 6.76 now required
- predict_fstat() helper function made more flexible
- Writer: fixed check_cached_data_okay_to_use() for multiple IFOs
- MCMCSearch and derived classes now store sampler as an attribute
- fixes to MCMC plotting
- proper scaling of injection parameters in walker plots
- proper display of prior (not logprior) in prior_posterior comparisons
- consistently close figure objects after saving
- all classes now announce their creation to the logger
- flake8 compliance
- code style now complying to stricter black 20.8b standards
- improvements to examples
- Writer: fix binary tp handling and clean up injection parameter parsing
- MCMCSearch plotting improvements:
- add injection parameters through "truths" kwarg
- F->2F fixes
- fix failures for single-parameter posteriors
- removed unused Bunch class
- refactored some core functions into BaseSearchClass methods or moved to helper_functions
- removed deprecated options/functions:
- ComputeFstat option estimate_covering_band
- Writer options minStartTime, maxStartTime
- MCMCSearch.get_median_stds()
- new internal class SearchForSignalWithJump which SemiCoherentGlitchSearch and GlitchWriter inherit from
- Writer classes, including several backwards-incompatbile changes:
- removed lots of default values where there isn't really a logical "default"; e.g. detectors and signal parameters now always need to be explicitly set.
- more flexible setup getting info from noiseSFTs (tstart, duration now optional and used as constraints)
- can now auto-estimate SFT frequency band if not set by user (assuming a single-template search)
- added manual ephemerides options
- removed add_noise option, same behaviour can still be controlled through options sqrtSX or noiseSFTs
- no .cff file generated any more if h0==0 (no signal)
- verbose option for make_cff() and make_data() methods
- clearer error messages in many cases
- ComputeFstat, SemiCoherentSearch and derived classes:
- fixed internal maxStartTime default if not set by user
- by that, fixed the SemiCoherentSearch segments auto-setup
- added Tsft as user option
- clearer error and logging messages
- improved helper_functions.get_sft_array()
- extended, cleaned up and further modularised test suite
- updated examples to changes in Writer and other classes
- fixed semi-coherent search bug introduced in 1.5.0:
- last segment was always skipped due to off-by-one error in segment boundary calculation.
- MCMC searches:
- extended print_summary() with new get_summary_stats() helper and deprecated get_median_stds()
- fixes to some of the more exotic prior types.
- Extended MCMC test coverage.
- The only change in this release is an updated README to point to the new 1.5+ Zenodo record.
- new default coverage band behaviour for all search classes:
- estimate from search ranges (GridSearch) or prior (MCMCSearch) unless minCoverFreq, maxCoverFreq set
- negative values can be used to reproduce old default of setting from SFT width
- explicit option estimate_covering_band deprecated
- semicoherent searches:
- sped up by only calling ComputeTransientFstatMap once per point
- BSGL now computed from summed F-stats, not for each segment
- per-segment results now stored in attribute twoF_per_segment instead of det_stat_per_segment
- MCMC searches: save twoF for each sample to .dat file
- Writer:
- options minStartTime, maxStartTime deprecated
- always use tstart, duration for actual data range
- and use transientStartTime, transientTau for transients
- transient-on-GPU output file writing fix
- examples:
- all output now goes to a directory "PyFstat_example_data"
- added mcmc_vs_grid_simple_example
- small fixes to search classes:
- get_max_twoF() fixed for TransientGridSearch
- fix column header format for per-Doppler-point transient Fmn output files
- fixed regexp deprecation warning
- throw warning if using MCMCSearch.generate_loudest() called for transients
- Writer: fix SFT counting for non-contiguous or overlapping SFTs
- now fully python3.8 compatible
- now using versioneer for versioning
- require lalsuite>=6.72
- added docker images, provided through github packages
- Writer class:
- new options randSeed, noiseSFTs and windowing
- change default sqrtSX from 1 to 0
- improved support for sources in binaries
- search classes:
- improved support for sources in binaries
- additional file outputs for MCMC (including full posterior samples)
- improved output file headers with version and options strings
- improved MCMC walker plotting
- implemented CFS feature injectSqrtSX
- manual ephemerides option
- new options estimate_covering_band and RngMedWindow
- extended get_covering_band() to deal with fkdot bands
- improved GridSearch logic to reuse (or not) old results
- removed injection_helper_functions module
- fixed placement of temporary output files
- improved error handling for lal programs
- added 1to1 test against CFSv2
- reorganised and improved examples
- various minor bug fixes and code cleanup
- python3 migration
- enforce black style checker
- smarter ephemerides finding
- pycuda as optional dependency
- improved test suite
- improved logic in Writer class
- fixes to ComputeFstat flags handling
- various minor bug fixes
- reorganised examples
- timing of transient F-stat map function
- see git commit history