-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathlib.rs
More file actions
89 lines (81 loc) · 3.31 KB
/
lib.rs
File metadata and controls
89 lines (81 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! # Problem Reductions
//!
//! NP-hard problem definitions and reductions.
//! See the [user guide](https://codingthrust.github.io/problem-reductions/) for tutorials and examples.
//!
//! ## API Overview
//!
//! | Module | Purpose |
//! |--------|---------|
//! | [`models`] | Problem types — [`graph`](models::graph), [`formula`](models::formula), [`set`](models::set), [`algebraic`](models::algebraic), [`misc`](models::misc) |
//! | [`rules`] | Reduction rules, [`ReductionGraph`](rules::ReductionGraph) for path search |
//! | [`solvers`] | [`BruteForce`] and [`ILPSolver`](solvers::ILPSolver) |
//! | [`topology`] | Graph types — [`SimpleGraph`](topology::SimpleGraph), [`UnitDiskGraph`](topology::UnitDiskGraph), etc. |
//! | [`traits`] | Core traits — [`Problem`], [`OptimizationProblem`], [`SatisfactionProblem`] |
//! | [`types`] | [`SolutionSize`], [`Direction`], [`ProblemSize`], [`WeightElement`] |
//! | [`variant`] | Variant parameter system for problem type parameterization |
//!
//! Use [`prelude`] for convenient imports.
pub mod config;
pub mod error;
pub mod export;
pub(crate) mod expr;
pub mod io;
pub mod models;
pub mod registry;
pub mod rules;
pub mod solvers;
pub mod topology;
pub mod traits;
#[allow(dead_code)]
pub(crate) mod truth_table;
pub mod types;
pub mod variant;
/// Prelude module for convenient imports.
pub mod prelude {
// Problem types
pub use crate::models::algebraic::{BMF, QUBO};
pub use crate::models::formula::{CNFClause, CircuitSAT, KSatisfiability, Satisfiability};
pub use crate::models::graph::{BicliqueCover, SpinGlass};
pub use crate::models::graph::{
KColoring, MaxCut, MaximalIS, MaximumClique, MaximumIndependentSet, MaximumMatching,
MinimumDominatingSet, MinimumVertexCover, TravelingSalesman,
};
pub use crate::models::misc::{BinPacking, Factoring, Knapsack, PaintShop};
pub use crate::models::set::{MaximumSetPacking, MinimumSetCovering};
// Core traits
pub use crate::rules::{ReduceTo, ReductionResult};
pub use crate::solvers::{BruteForce, Solver};
pub use crate::traits::{OptimizationProblem, Problem, SatisfactionProblem};
// Types
pub use crate::error::{ProblemError, Result};
pub use crate::types::{Direction, One, ProblemSize, SolutionSize, Unweighted};
}
// Re-export commonly used items at crate root
pub use error::{ProblemError, Result};
pub use expr::{asymptotic_normal_form, AsymptoticAnalysisError, Expr};
pub use registry::{ComplexityClass, ProblemInfo};
pub use solvers::{BruteForce, Solver};
pub use traits::{OptimizationProblem, Problem, SatisfactionProblem};
pub use types::{
Direction, NumericSize, One, ProblemSize, SolutionSize, Unweighted, WeightElement,
};
// Re-export proc macros for reduction registration and variant declaration
pub use problemreductions_macros::{declare_variants, reduction};
// Re-export inventory so `declare_variants!` can use `$crate::inventory::submit!`
pub use inventory;
#[cfg(test)]
#[path = "unit_tests/graph_models.rs"]
mod test_graph_models;
#[cfg(test)]
#[path = "unit_tests/property.rs"]
mod test_property;
#[cfg(test)]
#[path = "unit_tests/reduction_graph.rs"]
mod test_reduction_graph;
#[cfg(test)]
#[path = "unit_tests/trait_consistency.rs"]
mod test_trait_consistency;
#[cfg(test)]
#[path = "unit_tests/unitdiskmapping_algorithms/mod.rs"]
mod test_unitdiskmapping_algorithms;