geoit/lib.rs
1//! # geoit — Exact Geometric Algebra for Rust
2//!
3//! A governed geometric algebra engine with exact arithmetic.
4//! Zero floating-point operations. Zero dependencies.
5//!
6//! ## Where to Start
7//!
8//! **Easy path:** use [`standard_registry()`] to get a working CGA, PGA, or VGA
9//! governance in one call — no manual class or construction setup.
10//!
11//! **Custom path:** use [`GovernanceBuilder`] to define your own geometric classes
12//! with polynomial constraints, constructions, and transform rules.
13//!
14//! ## Quick Start
15//!
16//! ```
17//! use geoit::*;
18//! use geoit::governance;
19//!
20//! // One call: complete CGA(2) with classes, constructions, constraints
21//! let gov = standard_registry().instantiate_family("CGA", 2).unwrap();
22//! let point = gov.construct(0, &[Scalar::from(3), Scalar::from(4)]).unwrap();
23//! let geoit = governance::govern(&point, &gov, 0).unwrap();
24//! assert!(geoit.is_satisfied());
25//! ```
26//!
27//! ## Custom Governance
28//!
29//! ```
30//! use geoit::*;
31//! use geoit::governance::expr::Expr;
32//!
33//! let alg = Algebra::new(Signature::new(0, 0, 3).unwrap());
34//! let class = GeomClassBuilder::new(&alg).grades(&[1]).build();
35//! let body = Expr::Add(
36//! Expr::add(Expr::mul(Expr::param(0), Expr::gen(0)),
37//! Expr::mul(Expr::param(1), Expr::gen(1))),
38//! Expr::mul(Expr::param(2), Expr::gen(2)),
39//! );
40//! let gov = GovernanceBuilder::new(alg)
41//! .class("Vector", class)
42//! .construction("Vector", "Vector", 3, body)
43//! .build();
44//!
45//! let p = gov.construct("Vector", &[Scalar::from(3), Scalar::from(4), Scalar::from(5)]).unwrap();
46//! let g = gov.govern(&p, "Vector").unwrap();
47//! assert!(g.is_satisfied());
48//! assert_eq!(g.read_all().unwrap(), vec![Scalar::from(3), Scalar::from(4), Scalar::from(5)]);
49//! ```
50//!
51//! ## Five-Layer Architecture
52//!
53//! 1. **[`Scalar`]** / **[`Rat`]** — exact arithmetic (ℚ → BigRat → radical extensions)
54//! 2. **[`Signature`]** — define the algebra: `Signature::new(1, 0, 3)?` for CGA(2)
55//! 3. **[`Mv`]** — sparse multivectors with exact coefficients
56//! 4. **[`Governance`]** — polynomial constraints, constructions, transform rules
57//! 5. **[`Geoit`]** — certified multivector with proof, profile, and readings
58
59pub mod algebra;
60pub mod builder;
61pub mod codec;
62pub mod error;
63pub mod governance;
64pub mod scalar;
65
66// ─── Public re-exports ───
67
68// Layer 1: Signature
69pub use algebra::signature::Signature;
70
71// Layer 2: Governance
72pub use governance::field::FieldOp;
73pub use governance::governance::Governance;
74pub use governance::phase::Phase;
75
76// v0.0.2: Governance composition
77pub use governance::category::{GovernanceCategory, GovernedMorphism};
78pub use governance::compile::{compile_field_eval_from_construction, partial_eval_expr, PartialMv};
79pub use governance::compile::{CompiledFieldEval, IntPoly};
80pub use governance::family::{standard_registry, GovernanceFamily, GovernanceRegistry};
81pub use governance::pencil::{
82 build_full_hierarchy, classify_pencil, is_pencil_constructible, pencil_levels_to_rules,
83 PencilType,
84};
85pub use governance::profile::GeneratorProfile;
86pub use governance::rule::{ProofTerm, TransformOp, TransformRule};
87
88// Layer 3: Mv
89pub use algebra::blade_new::{BladeKey, BladeMask};
90pub use algebra::mv::Mv;
91pub use scalar::{Coeff, Rat, Scalar};
92
93// Layer 4: Geoit
94pub use governance::geoit::Geoit;
95pub use governance::geoit::GeoitSnapshot;
96
97// Builder API
98pub use builder::{Algebra, GeomClassBuilder, GovernanceBuilder, NamedGovernance};
99
100// Error types
101pub use error::{Error, NotFoundError, SignatureError};
102
103// ─── Send + Sync assertions ───
104
105#[cfg(test)]
106mod send_sync {
107 fn assert_send<T: Send>() {}
108 fn assert_sync<T: Sync>() {}
109
110 #[test]
111 fn public_types_are_send_sync() {
112 assert_send::<super::Signature>();
113 assert_sync::<super::Signature>();
114 assert_send::<super::Governance>();
115 assert_sync::<super::Governance>();
116 assert_send::<super::Mv>();
117 assert_sync::<super::Mv>();
118 assert_send::<super::Geoit>();
119 assert_sync::<super::Geoit>();
120 assert_send::<super::GeoitSnapshot>();
121 assert_sync::<super::GeoitSnapshot>();
122 assert_send::<super::Scalar>();
123 assert_sync::<super::Scalar>();
124 assert_send::<super::Rat>();
125 assert_sync::<super::Rat>();
126 assert_send::<super::Coeff>();
127 assert_sync::<super::Coeff>();
128 assert_send::<super::Phase>();
129 assert_sync::<super::Phase>();
130 assert_send::<super::FieldOp>();
131 assert_sync::<super::FieldOp>();
132 assert_send::<super::Algebra>();
133 assert_sync::<super::Algebra>();
134 assert_send::<super::NamedGovernance>();
135 assert_sync::<super::NamedGovernance>();
136 assert_send::<super::Error>();
137 assert_sync::<super::Error>();
138 // v0.0.2 types
139 assert_send::<super::GeneratorProfile>();
140 assert_sync::<super::GeneratorProfile>();
141 assert_send::<super::TransformRule>();
142 assert_sync::<super::TransformRule>();
143 assert_send::<super::GovernanceCategory>();
144 assert_sync::<super::GovernanceCategory>();
145 assert_send::<super::GovernanceRegistry>();
146 assert_sync::<super::GovernanceRegistry>();
147 assert_send::<super::CompiledFieldEval>();
148 assert_sync::<super::CompiledFieldEval>();
149 }
150}