Skip to main content

cartan_geo/
lib.rs

1// ~/cartan/cartan-geo/src/lib.rs
2
3//! # cartan-geo
4//!
5//! Geodesic computation and geometric tools for the cartan library.
6//!
7//! This crate provides higher-level geometric utilities built on top of
8//! the `Manifold` trait from `cartan-core` and the concrete manifolds from
9//! `cartan-manifolds`. It focuses on *global* geometry: geodesic curves,
10//! curvature queries, and Jacobi field integration.
11//!
12//! ## Modules
13//!
14//! | Module | Contents |
15//! |--------|----------|
16//! | [`geodesic`] | `Geodesic<M>` -- parameterized geodesic, sampling, two-point construction |
17//! | [`curvature`] | `CurvatureQuery<M>` -- sectional, Ricci, scalar curvature at a point |
18//! | [`jacobi`] | `integrate_jacobi` -- RK4 Jacobi field ODE integration |
19//!
20//! ## no_std support
21//!
22//! `cartan-geo` is `no_std`-compatible with `default-features = false, features = ["alloc"]`.
23//! [`Geodesic`], [`CurvatureQuery`], and [`integrate_jacobi`] are available unconditionally.
24//! [`Disclination`], disclination scanning, and holonomy require `std`.
25//!
26//! ## References
27//!
28//! - do Carmo. "Riemannian Geometry." Birkhauser, 1992. Chapters 3-5.
29//! - Petersen. "Riemannian Geometry." Springer, 2016. Chapter 11.
30
31#![cfg_attr(not(feature = "std"), no_std)]
32#[cfg(feature = "alloc")]
33extern crate alloc;
34
35pub mod curvature;
36pub mod geodesic;
37#[cfg(feature = "std")]
38pub mod disclination;
39#[cfg(feature = "std")]
40pub mod holonomy;
41pub mod jacobi;
42
43pub use curvature::{CurvatureQuery, scalar_at, sectional_at};
44pub use geodesic::Geodesic;
45#[cfg(feature = "std")]
46pub use disclination::{
47    DisclinationCharge, DisclinationSegment, DisclinationLine, DisclinationEvent,
48    EventKind, QTensorField3D, Sign, scan_disclination_lines_3d, connect_disclination_lines,
49    track_disclination_events,
50};
51#[cfg(feature = "std")]
52pub use holonomy::{
53    Disclination, edge_transition, holonomy_deviation, is_half_disclination,
54    loop_holonomy, rotation_angle, scan_disclinations,
55};
56#[cfg(feature = "alloc")]
57pub use jacobi::{JacobiResult, integrate_jacobi};