Metadata-Version: 2.4
Name: gwexpy
Version: 0.1.3
Summary: A comprehensive Python package for Gravitational Wave experimental data analysis, extending GWpy with strict unit handling and advanced spectral methods.
Author: Tatsuki Washimi
License: MIT
Project-URL: Homepage, https://github.com/tatsuki-washimi/gwexpy
Project-URL: Repository, https://github.com/tatsuki-washimi/gwexpy
Project-URL: Documentation, https://tatsuki-washimi.github.io/gwexpy/
Project-URL: Changelog, https://github.com/tatsuki-washimi/gwexpy/blob/main/CHANGELOG.md
Keywords: gravitational-waves,gwpy,signal-processing,time-series,spectral-analysis,physics,astronomy
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Topic :: Scientific/Engineering :: Astronomy
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: numpy<3.0.0,>=1.23.2
Requires-Dist: scipy>=1.10.0
Requires-Dist: astropy>=5.0
Requires-Dist: gwpy<5.0.0,>=4.0.0
Requires-Dist: pandas>=1.5.0
Requires-Dist: matplotlib>=3.5.0
Requires-Dist: typing_extensions
Requires-Dist: bottleneck
Requires-Dist: h5py
Requires-Dist: igwn-segments
Requires-Dist: ligotimegps
Requires-Dist: gpstime
Provides-Extra: analysis
Requires-Dist: scikit-learn; extra == "analysis"
Requires-Dist: statsmodels; extra == "analysis"
Requires-Dist: pmdarima; extra == "analysis"
Requires-Dist: dcor; extra == "analysis"
Requires-Dist: hurst; extra == "analysis"
Requires-Dist: hurst-exponent; extra == "analysis"
Requires-Dist: exp-hurst; extra == "analysis"
Requires-Dist: EMD-signal; extra == "analysis"
Requires-Dist: PyWavelets; extra == "analysis"
Provides-Extra: fitting
Requires-Dist: iminuit; extra == "fitting"
Requires-Dist: emcee; extra == "fitting"
Requires-Dist: corner; extra == "fitting"
Provides-Extra: control
Requires-Dist: control; extra == "control"
Provides-Extra: seismic
Requires-Dist: obspy; extra == "seismic"
Requires-Dist: mth5; extra == "seismic"
Requires-Dist: mtpy; extra == "seismic"
Requires-Dist: mt_metadata; extra == "seismic"
Provides-Extra: gw
Requires-Dist: lalsuite; extra == "gw"
Requires-Dist: gwdatafind; extra == "gw"
Requires-Dist: gwosc; extra == "gw"
Requires-Dist: dqsegdb2; extra == "gw"
Requires-Dist: dttxml; extra == "gw"
Requires-Dist: gwinc; extra == "gw"
Requires-Dist: ligo.skymap; extra == "gw"
Provides-Extra: io
Requires-Dist: nptdms; extra == "io"
Provides-Extra: netcdf4
Requires-Dist: netCDF4; extra == "netcdf4"
Requires-Dist: xarray; extra == "netcdf4"
Provides-Extra: zarr
Requires-Dist: zarr; extra == "zarr"
Provides-Extra: plotting
Requires-Dist: pygmt; extra == "plotting"
Provides-Extra: audio
Requires-Dist: pydub; extra == "audio"
Requires-Dist: tinytag>=1.10; extra == "audio"
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-qt; extra == "dev"
Requires-Dist: pytest-xvfb; extra == "dev"
Requires-Dist: pytest-forked; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: nbmake; extra == "dev"
Requires-Dist: nbval; extra == "dev"
Requires-Dist: freezegun; extra == "dev"
Requires-Dist: requests-mock; extra == "dev"
Requires-Dist: types-requests; extra == "dev"
Requires-Dist: types-PyYAML; extra == "dev"
Provides-Extra: all
Requires-Dist: scikit-learn; extra == "all"
Requires-Dist: statsmodels; extra == "all"
Requires-Dist: pmdarima; extra == "all"
Requires-Dist: dcor; extra == "all"
Requires-Dist: hurst; extra == "all"
Requires-Dist: hurst-exponent; extra == "all"
Requires-Dist: exp-hurst; extra == "all"
Requires-Dist: EMD-signal; extra == "all"
Requires-Dist: PyWavelets; extra == "all"
Requires-Dist: iminuit; extra == "all"
Requires-Dist: emcee; extra == "all"
Requires-Dist: corner; extra == "all"
Requires-Dist: control; extra == "all"
Requires-Dist: obspy; extra == "all"
Requires-Dist: mth5; extra == "all"
Requires-Dist: mtpy; extra == "all"
Requires-Dist: mt_metadata; extra == "all"
Requires-Dist: lalsuite; extra == "all"
Requires-Dist: gwdatafind; extra == "all"
Requires-Dist: gwosc; extra == "all"
Requires-Dist: dqsegdb2; extra == "all"
Requires-Dist: dttxml; extra == "all"
Requires-Dist: gwinc; extra == "all"
Requires-Dist: ligo.skymap; extra == "all"
Requires-Dist: nptdms; extra == "all"
Requires-Dist: netCDF4; extra == "all"
Requires-Dist: xarray; extra == "all"
Requires-Dist: zarr; extra == "all"
Requires-Dist: pygmt; extra == "all"
Requires-Dist: pydub; extra == "all"
Requires-Dist: tinytag>=1.10; extra == "all"
Dynamic: license-file

<p align="center">
  <a href="https://tatsuki-washimi.github.io/gwexpy/docs/web/en/">
    <img src="docs/_static/branding/logo.svg" alt="gwexpy logo" width="280">
  </a>
</p>

# gwexpy: GWpy Expansions for Experiments

[![CI Status](https://github.com/tatsuki-washimi/gwexpy/actions/workflows/pr-fast.yml/badge.svg)](https://github.com/tatsuki-washimi/gwexpy/actions/workflows/pr-fast.yml)
[![codecov](https://codecov.io/gh/tatsuki-washimi/gwexpy/branch/main/graph/badge.svg)](https://codecov.io/gh/tatsuki-washimi/gwexpy)
[![Documentation](https://github.com/tatsuki-washimi/gwexpy/actions/workflows/docs-pr.yml/badge.svg)](https://tatsuki-washimi.github.io/gwexpy/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)

**gwexpy** is an extension library for [GWpy](https://gwpy.github.io/) for experimental physics and gravitational-wave data analysis. It adds matrix-aware containers, field operations, fitting workflows, expanded I/O, and interoperability layers while staying close to GWpy-style analysis.

## Install

```bash
git clone https://github.com/tatsuki-washimi/gwexpy.git
cd gwexpy
python -m pip install -e .
```

For optional extras, external dependencies, and environment-specific setup, use the official installation guides:

- English: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/installation.html>
- 日本語: <https://tatsuki-washimi.github.io/gwexpy/docs/web/ja/user_guide/installation.html>

## Documentation

The full documentation is maintained in the docs site and is the source of truth for usage details.

- Documentation hub: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/>
- ドキュメントハブ: <https://tatsuki-washimi.github.io/gwexpy/docs/web/ja/>
- Quick Start: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/quickstart.html>
- Tutorials and case studies: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/tutorials/>
- File formats and I/O: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/io_formats.html>
- API reference: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/reference/>
- Examples gallery: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/examples/>

## Why gwexpy?

- **Matrix-native analysis**: `TimeSeriesMatrix`, `FrequencySeriesMatrix`, and `SpectrogramMatrix` support batch processing, transfer functions, and multichannel workflows.
- **Physics-oriented containers**: `ScalarField`, `VectorField`, and `TensorField` extend analysis beyond simple series into structured field data.
- **Practical workflows**: fitting, noise hunting, time-frequency analysis, and interoperability are exposed as user-facing workflows rather than isolated utilities.
- **Broad interoperability and I/O**: gwexpy bridges scientific Python tools and extends format coverage beyond core GWpy workflows.

## Quick Start

```python
import numpy as np
import gwexpy
from gwexpy.timeseries import TimeSeries, TimeSeriesList

gwexpy.register_all()

ts1 = TimeSeries(np.arange(8.0), dt=1.0, name="A")
ts2 = TimeSeries(np.arange(8.0) * 2.0, dt=1.0, name="B")
matrix = TimeSeriesList([ts1, ts2]).to_matrix()
asd = matrix.asd(fftlength=2.0)
print(matrix.shape)
```

For fitting, I/O, interoperability, and notebook-based workflows, start from the docs hub or the tutorial index above.

## More Resources

- Migration notes for GWpy users: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/gwexpy_for_gwpy_users_en.html>
- Citation: <https://tatsuki-washimi.github.io/gwexpy/docs/web/en/user_guide/citation.html>
- Reproducibility notes: [docs/repro/README.md](docs/repro/README.md)
- Supported I/O matrix: [SUPPORTED_IO_MATRIX.md](SUPPORTED_IO_MATRIX.md)

## Support

- Issues: <https://github.com/tatsuki-washimi/gwexpy/issues>
- Discussions: <https://github.com/tatsuki-washimi/gwexpy/discussions>
- Contributions: pull requests are welcome on GitHub
