Skip to main content

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    CrossComplementedGroupedConstraint, CrossGroupedConstraint, GroupedUniConstraint,
30    IncrementalBiConstraint, IncrementalCrossBiConstraint, IncrementalPentaConstraint,
31    IncrementalQuadConstraint, IncrementalTriConstraint, IncrementalUniConstraint,
32    ProjectedComplementedGroupedConstraint, 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    IncrementalConstraintSealed,
43};
44pub use api::node_sharing::{SharedNodeDiagnostics, SharedNodeId, SharedNodeOperation};
45pub use api::weight_overrides::{ConstraintWeightOverrides, WeightProvider};
46
47/* ============================================================================
48Score Directors
49============================================================================
50*/
51
52pub use director::score_director::ScoreDirector;
53pub use director::{Director, DirectorScoreState, SolvableSolution};
54
55/* ============================================================================
56Analysis (for score explanation)
57============================================================================
58*/
59
60pub use api::analysis::{
61    ConstraintAnalysis, ConstraintJustification, DetailedConstraintEvaluation,
62    DetailedConstraintMatch, EntityRef, Indictment, IndictmentMap, ScoreExplanation,
63};
64
65/* ============================================================================
66Fluent Constraint Stream API
67============================================================================
68*/
69
70pub use stream::{
71    fixed_weight, hard_weight, BiConstraintBuilder, BiConstraintStream, ConstraintFactory,
72    CrossComplementedGroupedConstraintBuilder, CrossComplementedGroupedConstraintStream,
73    CrossGroupedConstraintBuilder, CrossGroupedConstraintStream, FixedWeight,
74    GroupedConstraintBuilder, GroupedConstraintStream, HardWeight, ProjectedBiConstraintBuilder,
75    ProjectedBiConstraintStream, ProjectedComplementedGroupedConstraintBuilder,
76    ProjectedComplementedGroupedConstraintStream, ProjectedConstraintBuilder,
77    ProjectedConstraintStream, ProjectedGroupedConstraintBuilder, ProjectedGroupedConstraintStream,
78    Projection, ProjectionSink, UniConstraintBuilder, UniConstraintStream,
79};