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, SimpleScoreDirector,
46};
47
48// ============================================================================
49// Analysis (for score explanation)
50// ============================================================================
51
52pub use api::analysis::{
53 ConstraintAnalysis, ConstraintJustification, DetailedConstraintEvaluation,
54 DetailedConstraintMatch, EntityRef, Indictment, IndictmentMap, ScoreExplanation,
55};
56
57// ============================================================================
58// Fluent Constraint Stream API
59// ============================================================================
60
61pub use stream::{
62 BiConstraintBuilder, BiConstraintStream, ConstraintFactory, GroupedConstraintBuilder,
63 GroupedConstraintStream, UniConstraintBuilder, UniConstraintStream,
64};