Skip to main content

amari_enumerative/
lib.rs

1//! # Amari Enumerative Geometry
2//!
3//! This crate provides enumerative geometry capabilities for the Amari mathematical library.
4//! It implements intersection theory, Schubert calculus, and tools for counting geometric
5//! configurations such as curves, surfaces, and higher-dimensional varieties.
6//!
7//! ## Features
8//!
9//! - **Intersection Theory**: Chow rings, intersection multiplicities, and Bezout's theorem
10//! - **Schubert Calculus**: Computations on Grassmannians and flag varieties
11//! - **Littlewood-Richardson Coefficients**: Complete LR coefficient computation
12//! - **Gromov-Witten Theory**: Curve counting and quantum cohomology
13//! - **Tropical Geometry**: Tropical curve counting and correspondence theorems
14//! - **Moduli Spaces**: Computations on moduli spaces of curves and surfaces
15//! - **Namespace/Capabilities**: ShaperOS integration via geometric access control
16//! - **Phantom Types**: Compile-time verification of mathematical properties
17//!
18//! ## Usage
19//!
20//! ```rust
21//! use amari_enumerative::{ProjectiveSpace, ChowClass, IntersectionRing};
22//!
23//! // Create projective 2-space
24//! let p2 = ProjectiveSpace::new(2);
25//!
26//! // Define two curves
27//! let cubic = ChowClass::hypersurface(3);
28//! let quartic = ChowClass::hypersurface(4);
29//!
30//! // Compute intersection number (Bezout's theorem)
31//! let intersection = p2.intersect(&cubic, &quartic);
32//! assert_eq!(intersection.multiplicity(), 12); // 3 * 4 = 12
33//! ```
34//!
35//! ## Schubert Calculus Example
36//!
37//! ```rust
38//! use amari_enumerative::{SchubertCalculus, SchubertClass, IntersectionResult};
39//!
40//! // How many lines meet 4 general lines in projective 3-space?
41//! let mut calc = SchubertCalculus::new((2, 4)); // Gr(2,4)
42//! let sigma_1 = SchubertClass::new(vec![1], (2, 4)).unwrap();
43//!
44//! let classes = vec![sigma_1.clone(), sigma_1.clone(), sigma_1.clone(), sigma_1.clone()];
45//! let result = calc.multi_intersect(&classes);
46//!
47//! assert_eq!(result, IntersectionResult::Finite(2)); // Answer: 2 lines!
48//! ```
49//!
50//! ## Phantom Types for Compile-Time Verification
51//!
52//! The crate provides zero-cost phantom types for compile-time verification:
53//!
54//! - `ValidPartition` / `UnvalidatedPartition`: Partition validity states
55//! - `Semistandard` / `LatticeWord`: Tableau property markers
56//! - `Granted` / `Pending` / `Revoked`: Capability grant states
57//! - `Transverse` / `Excess` / `Deficient`: Intersection dimension states
58//! - `FitsInBox` / `UnverifiedBox`: Grassmannian containment states
59
60#[cfg(test)]
61pub mod comprehensive_tests;
62pub mod verified_contracts;
63
64pub mod csm;
65pub mod geometric_algebra;
66pub mod gromov_witten;
67pub mod higher_genus;
68pub mod intersection;
69pub mod littlewood_richardson;
70pub mod localization;
71pub mod matroid;
72pub mod moduli_space;
73pub mod namespace;
74pub mod operad;
75pub mod performance;
76pub mod phantom;
77pub mod schubert;
78pub mod stability;
79pub mod tropical_curves;
80pub mod wdvv;
81
82#[cfg(feature = "tropical-schubert")]
83pub mod tropical_schubert;
84
85// Re-export core types
86#[cfg(feature = "tropical-schubert")]
87pub use geometric_algebra::tropicalize_multivector;
88pub use geometric_algebra::{
89    quantum_k_theory, signatures, GeometricProjectiveSpace, GeometricSchubertClass,
90    GeometricVariety,
91};
92pub use gromov_witten::{CurveClass as GWCurveClass, GromovWittenInvariant, QuantumCohomology};
93pub use higher_genus::{
94    AdvancedCurveCounting, DTInvariant, HigherGenusCurve, JacobianData, PTInvariant,
95};
96pub use intersection::{
97    AlgebraicVariety, ChowClass, Constraint, Grassmannian, IntersectionNumber, IntersectionPoint,
98    IntersectionRing, MockMultivector, ProjectiveSpace, QuantumProduct,
99};
100pub use moduli_space::{CurveClass, ModuliSpace, TautologicalClass};
101pub use performance::{
102    CurveBatchProcessor, FastIntersectionComputer, MemoryPool, SparseSchubertMatrix,
103    WasmPerformanceConfig,
104};
105
106// Schubert calculus exports
107pub use schubert::{FlagVariety, IntersectionResult, SchubertCalculus, SchubertClass};
108
109// Littlewood-Richardson exports
110pub use littlewood_richardson::{
111    lr_coefficient, schubert_product, Partition, SkewShape, SkewTableau,
112};
113
114// Parallel batch operations (when parallel feature is enabled)
115#[cfg(feature = "parallel")]
116pub use geometric_algebra::geometric_intersection_batch;
117#[cfg(feature = "parallel")]
118pub use littlewood_richardson::lr_coefficients_batch;
119#[cfg(feature = "parallel")]
120pub use namespace::{
121    capability_accessible_batch, count_configurations_batch, namespace_intersection_batch,
122};
123#[cfg(feature = "parallel")]
124pub use schubert::multi_intersect_batch;
125#[cfg(feature = "parallel")]
126pub use tropical_curves::{mikhalkin_correspondence_verify_batch, verify_mikhalkin_gw_batch};
127
128// Namespace exports for ShaperOS
129pub use namespace::{
130    capability_accessible, namespace_intersection, Capability, CapabilityId, Namespace,
131    NamespaceBuilder, NamespaceError, NamespaceIntersection, QuantumCapability,
132};
133
134// Tropical curves
135pub use tropical_curves::{
136    verify_mikhalkin_gw, MikhalkinResult, TropicalCurve, TropicalEdge, TropicalIntersection,
137    TropicalModuliSpace, TropicalPoint,
138};
139
140// Optional tropical Schubert exports
141#[cfg(all(feature = "tropical-schubert", feature = "parallel"))]
142pub use geometric_algebra::tropicalize_multivector_batch;
143#[cfg(all(feature = "tropical-schubert", feature = "parallel"))]
144pub use tropical_schubert::{tropical_convexity_batch, tropical_intersection_batch};
145#[cfg(feature = "tropical-schubert")]
146pub use tropical_schubert::{
147    tropical_convexity_check, tropical_intersection_count, TropicalResult, TropicalSchubertClass,
148};
149
150// Phantom types for compile-time verification
151pub use phantom::{
152    // Box containment
153    BoxContainment,
154    Deficient,
155    Excess,
156    FitsInBox,
157    // Grant states
158    GrantState,
159    Granted,
160    // Intersection dimension
161    IntersectionDimension,
162    LatticeWord,
163    // Partition validity
164    PartitionValidity,
165    Pending,
166    // Properties wrapper
167    Properties,
168    Revoked,
169    Semistandard,
170    // Tableau validity
171    TableauValidity,
172    Transverse,
173    UnknownDimension,
174    UnvalidatedPartition,
175    UnverifiedBox,
176    UnverifiedTableau,
177    // Type aliases
178    ValidLRTableau,
179    ValidPartition,
180    ValidSchubertClass,
181};
182
183use thiserror::Error;
184
185/// Error types for enumerative geometry computations
186#[derive(Error, Debug, Clone, PartialEq)]
187pub enum EnumerativeError {
188    /// Invalid dimension for the ambient space
189    #[error("Invalid dimension: {0}")]
190    InvalidDimension(String),
191
192    /// Intersection computation failed
193    #[error("Intersection error: {0}")]
194    IntersectionError(String),
195
196    /// Schubert calculus error
197    #[error("Schubert calculus error: {0}")]
198    SchubertError(String),
199
200    /// Gromov-Witten invariant computation error
201    #[error("Gromov-Witten error: {0}")]
202    GromovWittenError(String),
203
204    /// General computational error
205    #[error("Computation error: {0}")]
206    ComputationError(String),
207}
208
209/// Result type for enumerative geometry computations
210pub type EnumerativeResult<T> = Result<T, EnumerativeError>;
211
212// WDVV recursion
213pub use wdvv::WDVVEngine;
214
215// Equivariant localization
216pub use localization::{EquivariantLocalizer, FixedPoint, TorusWeights};
217
218// Matroids
219pub use matroid::{Matroid, ValuatedMatroid};
220
221// CSM classes
222pub use csm::{CSMClass, SegreClass};
223
224// Operadic composition
225pub use operad::{
226    compose_namespaces, composition_multiplicity, interfaces_compatible, ComposableNamespace,
227    Interface, InterfaceDirection,
228};
229
230// Wall-crossing / stability
231pub use stability::{StabilityCondition, Wall, WallCrossingEngine};
232
233// Parallel batch operations for new modules
234#[cfg(feature = "parallel")]
235pub use csm::{csm_of_cells_batch, euler_characteristic_batch};
236#[cfg(feature = "parallel")]
237pub use matroid::{circuits_batch, intersection_cardinality_batch, tutte_polynomial_batch};
238#[cfg(feature = "parallel")]
239pub use stability::{compute_walls_batch, stable_count_batch};
240#[cfg(feature = "parallel")]
241pub use wdvv::rational_curve_count_batch;
242
243// GPU acceleration exports