Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.11.0] - 2026-07-03

### Added

- Add typed tabulated Cartesian ephemerides with cubic Hermite interpolation,
Expand All @@ -23,6 +25,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
including catalogue records, apparent-magnitude validation, S10 photometry,
provenance metadata, deterministic CSV serialization, and scientific
validators for generated map assets.
- Add Gaia DR3 typed catalogue support with a strict raw/domain split, typed
ICRS astrometry, Gaia quality metadata, local CSV row parsing, passband-aware
XP sampled-spectrum photon-flux integration, and passband-integrated stellar
source records for downstream starlight products.

### Changed

Expand All @@ -33,6 +39,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Document the new HEALPix and starlight modules with scientific scope,
technical scope, and primary references, following the workspace
`missing_docs = "deny"` policy.
- Reuse canonical `qtty` Julian-year quantities, angular rates, and
`astro::proper_motion::ProperMotion` in Gaia DR3 astrometry instead of local
unit wrappers.
- Align proper-motion propagation and `StarSpaceMotion` with Julian-year catalogue
conventions (Gaia/Hipparcos).
- Reuse `qtty::velocity::C` and `qtty::Nanometers` in Gaia photometry instead of
local physical-constant and wavelength wrappers.

## [0.10.1] - 2026-06-20

Expand Down
60 changes: 30 additions & 30 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ broken_intra_doc_links = "deny"

[package]
name = "siderust"
version = "0.10.1"
version = "0.11.0"
edition = "2021"
authors = ["VPRamon <vallespuigramon@gmail.com>"]
description = "High-precision astronomy and satellite mechanics in Rust."
Expand Down Expand Up @@ -97,7 +97,7 @@ thiserror = "2"
approx = "0.5"
chrono = "0.4"
paste = "1.0"
quick-xml = "0.40"
quick-xml = "0.41"
serde = { version = "1.0", features = ["derive"], optional = true }
serde_json = { version = "1.0", optional = true }
sha2 = { version = "0.11", optional = true }
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ Siderust provides ephemerides, coordinate transforms, time-scale handling, and o
| **Celestial Mechanics** | VSOP87 & ELP2000 theories, Pluto (Meeus/Williams), light‑time & aberration, nutation & precession, apparent Sun & Moon, culmination searches, SGP4/TLE propagation. |
| **Ephemeris Backends** | Pluggable `Ephemeris` / `DynEphemeris` traits: `Vsop87Ephemeris` (always available) and [`RuntimeEphemeris`](https://docs.rs/siderust/latest/siderust/ephemeris/struct.RuntimeEphemeris.html) for JPL DE4xx BSP files at runtime. |
| **Altitude API** | Unified `AltitudeProvider` trait for Sun, Moon, stars, and arbitrary ICRS directions; find crossings, culminations, [`altitude_ranges`], [`above_threshold`], and [`below_threshold`] periods.|
| **Catalogs & Bodies** | Built‑in Sun→Neptune, asteroids (Ceres, Bennu, Apophis), comets (Halley, Encke, Hale-Bopp), a starter star catalog, + helpers for custom datasets. |
| **Catalogs & Bodies** | Built‑in Sun→Neptune, asteroids (Ceres, Bennu, Apophis), comets (Halley, Encke, Hale-Bopp), a starter star catalog, typed Gaia DR3 raw/domain ingestion, + helpers for custom datasets. |
| **Starlight & Photometry** | HEALPix stellar surface-brightness maps, S10 diagnostics, passband-aware Gaia XP sampled-spectrum photon-flux integration, and typed passband-integrated stellar source records. |
| **Observatories** | Predefined sites (Roque de los Muchachos, El Paranal, Mauna Kea, La Silla) with `ObserverSite` for topocentric transforms. |

Coordinate algebra and reusable conic geometry are provided by [`affn`](https://crates.io/crates/affn); Kepler-equation solving and domain-neutral conic propagation live in [`keplerian`](https://crates.io/crates/keplerian); `siderust` adds astronomy-specific time, frame transforms, ephemeris backends, and body/observer orchestration on top.
Expand Down Expand Up @@ -336,7 +337,7 @@ cargo run --example 11_serde_serialization --features serde
* [x] DE440/DE441 JPL ephemerides
* [x] Unified altitude API (`AltitudeProvider` trait)
* [x] Serde serialization support
* [ ] Gaia DR3 star ingestion & cone search
* [x] Gaia DR3 star ingestion & cone search
* [ ] Relativistic light‑time & gravitational deflection
* [ ] Batch orbit determination helpers (LSQ & EKF)
* [ ] GPU acceleration via `wgpu` (experiment)
Expand Down
4 changes: 2 additions & 2 deletions siderust-ffi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "siderust-ffi"
version = "0.10.1"
version = "0.11.0"
edition = "2021"
authors = ["VPRamon <vallespuigramon@gmail.com>"]
description = "C FFI bindings for siderust, high-precision astronomy library."
Expand All @@ -19,7 +19,7 @@ runtime-data = ["siderust/runtime-data", "dep:siderust-archive", "siderust-archi


[dependencies]
siderust = { version = "0.10.1", path = ".." }
siderust = { version = "0.11.0", path = ".." }
siderust-archive = { version = "0.1", optional = true, features = ["jpl"] }
keplerian = "0.2"
principia = { version = "0.2", features = ["alloc"] }
Expand Down
4 changes: 2 additions & 2 deletions siderust-ffi/src/phase.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ pub extern "C" fn siderust_find_phase_events(
// Illumination period finding
// ═══════════════════════════════════════════════════════════════════════════

/// Find windows where geocentric Moon illumination is above `k_min` [0,1].
/// Find windows where geocentric Moon illumination is above `k_min` in `[0, 1]`.
#[no_mangle]
pub extern "C" fn siderust_moon_illumination_above(
window: TempochPeriodMjd,
Expand All @@ -205,7 +205,7 @@ pub extern "C" fn siderust_moon_illumination_above(
}}
}

/// Find windows where geocentric Moon illumination is below `k_max` [0,1].
/// Find windows where geocentric Moon illumination is below `k_max` in `[0, 1]`.
#[no_mangle]
pub extern "C" fn siderust_moon_illumination_below(
window: TempochPeriodMjd,
Expand Down
2 changes: 1 addition & 1 deletion siderust-ffi/src/runtime_ephemeris.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! FFI bindings for the runtime-loaded ephemeris backend.
//!
//! All functions in this module work with an opaque [`SiderustRuntimeEphemeris`]
//! handle that wraps a [`RuntimeEphemeris`](siderust::ephemeris::RuntimeEphemeris).
//! handle that wraps a [`RuntimeEphemeris`].
//!
//! ## Lifecycle
//!
Expand Down
2 changes: 1 addition & 1 deletion siderust-ffi/src/subject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
//! - `Body`: Solar-system bodies (Sun, Moon, planets)
//! - `Star`: Catalog or custom stars via `SiderustStar` handle
//! - `Icrs`: Fixed ICRS direction (RA/Dec)
//! - `GenericTarget`: Full `CoordinateWithPM<T>` via [`SiderustGenericTarget`] handle
//! - `GenericTarget`: Full `CoordinateWithPM<T>` via `SiderustGenericTarget` handle

use crate::altitude::{crossings_to_c, culminations_to_c, periods_to_c, window_from_c};
use crate::azimuth::{vec_az_crossings_to_c, vec_az_extrema_to_c};
Expand Down
22 changes: 12 additions & 10 deletions siderust-ffi/src/target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use crate::error::SiderustStatus;
use crate::types::*;
use qtty::angular::Degrees;
use qtty::unit::{Degree, Year};
use qtty::unit::{Degree, JulianYear};
use qtty::*;
use siderust::astro::proper_motion::ProperMotion;
use siderust::coordinates::frames::{
Expand All @@ -23,9 +23,9 @@ use siderust::targets::CoordinateWithPM;
use siderust::time::JulianDate;

/// Unit type alias for degrees per Julian year.
type DegreePerYear = qtty::Per<Degree, Year>;
type DegreePerJulianYear = qtty::Per<Degree, JulianYear>;
/// Quantity alias for degrees per Julian year.
type DegreesPerYear = qtty::Quantity<DegreePerYear>;
type DegreesPerJulianYear = qtty::Quantity<DegreePerJulianYear>;

// ═══════════════════════════════════════════════════════════════════════════
// Generic Target Handle (CoordinateWithPM<T>)
Expand Down Expand Up @@ -60,14 +60,16 @@ fn proper_motion_from_ffi(data: &SiderustGenericTargetData) -> Option<ProperMoti
}

Some(match data.proper_motion.ra_convention {
SiderustRaConvention::MuAlpha => ProperMotion::from_mu_alpha::<DegreePerYear>(
DegreesPerYear::new(data.proper_motion.pm_ra_deg_yr),
DegreesPerYear::new(data.proper_motion.pm_dec_deg_yr),
),
SiderustRaConvention::MuAlphaStar => ProperMotion::from_mu_alpha_star::<DegreePerYear>(
DegreesPerYear::new(data.proper_motion.pm_ra_deg_yr),
DegreesPerYear::new(data.proper_motion.pm_dec_deg_yr),
SiderustRaConvention::MuAlpha => ProperMotion::from_mu_alpha::<DegreePerJulianYear>(
DegreesPerJulianYear::new(data.proper_motion.pm_ra_deg_yr),
DegreesPerJulianYear::new(data.proper_motion.pm_dec_deg_yr),
),
SiderustRaConvention::MuAlphaStar => {
ProperMotion::from_mu_alpha_star::<DegreePerJulianYear>(
DegreesPerJulianYear::new(data.proper_motion.pm_ra_deg_yr),
DegreesPerJulianYear::new(data.proper_motion.pm_dec_deg_yr),
)
}
})
}

Expand Down
2 changes: 1 addition & 1 deletion siderust-ffi/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ ffi_enum! {
}

ffi_enum! {
/// Coordinate kind discriminant for [`SiderustTargetCoord`].
/// Coordinate kind discriminant for `SiderustTargetCoord`.
///
/// Specifies which coordinate representation is stored in the target.
pub enum SiderustTargetCoordKind {
Expand Down
Loading
Loading