conjure_cp_core/ast/
mod.rs1pub mod abstract_comprehension;
2pub mod ac_operators;
3pub mod assertions;
4mod atom;
5pub mod categories;
6mod cnf_clause;
7pub mod comprehension;
8pub mod declaration;
9mod domains;
10pub mod eval;
11mod expressions;
12mod literals;
13pub mod matrix;
14mod metadata;
15mod model;
16mod name;
17pub mod pretty;
18pub mod records;
19mod reference;
20mod sat_encoding;
21pub mod serde;
22mod symbol_table;
23mod types;
24mod variables;
25
26mod moo;
27mod partial_eval;
28
29pub use atom::Atom;
30pub use cnf_clause::CnfClause;
31pub use declaration::{DeclarationKind, DeclarationPtr};
32pub use domains::{
33 Domain, DomainOpError, DomainPtr, FuncAttr, GroundDomain, HasDomain, IntVal, JectivityAttr,
34 MSetAttr, PartialityAttr, Range, RecordEntry, RecordEntryGround, SetAttr, UnresolvedDomain,
35};
36pub use eval::eval_constant;
37pub use expressions::Expression;
38pub use literals::AbstractLiteral;
39pub use literals::Literal;
40pub use metadata::Metadata;
41pub use model::*;
42pub use moo::Moo;
43pub use name::Name;
44pub use partial_eval::run_partial_evaluator;
45pub use reference::Reference;
46pub use sat_encoding::SATIntEncoding;
47pub use symbol_table::{SymbolTable, SymbolTablePtr};
48pub use types::*;
49pub use variables::DecisionVariable;
50
51#[macro_export]
58macro_rules! matrix {
59 () => (
61 $crate::into_matrix![]
62 );
63
64 (;$domain:expr) => (
65 $crate::into_matrix![;$domain]
66 );
67
68 ($x:expr) => (
69 $crate::into_matrix![std::vec![$x]]
70 );
71
72 ($x:expr;$domain:expr) => (
73 $crate::into_matrix![std::vec![$x];$domain]
74 );
75
76 ($($x:expr),*) => (
77 $crate::into_matrix![std::vec![$($x),*]]
78 );
79
80 ($($x:expr),*;$domain:expr) => (
81 $crate::into_matrix![std::vec![$($x),*];$domain]
82 );
83
84 ($($x:expr,)*) => (
85 $crate::into_matrix![std::vec![$($x),*]]
86 );
87
88 ($($x:expr,)*;$domain:expr) => (
89 $crate::into_matrix![std::vec![$($x),*];$domain]
90 )
91}
92
93#[macro_export]
100macro_rules! into_matrix {
101 () => (
102 $crate::into_matrix![std::vec::Vec::new()]
103 );
104
105 (;$domain:expr) => (
106 $crate::into_matrix![std::vec::Vec::new();$domain]
107 );
108 ($x:expr) => (
109 $crate::ast::AbstractLiteral::matrix_implied_indices($x)
110 );
111 ($x:expr;$domain:expr) => (
112 $crate::ast::AbstractLiteral::Matrix($x,$domain)
113 );
114}
115
116#[macro_export]
122macro_rules! matrix_expr {
123 () => (
124 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![])
125 );
126
127 (;$domain:expr) => (
128 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
129 );
130
131
132 ($x:expr) => (
133 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$x])
134 );
135 ($x:expr;$domain:expr) => (
136 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![;$domain])
137 );
138
139 ($($x:expr),+) => (
140 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
141 );
142
143 ($($x:expr),+;$domain:expr) => (
144 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
145 );
146
147 ($($x:expr,)+) => (
148 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+])
149 );
150
151 ($($x:expr,)+;$domain:expr) => (
152 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::matrix![$($x),+;$domain])
153 )
154}
155
156#[macro_export]
163macro_rules! into_matrix_expr {
164 () => (
165 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![])
166 );
167
168 (;$domain:expr) => (
169 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![;$domain])
170 );
171 ($x:expr) => (
172 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x])
173 );
174 ($x:expr;$domain:expr) => (
175 $crate::ast::Expression::AbstractLiteral($crate::ast::Metadata::new(),$crate::into_matrix![$x;$domain])
176 );
177}