Skip to main content

Domain-only TESS transit detection and vetting library (array-in/array-out)

Project description

                                                                    ·                               
██    ·           ██            ██            ██                                            ██      
██▒░              ██▒░          ██▒░  ·       ██▒░                               ✧          ██▒░    
██▒░               ▒▒░          ██▒░          ██▒░        ████████          ██████           ▒▒░    
██▒░             ·          ·   ██▒░          ██▒░        ████████▒░        ██████▒░                
████████ ·        ██        ██████████    ██████████      ██▒▒▒▒██▒░         ▒▒▒▒▒██        ██      
████████▒░        ██▒░      ██████████▒░  ██████████▒░    ██▒░  ██▒░              ██▒░      ██▒░    
██      ██        ██▒░       ▒▒▒██▒▒▒▒▒░   ▒▒▒██▒▒▒▒▒░·   ██▒░   ▒▒░        ████████▒░      ██▒░    
██      ██▒░      ██▒░          ██▒░          ██▒░        ██▒░              ████████▒░      ██▒░    
██      ██▒░      ██▒░          ██▒░          ██▒░ ·      ██▒░            ██      ██▒░      ██▒░    
██      ██▒░      ██▒░          ██▒░          ██▒░        ██▒░            ██      ██▒░      ██▒░    
████████ ▒▒░      ██▒░          ████          ████        ██▒░      ██     ▒████████▒░      ██▒░    
████████▒░        ██▒░          ████▒░        ████▒░·     ██▒░      ██▒░    ████████▒░      ██▒░    
 ▒▒▒▒▒▒▒▒░         ▒▒░           ▒▒▒▒░         ▒▒▒▒░       ▒▒░       ▒▒░    ·▒▒▒▒▒▒▒▒░       ▒▒░    
                                                                                                    
     ·      ·                                                                                       
                                                                                                    
                                              bittr.ai                                              

tess-vetter

Coverage DOI

Domain-first Python library for TESS transit detection + vetting (array-in/array-out).

This package follows a "domain-first" design: array-in/array-out astronomy algorithms with optional platform helpers. The core api/, compute/, and validation/ modules are pure functions; the platform/ module provides opt-in I/O and network clients when needed.

Package structure:

  • Pure domain logic (no I/O, no network): api/, compute/, validation/, transit/, recovery/, activity/
  • Opt-in infrastructure (network clients, caching, disk I/O): platform/

The platform/ module is entirely optional and only used when explicitly imported.

What's in here

  • Vetting pipeline: default preset runs 15 checks (V01-V12, V13, V15, V11b); opt-in extended preset adds metrics-only diagnostics (V16-V21), for 21 total checks available via profiles (tess_vetter.api.vet)
  • Transit detection: TLS/LS periodograms, multi-planet search, candidate merging (tess_vetter.api.periodogram)
  • Pixel diagnostics: centroid shift, difference images, WCS-aware localization, aperture dependence (tess_vetter.api.pixel)
  • Transit recovery: detrend + stack + trapezoid fitting for active stars (tess_vetter.api.recovery)
  • FPP (optional): TRICERATOPS+ support with a vendored copy under src/tess_vetter/ext/ (tess_vetter.api.fpp)
  • Code mode (experimental): operation-catalog and MCP tooling under tess_vetter.code_mode; this surface is experimental and may change
  • Citations: many public API entry points carry machine-readable literature references (see REFERENCES.md and tess_vetter.api.references)

Installation

Requires Python 3.11–3.12.

Minimal install (basic vetting)

pip install tess-vetter

With transit detection (TLS)

pip install 'tess-vetter[tls]'

With MCMC fitting

pip install 'tess-vetter[fit]'

With physical transit model fitting (batman)

pip install 'tess-vetter[batman]'

With advanced detrending (wotan)

pip install 'tess-vetter[wotan]'

With limb darkening coefficients (ldtk)

pip install 'tess-vetter[ldtk]'

With external vetter integration (exovetter)

pip install 'tess-vetter[exovetter]'

With false positive probability (TRICERATOPS)

pip install 'tess-vetter[triceratops]'

With Apple Silicon acceleration (MLX, macOS only)

pip install 'tess-vetter[mlx]'

Full install

pip install 'tess-vetter[all]'

Development

Using uv (recommended for this repo; uses uv.lock):

uv sync --all-extras --group dev

Using pip:

python -m pip install -e ".[all]"

License note for optional extras: The [triceratops] extra includes pytransit, which is GPL-2.0 licensed. Installing this extra changes the effective license of your environment. The [ldtk] extra is also GPL-2.0. The core package remains BSD-3-Clause.

Quickstart

The recommended import alias follows patterns from astropy (import astropy.units as u):

import tess_vetter.api as btv

Agent-first walkthroughs and CLI-first examples are in docs/quickstart.rst.

Single candidate vetting

import numpy as np
from tess_vetter.api import Candidate, Ephemeris, LightCurve, vet_candidate

lc = LightCurve(time=time, flux=flux, flux_err=flux_err)
candidate = Candidate(
    ephemeris=Ephemeris(period_days=3.5, t0_btjd=1850.0, duration_hours=2.5),
    depth_ppm=500,
)

bundle = vet_candidate(lc, candidate, network=False)

# Results are structured: status, metrics, flags, citations
for r in bundle.results:
    print(f"{r.id} ({r.name}): {r.status}")
    print(f"  metrics: {r.metrics}")
    print(f"  flags: {r.flags}")
    print(f"  citations: {r.citations}")

Batch vetting (multiple candidates, one light curve)

from tess_vetter.api import vet_many

candidates = [
    Candidate(ephemeris=Ephemeris(period_days=3.5, t0_btjd=1850.0, duration_hours=2.5)),
    Candidate(ephemeris=Ephemeris(period_days=7.0, t0_btjd=1852.0, duration_hours=3.0)),
]

bundles, summary = vet_many(lc, candidates, network=False)

# summary is a list of dicts with stable columns for sorting/filtering
for row in summary:
    print(f"P={row['period_days']:.2f}d: {row['n_ok']} ok, {row['n_skipped']} skipped")

Pipeline introspection

from tess_vetter.api import list_checks, describe_checks

# List all registered checks with their requirements
checks = list_checks()
for c in checks:
    req = c["requirements"]
    print(f"{c['id']}: {c['name']} (tier={c['tier']}, needs_network={req['needs_network']})")

# Human-readable summary
print(describe_checks())

Running a subset of checks

from tess_vetter.api import vet_candidate

# Run only LC-only checks (V01-V05)
bundle = vet_candidate(lc, candidate, checks=["V01", "V02", "V03", "V04", "V05"])

Network behavior

Catalog-backed checks are always opt-in. You must pass network=True (and provide metadata like RA/Dec and TIC ID) to enable external queries; otherwise those checks return skipped results.

Citations

Many public API entry points and vetting checks include a list of literature references in their results. The full reference list lives in REFERENCES.md (and is also available programmatically via tess_vetter.api.references).

Code map

  • src/tess_vetter/api/: stable host-facing facade (recommended import surface)
  • src/tess_vetter/compute/: core array algorithms (detrending, periodograms, scoring)
  • src/tess_vetter/validation/: check implementations and aggregation primitives
  • src/tess_vetter/pixel/: pixel-level and WCS-aware diagnostics
  • src/tess_vetter/recovery/, src/tess_vetter/transit/, src/tess_vetter/activity/: domain modules
  • src/tess_vetter/platform/io/, src/tess_vetter/platform/catalogs/: optional I/O and catalog helpers
  • src/tess_vetter/ext/triceratops_plus_vendor/: vendored TRICERATOPS+ (see THIRD_PARTY_NOTICES.md)

Platform Support

  • macOS / Linux: First-class support. All features work as expected.
  • Windows: Best-effort support. Some platform-specific features may have limitations:
    • Cache file locking uses fcntl (Unix-only); graceful fallback on Windows.
    • Network timeouts use SIGALRM which may not work on all platforms.

Security

Cache files (light curves, TRICERATOPS results) use pickle serialization for performance. Ensure cache directories have appropriate permissions in shared or multi-user environments.

Development

Run development commands in the project environment with uv run:

uv run pytest
uv run ruff check .
uv run mypy src/tess_vetter

Docs

User-facing docs are built with Sphinx from docs/:

uv run sphinx-build -b html -W docs docs/_build/html

For agent onboarding, start with docs/quickstart.rst. For API usage recipes and signatures, see docs/api.rst.

Internal working notes live in working_docs/ and are not part of the stable API.

License

BSD-3-Clause. See LICENSE for details.

Project details


Download files

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

Source Distribution

tess_vetter-0.3.1.tar.gz (28.0 MB view details)

Uploaded Source

Built Distribution

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

tess_vetter-0.3.1-py3-none-any.whl (1.4 MB view details)

Uploaded Python 3

File details

Details for the file tess_vetter-0.3.1.tar.gz.

File metadata

  • Download URL: tess_vetter-0.3.1.tar.gz
  • Upload date:
  • Size: 28.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tess_vetter-0.3.1.tar.gz
Algorithm Hash digest
SHA256 e1839a709e279a05761fc4819653343fbafc11e432a5102fecb7afa3daee14f2
MD5 0910ea301c5add6c25bda82e665f0b79
BLAKE2b-256 0c418d6b58dd76862bbc917c796316c47135b1744a9a901249878d8ffe2d7810

See more details on using hashes here.

Provenance

The following attestation bundles were made for tess_vetter-0.3.1.tar.gz:

Publisher: release.yml on bittr-ai/tess-vetter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tess_vetter-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: tess_vetter-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tess_vetter-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d8e98eaa4739161d4d80c94eb56a7990f7e3cfee22fb0f4b34f78d895f1afc30
MD5 5967262903b02ea7b476ebe217b61545
BLAKE2b-256 9139cd1a754b91c04f9c61ff3f46334c78ee76bf4eca5f6d13cecbad4077b0f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tess_vetter-0.3.1-py3-none-any.whl:

Publisher: release.yml on bittr-ai/tess-vetter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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