Changelog#

4.0.1 - 2026-02-02#

Patch release for GWpy 4.0.x.

Full details.

Bug Fixes#

  • Fix erroneous development warning on online docs pages [gwpy/gwpy!2000]

  • Fix incorrect dependency on pytest outside of testing [gwpy/gwpy!2002]

4.0.0 - 2026-01-30#

GWpy 4.0.0 represents a major version release with significant improvements to I/O, logging, and signal processing, as well as modernization of dependencies, and several breaking changes. The source code has been significantly refactored to include type annotations throughout, and to improve code quality in order to improve maintainability.

The project online documentation has been restructured and relocated to https://gwpy.readthedocs.io/ and now includes a full API reference, and improved User Guide and Examples.

This release includes over 1,000 commits since the last release.

Full details

Breaking Changes#

  • Python 3.11 is now the minimum supported version, and support for Python 3.14 has been added.

  • The I/O system used by GWpy to support .read() and .write() methods in all classes has been completely rewritten to use the updated class-based Astropy I/O Registry (astropy.io.registry).

    Additionally, the builtin parallel I/O support has been reworked to use multiple threads, controlled via the parallel keyword argument, rather than multiple processes (via nproc).

    Existing custom I/O read/write function registrations may need to be updated to register to a new custom registry, or to use the new gwpy.io.registry.default_registry instance.

  • The TimeSeries (and friends) get method has been with its own registry of supported data sources, and will now try each data source in turn until data are found.

    A source keyword argument has been added to allow specifying one or more data sources to try, or to restrict to a single source.

    Some existing usage may need to be updated to work with this new API.

    See Data Discovery for more details.

  • GWpy now uses igwn-ligolw instead of python-ligo-lw for LIGO_LW XML file handling.

    The APIs should be the same, but the objects used internally and returned by functions in the gwpy.io.ligolw and gwpy.<subpackage>.io.ligolw submodules have changed to the igwn_ligolw equivalents.

  • The gwpy.signal.filter_design module has been significantly updated.

    The gwpy.signal.filter_design.bilinear_zpk function has been removed in favour of scipy.signal.bilinear_zpk, and the parse_filter function now has an updated API.

    All filter_design and filter application functions and methods throughout GWpy now default to digital filters in rad/s units, to match the behaviour of scipy.signal functions.

  • The gwpy.io.mp module was removed in favour of the multiprocessing utilities provided by the Python standard library, i.e., multiprocessing and concurrent.futures.

See Expired Deprecations below for more details of other breaking changes related to removed deprecated features.

Deprecations#

  • The gwpy.utils.decorators.deprecated_property decorator is now deprecated and will be removed in a future release. Use the warnings.deprecated decorator instead.

  • The TimeSeries.fetch, TimeSeries.fetch_open_data, and TimeSeries.find methods are all now simple wrappers around the unified TimeSeries.get method, with appropriate default values for the source keyword.

    These methods are not currently deprecated, but may be in a future release.

  • The url keyword argument in DataQualityDict.query_dqsegdb has been renamed to host to better reflect its purpose. The url keyword is now deprecated and will be removed in a future release.

  • The krb5ccname argument to gwpy.io.kerberos.kinit was renamed to ccache to better reflect its purpose. The krb5ccname keyword is now deprecated and will be removed in a future release.

  • The verbose argument to most GWpy functions and methods is now deprecated and will be removed in future releases. Use the gwpy.log module to configure logging instead.

  • The nproc argument to most .read() classmethods was renamed to parallel to better reflect its purpose. The nproc keyword is now deprecated and will be removed in a future release.

  • The gwpy.io.utils.gopen function is now deprecated and will be removed in a future release. Use the built-in gzip.open function instead.

  • The flag keyword argument to DataQualityFlag.read was renamed to name to better reflect its purpose. The flag keyword is now deprecated and will be removed in a future release.

  • The gwpy.signal.window.planck function is now deprecated and will be removed in a future release. Use a different windowing function instead.

  • The selection keyword to EventTable.read, EventTable.fetch and similar methods was renamed to where to better reflect its purpose. The selection keyword is now deprecated and will be removed in a future release.

Expired Deprecations#

  • The deprecated FrequencySeries.filterba method was removed, use FrequencySeries.filter instead.

  • The deprecated gwpy.io.cache.open_cache function was removed, use gwpy.io.cache.read_cache instead.

  • The deprecated gwpy.io.cache.file_name function was removed, use gwpy.io.utils.file_path instead.

  • The deprecated gwpy.io.cache.file_list function was removed, use gwpy.io.utils.file_list instead.

  • The deprecated c_sort keyword argument to gwpy.plot.Axes methods was removed, use sortbycolor instead.

  • The deprecated gwpy.signal.fft module was removed/

  • The deprecated EventTable.plot method was removed, use EventTable.scatter instead.

  • The deprecated gwpy.utils.misc.null_context function was removed, use contextlib.nullcontext instead.

  • The deprecated gwpy.utils.shell.which function was removed, use shutil.which instead.

  • The deprecated gwpy.utils.shell.call function was removed, use subprocess.run instead.

New Features#

  • A new gwpy-rds command line tool has been added for getting timeseries data and writing to a new ‘reduced data set’ (RDS). See Creating reduced datasets with GWpy for more details.

  • A new gwpy-tconvert command line tool has been added for converting to and from GPS times. See Converting GPS times with GWpy for more details.

  • A new gwpy.log module has been added for general support for log messages throughout GWpy and user code. This module supports automatic configuration of logging from the environment. See Logging with GWpy for more details.

    Almost all GWpy modules now use this logging module instead of internal print statements triggered by a verbose keyword.

  • All GWF writing operations now support the overwrite keyword (default is True) to support explicitly allowing or disabling overwriting existing files.

  • Support for reading TimeSeries data from an Arrakis data block was added. See the new TimeSeries.from_arrakis method for details.

  • All GWpy read() calls now support reading directly from URLs, including http{s}. Files are downloaded using Downloadable Data Management (astropy.utils.data).

  • All GWpy read() methods now support reading from Pelican URLs. These may required authorisation tokens, depending on the URL, and so support has been added for dynamically discovering SciTokens from the host system.

  • The gwpy.io.gwf module has been refactored to provide a generic API for reading and writing GWF files using multiple backends.

    Support has been added for using LALFrame as a backend for GWF I/O.

  • The default GWF I/O backend can noe be configured using the GWPY_FRAME_LIBRARY environment variable. See Configuring GWpy from the environment for more details.

Bug Fixes#

  • Fix masking of GWOSC catalog data in Table.fetch_open_data [gwpy/gwpy!1854]

Other Changes#

3.0.14 - 2026-01-16#

Patch release.

Full details

Bug Fixes#

Other Changes#

3.0.13 - 2025-07-02#

Patch release.

Full details

Bug Fixes#

Other Changes#

3.0.12 - 2025-02-06#

Patch release.

Full details

API Changes#

3.0.11 - 2025-01-14#

This release fixes a few bugs and solves compatibility issues with the latest release of Matplotlib.

Full details

API Changes#

Bug Fixes#

Other Changes#

Changes:

3.0.10 - 2024-08-30#

This release fixes a few bugs and solves compatibility issues with the latest release of NumPy.

Full details

API Changes#

Bug Fixes#

Other Changes#

3.0.9 - 2024-07-13#

Patch release.

This release fixes a few bugs and resolves compatibility issues with the latest releases of NumPy and SciPy.

Full details

Bug Fixes#

Other Changes#

Changes:

3.0.8 - 2024-01-12#

Patch release.

Full details

Bug Fixes#

Other Changes#

3.0.7 - 2023-10-05#

Build fix release.

The distributions for GWpy 3.0.6 were corrupted, so 3.0.7 replaces that release.

There are no code changes in 3.0.7 relative to 3.0.6

3.0.6 - 2023-10-05#

Patch release.

Full details

Bug Fixes#

Other Changes#

3.0.5 - 2023-06-02#

Patch release.

Full details

Bug Fixes#

Other Changes#

  • Update all GWOSC URLs to gwosc.org [gwpy/gwpy!1613]

  • Resample time series for coherence calculation when sampling rates differ [gwpy/gwpy!1611]

  • Update LatexInlineDimensional unit formatter for Astropy 5.3 [gwpy/gwpy!1622]

  • Document the copy keyword for TimeSeriesBaseDict.crop [gwpy/gwpy!1617]

  • Add H0 and L0 to dynamic_scaled exclusion list [gwpy/gwpy!1628]

3.0.4 - 2023-04-12#

Bug fix release.

Full details

Bug Fixes#

3.0.3 - 2023-04-09#

Bug fix release.

Full details

Bug Fixes#

Other Changes#

3.0.2 - 2022-11-24#

Full details

Bug Fixes#

  • Fix reading ILWD chars from LIGO_LW XML with python-ligo-lw [gwpy/gwpy!1570]

Other Changes#

3.0.1 - 2022-11-08#

Bug-fix release for 3.0.x.

Full details

Bug Fixes#

Other Changes#

3.0.0 - 2022-10-04#

Major feature release.

Full details

Deprecations#

  • gwpy.testing.utils.skip_missing_dependency is now deprecated and will be removed in a future release [gwpy/gwpy!1531]

Expired Deprecations#

New Features#

API Changes#

Other Changes#

A number of bugs were fixed, and compatibility improved with advanced versions of the requirements.

2.1.5 - 2022-08-01#

Patch release for GWpy 2.1.x.

Full details

Bug Fixes#

Other Changes#

2.1.4 - 2022-06-27#

Full details

Bug Fixes#

Other Changes#

2.1.3 - 2021-12-17#

Patch release for GWpy 2.1.x.

Full details

Bug Fixes#

2.1.2 - 2021-11-25#

Patch release for GWpy 2.1.x.

Full details

Deprecations#

Bug Fixes#

  • writing a TimeSeries with no name to GWF now has consistent behaviour across all GWF APIs [gwpy/gwpy!1425]

  • fixed compatibility with Astropy 5.0 [gwpy/gwpy!1435]

2.1.1 - 2021-10-18#

Patch release.

Full details

Deprecations#

API Changes#

  • a strict keyword was added to gwpy.io.cache.sieve() [gwpy/gwpy!1417]

Bug Fixes#

  • Series.crop() can now handle irregular indices (thanks @mattpitkin!) [gwpy/gwpy!1414]

  • TimeSeries.read no longer checks the tRange of an FrProcData when reading GWF using FrameCPP [gwpy/gwpy!1420]

2.1.0 - 2021-08-30#

Full details

Deprecations#

  • the gwpy.testing.utils.TemporaryFile context manager is now deprecated [gwpy/gwpy!1353]

  • gwpy.astro.inspiral_range function renamed to sensemon_range [gwpy/gwpy!1293]

New Features#

  • ROOT I/O now uses uproot as the backend [gwpy/gwpy!1263, #1309]

  • pathlib.Path objects are now supported everywhere file names are passed around (hopefully) [gwpy/gwpy!1362, #1380]

  • gwpy.signal.filter_design.notch now supports an output keyword [gwpy/gwpy!1347]

  • gwpy-plot qtransform now supports FFT options on the command-line [gwpy/gwpy!1330]

  • new --average-method command-line option for gwpy-plot [gwpy/gwpy!1329]

  • TimeSeries.rayleigh_spectrum now supports a window keyword [gwpy/gwpy!1285]

API Changes#

  • passing a channel name is now optional when reading files in the hdf5.snax format [gwpy/gwpy!1275]

  • the default spectral averaging method is now ‘median’ (was ‘mean’) [gwpy/gwpy!1282]