Skip to main content

MetaPulsar Logo

MetaPulsar

Python 3.9+ PyPI DOI License: MIT Code style: black Tests

A framework for combining pulsar timing data from multiple PTA collaborations into unified "metapulsar" objects for gravitational wave detection analysis.

Features

  • Multi-PTA Data Combination: Combine data from EPTA, PPTA, NANOGrav, MPTA, and other PTAs
  • Enterprise Integration: Full compatibility with the Enterprise pulsar timing analysis package
  • Dual Timing Package Support: Works with both PINT and libstempo/tempo2
  • Flexible Parameter Management: Support for "consistent" and "composite" combination strategies

Quick Start

Installation

Install the latest release from PyPI:

pip install metapulsar

# With optional extras
pip install "metapulsar[dev,libstempo]"

Or install from source for development:

git clone https://github.com/vhaasteren/metapulsar.git
cd metapulsar
pip install -e .

# With optional dependencies
pip install -e ".[dev,libstempo]"

Basic Usage

from metapulsar import create_metapulsar

# Create MetaPulsar
metapulsar = create_metapulsar(
    file_data=pulsar_data,
    combination_strategy="consistent",
    combine_components=["astrometry", "spindown", "binary", "dispersion"],
    add_dm_derivatives=True,
)

# Access combined data
print(f"Number of TOAs: {len(metapulsar.toas)}")
print(f"PTA names: {list(metapulsar._pulsars.keys())}")

Documentation

Examples

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=src/metapulsar

Release Workflow (GitHub -> PyPI)

MetaPulsar uses tag-based versioning via setuptools-scm. The package version is derived from the Git tag (for example, v0.9.6 -> 0.9.6), and PyPI publishing is triggered automatically when a GitHub Release is published.

One-time setup

  • Ensure the repository secret PYPI_API_TOKEN is configured in GitHub settings.
  • Use release tags in the format vX.Y.Z (for example, v0.9.6).

Normal release process

  1. Merge PRs into main.
  2. In GitHub, create a new Release and create/select a new tag like v0.9.6 from main.
  3. Publish the release.
  4. GitHub Actions runs the release workflow, builds distributions from that tag, and uploads them to PyPI.

Important notes

  • Do not manually edit a static version in pyproject.toml; version comes from the Git tag.
  • Reusing an existing release tag/version will fail the PyPI publish step, which is intentional to prevent silent no-op releases.

Troubleshooting

Debug Mode

import loguru
import sys
loguru.logger.remove()
loguru.logger.add(sys.stdout, level="DEBUG")

CI import error with pkg_resources

If CI fails during test collection with an error like ImportError: cannot import name 'Requirement' from 'pkg_resources', this usually comes from enterprise-pulsar importing the legacy pkg_resources API via setuptools.

Current workaround in this repository:

  • CI installs setuptools<81 to preserve compatibility with current enterprise-pulsar releases.

Long-term plan:

  • Upgrade to a future enterprise-pulsar release that removes the pkg_resources dependency, then remove the setuptools pin.

Dependencies

  • Python 3.9+
  • numpy ≥ 1.20.0
  • astropy ≥ 5.0.0
  • scipy ≥ 1.7.0
  • pint-pulsar ≥ 0.9.0
  • enterprise-pulsar ≥ 3.0.0

Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Citation

If you use this software in your research, please cite:

@software{metapulsar,
  title={MetaPulsar},
  author={van Haasteren, Rutger and Yu, Wang-Wei and Wright, David},
  year={2025},
  doi={10.5281/zenodo.17626664},
  url={https://github.com/vhaasteren/metapulsar},
  license={MIT}
}

Authors

Support

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metapulsar-0.9.6.tar.gz (11.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metapulsar-0.9.6-py3-none-any.whl (76.4 kB view details)

Uploaded Python 3

File details

Details for the file metapulsar-0.9.6.tar.gz.

File metadata

  • Download URL: metapulsar-0.9.6.tar.gz
  • Upload date:
  • Size: 11.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metapulsar-0.9.6.tar.gz
Algorithm Hash digest
SHA256 9bd8d5b5f1a1a0890c8b610fa24ef5ecd227926c91c6a18f090405e52726ac3a
MD5 b66845bdb9c39530a83d0f33dddd3d1c
BLAKE2b-256 2ae4d5eac20a7bae39ec8ec38f92c93c98f0bcbf96240c94cf308c32c492bf2f

See more details on using hashes here.

File details

Details for the file metapulsar-0.9.6-py3-none-any.whl.

File metadata

  • Download URL: metapulsar-0.9.6-py3-none-any.whl
  • Upload date:
  • Size: 76.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metapulsar-0.9.6-py3-none-any.whl
Algorithm Hash digest
SHA256 be5a9190ce082f6ae53970458ad5d389c958df6a27042b2bac74e6db2ac6d083
MD5 e5e14d6f2b3172099989eff4519dd0d7
BLAKE2b-256 093b007649dc3a6b5446e8d4442a6b9e57bc22c873cf9b20e5375fc4d366706f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.9.6 This release

2 files

0.9.3

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page