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 CrossGroupedConstraint, GroupedUniConstraint, IncrementalBiConstraint,
30 IncrementalCrossBiConstraint, IncrementalPentaConstraint, IncrementalQuadConstraint,
31 IncrementalTriConstraint, IncrementalUniConstraint, ProjectedComplementedGroupedConstraint,
32 ProjectedGroupedConstraint, ProjectedUniConstraint,
33};
34
35/* ============================================================================
36Constraint Set (Tuple-Based, Zero-Erasure)
37============================================================================
38*/
39
40pub use api::constraint_set::{
41 ConstraintMetadata, ConstraintResult, ConstraintSet, IncrementalConstraint,
42};
43pub use api::weight_overrides::{ConstraintWeightOverrides, WeightProvider};
44
45/* ============================================================================
46Score Directors
47============================================================================
48*/
49
50pub use director::score_director::ScoreDirector;
51pub use director::{Director, DirectorScoreState, SolvableSolution};
52
53/* ============================================================================
54Analysis (for score explanation)
55============================================================================
56*/
57
58pub use api::analysis::{
59 ConstraintAnalysis, ConstraintJustification, DetailedConstraintEvaluation,
60 DetailedConstraintMatch, EntityRef, Indictment, IndictmentMap, ScoreExplanation,
61};
62
63/* ============================================================================
64Fluent Constraint Stream API
65============================================================================
66*/
67
68pub use stream::{
69 fixed_weight, hard_weight, BiConstraintBuilder, BiConstraintStream, ConstraintFactory,
70 CrossGroupedConstraintBuilder, CrossGroupedConstraintStream, FixedWeight,
71 GroupedConstraintBuilder, GroupedConstraintStream, HardWeight, ProjectedBiConstraintBuilder,
72 ProjectedBiConstraintStream, ProjectedComplementedGroupedConstraintBuilder,
73 ProjectedComplementedGroupedConstraintStream, ProjectedConstraintBuilder,
74 ProjectedConstraintStream, ProjectedGroupedConstraintBuilder, ProjectedGroupedConstraintStream,
75 Projection, ProjectionSink, UniConstraintBuilder, UniConstraintStream,
76};