tempoch_py/lib.rs
1//! Python bindings for tempoch astronomical time primitives.
2//!
3//! This crate provides Python bindings for the tempoch Rust library, enabling
4//! astronomical time operations in Python with typed time-scale support,
5//! Julian Date / Modified Julian Date handling, UTC conversion, and period
6//! (interval) operations — all backed by the Rust implementation.
7
8use pyo3::prelude::*;
9
10mod errors;
11pub mod interop;
12mod jd;
13mod mjd;
14mod period;
15mod scales;
16
17use jd::PyJulianDate;
18use mjd::PyModifiedJulianDate;
19use period::{intersect_periods_py, PyTimePeriod};
20use scales::{convert_timescale, tai_minus_utc_py, PyTimeScale};
21
22/// tempoch: Astronomical Time Primitives for Python
23///
24/// This module provides typed astronomical time primitives with typed time
25/// scales, Julian Date / Modified Julian Date handling, UTC conversion, and
26/// period (interval) operations — all backed by Rust for high performance.
27///
28/// Example:
29/// >>> from tempoch import JulianDate, ModifiedJulianDate
30/// >>> j2000 = JulianDate.j2000()
31/// >>> mjd = j2000.to_mjd()
32/// >>> print(mjd)
33/// ModifiedJulianDate(51544.5)
34#[pymodule]
35fn _tempoch(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
36 // Time classes
37 m.add_class::<PyJulianDate>()?;
38 m.add_class::<PyModifiedJulianDate>()?;
39 m.add_class::<PyTimePeriod>()?;
40 m.add_class::<PyTimeScale>()?;
41
42 // Exception types
43 m.add(
44 "NonFiniteTimeError",
45 _py.get_type::<errors::NonFiniteTimeError>(),
46 )?;
47 m.add(
48 "InvalidIntervalError",
49 _py.get_type::<errors::InvalidIntervalError>(),
50 )?;
51 m.add("ConversionError", _py.get_type::<errors::ConversionError>())?;
52
53 // Free functions
54 m.add_function(wrap_pyfunction!(convert_timescale, m)?)?;
55 m.add_function(wrap_pyfunction!(tai_minus_utc_py, m)?)?;
56 m.add_function(wrap_pyfunction!(intersect_periods_py, m)?)?;
57
58 // Version
59 m.add("__version__", env!("CARGO_PKG_VERSION"))?;
60
61 Ok(())
62}