solverforge_scoring/lib.rs
1/*
2Zero-erasure incremental constraint scoring for SolverForge.
3
4This crate provides monomorphized incremental scoring infrastructure:
5- Zero-erasure incremental constraints (IncrementalUniConstraint, IncrementalBiConstraint, etc.)
6- Incremental score directors (ScoreDirector)
7- Tuple-based constraint sets (zero virtual dispatch)
8
9Architecture:
10All scoring is fully monomorphized - no Box<dyn Trait> in hot paths.
11Closures are stored as generic type parameters, not Arc<dyn Fn>.
12*/
13
14// Zero-erasure architecture intentionally uses complex generic types
15#![allow(clippy::type_complexity)]
16
17// Core modules
18pub mod api;
19pub mod constraint;
20pub mod director;
21pub mod stream;
22
23/* ============================================================================
24Zero-Erasure Incremental Constraints
25============================================================================
26*/
27
28pub use constraint::{
29 GroupedUniConstraint, IncrementalBiConstraint, IncrementalCrossBiConstraint,
30 IncrementalPentaConstraint, IncrementalQuadConstraint, IncrementalTriConstraint,
31 IncrementalUniConstraint, ProjectedGroupedConstraint, ProjectedUniConstraint,
32};
33
34/* ============================================================================
35Constraint Set (Tuple-Based, Zero-Erasure)
36============================================================================
37*/
38
39pub use api::constraint_set::{
40 ConstraintMetadata, ConstraintResult, ConstraintSet, IncrementalConstraint,
41};
42pub use api::weight_overrides::{ConstraintWeightOverrides, WeightProvider};
43
44/* ============================================================================
45Score Directors
46============================================================================
47*/
48
49pub use director::score_director::ScoreDirector;
50pub use director::{Director, DirectorScoreState, RecordingDirector, SolvableSolution};
51
52/* ============================================================================
53Analysis (for score explanation)
54============================================================================
55*/
56
57pub use api::analysis::{
58 ConstraintAnalysis, ConstraintJustification, DetailedConstraintEvaluation,
59 DetailedConstraintMatch, EntityRef, Indictment, IndictmentMap, ScoreExplanation,
60};
61
62/* ============================================================================
63Fluent Constraint Stream API
64============================================================================
65*/
66
67pub use stream::{
68 BiConstraintBuilder, BiConstraintStream, ConstraintFactory, GroupedConstraintBuilder,
69 GroupedConstraintStream, ProjectedBiConstraintBuilder, ProjectedBiConstraintStream,
70 ProjectedConstraintBuilder, ProjectedConstraintStream, ProjectedGroupedConstraintBuilder,
71 ProjectedGroupedConstraintStream, Projection, ProjectionSink, UniConstraintBuilder,
72 UniConstraintStream,
73};