problemreductions/rules/
mod.rs1pub mod analysis;
4pub mod cost;
5pub mod registry;
6pub use cost::{CustomCost, Minimize, MinimizeSteps, PathCostFn};
7pub use registry::{ReductionEntry, ReductionOverhead};
8
9mod circuit_spinglass;
10mod coloring_qubo;
11mod factoring_circuit;
12mod graph;
13mod kcoloring_casts;
14mod ksatisfiability_casts;
15mod ksatisfiability_qubo;
16mod ksatisfiability_subsetsum;
17mod maximumindependentset_casts;
18mod maximumindependentset_gridgraph;
19mod maximumindependentset_maximumclique;
20mod maximumindependentset_maximumsetpacking;
21mod maximumindependentset_triangular;
22mod maximummatching_maximumsetpacking;
23mod maximumsetpacking_casts;
24mod maximumsetpacking_qubo;
25mod minimumvertexcover_maximumindependentset;
26mod minimumvertexcover_minimumsetcovering;
27mod sat_circuitsat;
28mod sat_coloring;
29mod sat_ksat;
30mod sat_maximumindependentset;
31mod sat_minimumdominatingset;
32mod spinglass_casts;
33mod spinglass_maxcut;
34mod spinglass_qubo;
35mod traits;
36
37pub mod unitdiskmapping;
38
39#[cfg(feature = "ilp-solver")]
40mod binpacking_ilp;
41#[cfg(feature = "ilp-solver")]
42mod circuit_ilp;
43#[cfg(feature = "ilp-solver")]
44mod coloring_ilp;
45#[cfg(feature = "ilp-solver")]
46mod factoring_ilp;
47#[cfg(feature = "ilp-solver")]
48mod ilp_bool_ilp_i32;
49#[cfg(feature = "ilp-solver")]
50mod ilp_qubo;
51#[cfg(feature = "ilp-solver")]
52mod maximumclique_ilp;
53#[cfg(feature = "ilp-solver")]
54mod maximummatching_ilp;
55#[cfg(feature = "ilp-solver")]
56mod maximumsetpacking_ilp;
57#[cfg(feature = "ilp-solver")]
58mod minimumdominatingset_ilp;
59#[cfg(feature = "ilp-solver")]
60mod minimumsetcovering_ilp;
61#[cfg(feature = "ilp-solver")]
62mod qubo_ilp;
63#[cfg(feature = "ilp-solver")]
64mod travelingsalesman_ilp;
65
66pub use graph::{
67 NeighborInfo, NeighborTree, ReductionChain, ReductionEdgeInfo, ReductionGraph, ReductionPath,
68 ReductionStep, TraversalDirection,
69};
70pub use traits::{ReduceTo, ReductionAutoCast, ReductionResult};
71
72#[macro_export]
93macro_rules! impl_variant_reduction {
94 ($problem:ident,
95 < $($src_param:ty),+ > => < $($dst_param:ty),+ >,
96 fields: [$($field:ident),+],
97 |$src:ident| $body:expr) => {
98 #[$crate::reduction(
99 overhead = {
100 $crate::rules::registry::ReductionOverhead::identity(
101 &[$(stringify!($field)),+]
102 )
103 }
104 )]
105 impl $crate::rules::ReduceTo<$problem<$($dst_param),+>>
106 for $problem<$($src_param),+>
107 {
108 type Result = $crate::rules::ReductionAutoCast<
109 $problem<$($src_param),+>,
110 $problem<$($dst_param),+>,
111 >;
112 fn reduce_to(&self) -> Self::Result {
113 let $src = self;
114 $crate::rules::ReductionAutoCast::new($body)
115 }
116 }
117 };
118}