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