axiolid_predicates/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Certified geometric predicates: the shared exact-arithmetic substrate.
4//!
5//! A predicate answers a *sign* question, and a sign drives topology, so a
6//! plausible answer is not good enough. Every public predicate here escalates
7//! to exact arithmetic rather than comparing against a global epsilon.
8//!
9//! This package is deliberately narrow. It carries no curve, surface, mesh,
10//! B-rep, provider, or execution dependency, so a consumer that needs only
11//! certified signs — linear intersection, polygon orientation, NURBS root
12//! isolation, topology classification — pays for arithmetic and nothing else.
13//! That includes big integers: the exact tier here is expansion arithmetic
14//! (plus a fixed-size dyadic fallback for `orient3d`), and exact
15//! *constructions* over big integers live in `axiolid-exact` instead. The
16//! broad `axiolid-reference` oracle re-exports these items unchanged
17//! (ADR 0036).
18//!
19//! A `*_filter` function may return `Certified::Uncertain`; a public
20//! predicate never does.
21
22pub mod arithmetic;
23pub mod expansion;
24pub mod orient3;
25mod orient3_dyadic;
26pub mod orientation;
27pub mod scene;
28pub mod sphere;
29pub mod static_filter;
30
31pub use expansion::{two_diff, two_product, two_sum};
32pub use orient3::{orient3d, orient3d_filter};
33pub use orientation::{orient2d, orient2d_filter};
34pub use sphere::{incircle, incircle_filter, insphere, insphere_filter};
35pub use static_filter::StaticFilter;