solverforge_scoring/
lib.rs

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