oxiproj-core 0.1.2

Foundation types for OxiProj: coordinates, errors, ellipsoids, datums, and units.
Documentation
#![forbid(unsafe_code)]
#![warn(missing_docs)]
// The `gpu` feature requires `std` (CUDA driver, threads, `HashMap`). If both
// `gpu` and `no_std` are requested at once (e.g. `cargo build --all-features`),
// `std` wins so the GPU module can compile — a no_std target can't drive a GPU
// anyway. The `#[cfg(feature = "no_std")]` import shims elsewhere stay valid
// because their `alloc`/`core`/`libm` paths also resolve under `std`.
#![cfg_attr(all(feature = "no_std", not(feature = "gpu")), no_std)]
//! `oxiproj-core` — Foundation types: coordinates, errors, ellipsoids, datums, and units.
//!
//! Part of [OxiProj](https://github.com/cool-japan/oxiproj), the COOLJAPAN Pure-Rust
//! port of PROJ. See the workspace blueprint `oxiproj.md` for the full design.

#[cfg(feature = "no_std")]
extern crate alloc;

pub mod const_params;
pub mod consts;
pub mod math_compat;

mod coord;
mod datum;
mod dms;
mod ellipsoid;
mod ellps_table;
mod error;
mod prime_meridian;
mod units;

mod math;

mod factors;
mod factors_exact;
mod grid_registry;
mod hessian_factors;
mod operation;
pub mod tissot;

// ---- Automatic differentiation foundation (T7.1) ----
pub mod autodiff;
pub mod projection_generic;
pub mod scalar;

// ---- Guaranteed-bounds interval arithmetic (T7.4) ----
pub mod interval;
pub mod interval_transform;
pub use interval::{Interval, IntervalCoord};
pub use interval_transform::{
    Convention, Helmert7, IntervalXyz, MercParams, Rotation, TmercParams,
};

// ---- Newton-Raphson generic inverse (T7.6) ----
pub mod newton_inverse;
pub use newton_inverse::{newton_inverse, NewtonParams};

// ---- SIMD batch kernels (T2.1) ----
pub mod simd;

// ---- Typed coordinate epoch (T3.2) ----
pub mod epoch;
pub use epoch::{epsg_pmo, Epoch, EpochCoord, EpochParseError, EpochTaggedCrs, RefFrameEpoch};

// ---- Curated re-exports ----

pub use coord::{Coord, Direction, Enu, Geod, Lp, Lpz, Lpzt, Opk, Uv, Uvw, Uvwt, Xy, Xyz, Xyzt};
pub use datum::{datum_params, find_datum, DatumDef, DatumParams, DatumType};
pub use dms::{decode_sexagesimal_dms, dmstor, parse_leading_f64};
pub use ellipsoid::{
    calc_ellipsoid_params, from_a_b, from_a_es, from_a_f, from_a_rf, named as named_ellipsoid,
    sphere, try_new as try_new_ellipsoid, Ellipsoid,
};
pub use ellps_table::{find_ellps, EllpsDef, ELLPS_TABLE};
pub use error::{ProjError, ProjResult};
pub use factors::Factors;
pub use factors_exact::FactorsExact;
pub use grid_registry::GridRegistry;
pub use hessian_factors::HessianFactors;
pub use operation::{IoUnits, Operation};
pub use prime_meridian::{find_prime_meridian, prime_meridian_offset, PrimeMeridianDef};
pub use tissot::TissotParams;
pub use units::{find_angular_unit, find_linear_unit, UnitDef};

// Math helpers + types.
pub use math::{
    aacos, aasin, aatan2, adjlon, asqrt, pj_authalic_lat, pj_authalic_lat_compute_coeffs,
    pj_authalic_lat_inverse, pj_auxlat_coeffs, pj_auxlat_convert, pj_auxlat_convert_sc,
    pj_auxlat_convert_seta_ceta, pj_clenshaw, pj_enfn, pj_gauss, pj_gauss_ini, pj_inv_gauss,
    pj_inv_mlfn, pj_mlfn, pj_msfn, pj_msfn_g, pj_phi2, pj_polyval, pj_qsfn, pj_qsfn_g,
    pj_rectifying_radius, pj_sinhpsi2tanphi, pj_tsfn, pj_tsfn_g, pj_zpoly1, pj_zpolyd1,
    proj_inv_mdist, proj_mdist, proj_mdist_ini, Apa, AuxLat, Complex, EnFn, Gauss, MDist,
};

// Common constants re-exported at crate root for convenience.
pub use consts::{DEG_TO_RAD, M_FORTPI, M_HALFPI, M_PI, M_TWOPI, RAD_TO_DEG, SEC_TO_RAD};

// AD types and generic projection surface.
pub use autodiff::{Dual1, Dual2};
pub use projection_generic::{ProjectGeneric, ProjectGenericBox};
pub use scalar::Scalar;

// ---- Plate motion parameter catalog (T3.4 / v0.1.1) ----
pub mod plate_motion;
pub use plate_motion::{Plate, PlateAngularVelocity, PlateMotionModel};

// ---- Uncertainty / covariance propagation (T7.5 / v0.1.1) ----
pub mod covariance;
pub use covariance::CovMatrix2x2;

// ---- Compile-time ellipsoid constants (T2.3) ----
pub use const_params::{
    es_from_rf, GRS80_A, GRS80_ES, GRS80_F, GRS80_RF, WGS84_A, WGS84_E, WGS84_ES, WGS84_F, WGS84_RF,
};

// ---- Typestate coordinate layer (T4.3) ----
pub mod typed_coord;
pub use typed_coord::{
    CrsMarker, Etrs89, Etrs89Coord, Itrf2020, Itrf2020Coord, TypedCoord, TypedEpochCoord,
    TypedTransform, Unknown, UnknownCoord, Utm, UtmCoord, WebMercator, WebMercatorCoord, Wgs84,
    Wgs84Coord,
};

// ---- SMT-backed transform verification (T5.5) ----
#[cfg(feature = "oxiz")]
pub mod smtcheck;

// ---- GPU (CUDA) acceleration foundation (T2.6 / T7.7) ----
#[cfg(feature = "gpu")]
pub mod gpu;