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**: Geometric access control via Schubert calculus
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#[cfg(feature = "gf2")]
86pub mod finite_field;
87pub mod kazhdan_lusztig;
88#[cfg(feature = "gf2")]
89pub mod representability;
90#[cfg(feature = "gf2")]
91pub mod weight_enumerator;
92
93// Re-export core types
94#[cfg(feature = "tropical-schubert")]
95pub use geometric_algebra::tropicalize_multivector;
96pub use geometric_algebra::{
97    quantum_k_theory, signatures, GeometricProjectiveSpace, GeometricSchubertClass,
98    GeometricVariety,
99};
100pub use gromov_witten::{CurveClass as GWCurveClass, GromovWittenInvariant, QuantumCohomology};
101pub use higher_genus::{
102    AdvancedCurveCounting, DTInvariant, HigherGenusCurve, JacobianData, PTInvariant,
103};
104pub use intersection::{
105    AlgebraicVariety, ChowClass, Constraint, Grassmannian, IntersectionNumber, IntersectionPoint,
106    IntersectionRing, MockMultivector, ProjectiveSpace, QuantumProduct,
107};
108pub use moduli_space::{CurveClass, ModuliSpace, TautologicalClass};
109pub use performance::{
110    CurveBatchProcessor, FastIntersectionComputer, MemoryPool, SparseSchubertMatrix,
111    WasmPerformanceConfig,
112};
113
114// Schubert calculus exports
115pub use schubert::{FlagVariety, IntersectionResult, SchubertCalculus, SchubertClass};
116
117// Littlewood-Richardson exports
118pub use littlewood_richardson::{
119    lr_coefficient, schubert_product, Partition, SkewShape, SkewTableau,
120};
121
122// Parallel batch operations (when parallel feature is enabled)
123#[cfg(feature = "parallel")]
124pub use geometric_algebra::geometric_intersection_batch;
125#[cfg(feature = "parallel")]
126pub use littlewood_richardson::lr_coefficients_batch;
127#[cfg(feature = "parallel")]
128pub use namespace::{
129    capability_accessible_batch, count_configurations_batch, namespace_intersection_batch,
130};
131#[cfg(feature = "parallel")]
132pub use schubert::multi_intersect_batch;
133#[cfg(feature = "parallel")]
134pub use tropical_curves::{mikhalkin_correspondence_verify_batch, verify_mikhalkin_gw_batch};
135
136// Namespace exports for geometric access control
137pub use namespace::{
138    capability_accessible, namespace_intersection, Capability, CapabilityId, Namespace,
139    NamespaceBuilder, NamespaceError, NamespaceIntersection, QuantumCapability,
140};
141
142// Tropical curves
143pub use tropical_curves::{
144    verify_mikhalkin_gw, MikhalkinResult, TropicalCurve, TropicalEdge, TropicalIntersection,
145    TropicalModuliSpace, TropicalPoint,
146};
147
148// Optional tropical Schubert exports
149#[cfg(all(feature = "tropical-schubert", feature = "parallel"))]
150pub use geometric_algebra::tropicalize_multivector_batch;
151#[cfg(all(feature = "tropical-schubert", feature = "parallel"))]
152pub use tropical_schubert::{tropical_convexity_batch, tropical_intersection_batch};
153#[cfg(feature = "tropical-schubert")]
154pub use tropical_schubert::{
155    tropical_convexity_check, tropical_intersection_count, TropicalResult, TropicalSchubertClass,
156};
157
158// Phantom types for compile-time verification
159pub use phantom::{
160    // Box containment
161    BoxContainment,
162    Deficient,
163    Excess,
164    FitsInBox,
165    // Grant states
166    GrantState,
167    Granted,
168    // Intersection dimension
169    IntersectionDimension,
170    LatticeWord,
171    // Partition validity
172    PartitionValidity,
173    Pending,
174    // Properties wrapper
175    Properties,
176    Revoked,
177    Semistandard,
178    // Tableau validity
179    TableauValidity,
180    Transverse,
181    UnknownDimension,
182    UnvalidatedPartition,
183    UnverifiedBox,
184    UnverifiedTableau,
185    // Type aliases
186    ValidLRTableau,
187    ValidPartition,
188    ValidSchubertClass,
189};
190
191use thiserror::Error;
192
193/// Error types for enumerative geometry computations
194#[derive(Error, Debug, Clone, PartialEq)]
195pub enum EnumerativeError {
196    /// Invalid dimension for the ambient space
197    #[error("Invalid dimension: {0}")]
198    InvalidDimension(String),
199
200    /// Intersection computation failed
201    #[error("Intersection error: {0}")]
202    IntersectionError(String),
203
204    /// Schubert calculus error
205    #[error("Schubert calculus error: {0}")]
206    SchubertError(String),
207
208    /// Gromov-Witten invariant computation error
209    #[error("Gromov-Witten error: {0}")]
210    GromovWittenError(String),
211
212    /// General computational error
213    #[error("Computation error: {0}")]
214    ComputationError(String),
215
216    /// Matroid representability error
217    #[error("Representability error: {0}")]
218    RepresentabilityError(String),
219
220    /// Linear code error
221    #[error("Code error: {0}")]
222    CodeError(String),
223
224    /// Invalid field size (must be a prime power)
225    #[error("Invalid field size: {q} is not a prime power")]
226    InvalidFieldSize { q: u64 },
227
228    /// Search space too large for exhaustive computation
229    #[error("Search space too large: {description}")]
230    SearchSpaceTooLarge { description: String },
231}
232
233/// Result type for enumerative geometry computations
234pub type EnumerativeResult<T> = Result<T, EnumerativeError>;
235
236// WDVV recursion
237pub use wdvv::WDVVEngine;
238
239// Equivariant localization
240pub use localization::{EquivariantLocalizer, FixedPoint, TorusWeights};
241
242// Matroids
243pub use matroid::{Matroid, ValuatedMatroid};
244
245// Kazhdan-Lusztig polynomials
246pub use kazhdan_lusztig::{
247    flag_f_vector, inverse_kl_polynomial, kl_is_non_negative, kl_polynomial, z_polynomial,
248};
249
250// GF(2)-dependent modules
251#[cfg(feature = "gf2")]
252pub use finite_field::{
253    grassmannian_poincare_polynomial, grassmannian_points, point_counts_over_extensions,
254    schubert_cell_points, schubert_poincare_polynomial, schubert_variety_points,
255    schubert_zeta_exponents,
256};
257#[cfg(feature = "gf2")]
258pub use representability::{
259    column_matroid, dual_fano_matroid, fano_matroid, has_minor, is_binary, is_regular, is_ternary,
260    standard_representation, RepresentabilityResult,
261};
262#[cfg(feature = "gf2")]
263pub use weight_enumerator::{
264    extended_golay_code, gilbert_varshamov_bound, hamming_bound, hamming_code, plotkin_bound,
265    reed_muller_code, simplex_code, singleton_bound, BinaryCode,
266};
267
268// CSM classes
269pub use csm::{CSMClass, SegreClass};
270
271// Operadic composition
272pub use operad::{
273    compose_namespaces, composition_multiplicity, interfaces_compatible, ComposableNamespace,
274    Interface, InterfaceDirection,
275};
276
277// Wall-crossing / stability
278pub use stability::{StabilityCondition, Wall, WallCrossingEngine};
279
280// Parallel batch operations for new modules
281#[cfg(feature = "parallel")]
282pub use csm::{csm_of_cells_batch, euler_characteristic_batch};
283#[cfg(feature = "parallel")]
284pub use matroid::{circuits_batch, intersection_cardinality_batch, tutte_polynomial_batch};
285#[cfg(feature = "parallel")]
286pub use stability::{compute_walls_batch, stable_count_batch};
287#[cfg(feature = "parallel")]
288pub use wdvv::rational_curve_count_batch;
289
290// GPU acceleration exports