|
1 | 1 | export @constraints |
2 | 2 |
|
3 | 3 | """ |
4 | | - write_constraints_specification(backend, factorisation, marginalsform, messagesform) |
| 4 | + write_constraints_specification(backend, factorisation, marginalsform, messagesform, options) |
5 | 5 | """ |
6 | 6 | function write_constraints_specification end |
7 | 7 |
|
| 8 | +""" |
| 9 | + write_constraints_specification_options(backend, options) |
| 10 | +""" |
| 11 | +function write_constraints_specification_options end |
| 12 | + |
8 | 13 | """ |
9 | 14 | write_factorisation_constraint(backend, names, entries) |
10 | 15 | """ |
@@ -56,7 +61,12 @@ function write_form_constraint_specification_entry end |
56 | 61 | function write_form_constraint_specification end |
57 | 62 |
|
58 | 63 | macro constraints(constraints_specification) |
59 | | - return generate_constraints_expression(__get_current_backend(), constraints_specification) |
| 64 | + # Empty options is :([]) |
| 65 | + return generate_constraints_expression(__get_current_backend(), :([]), constraints_specification) |
| 66 | +end |
| 67 | + |
| 68 | +macro constraints(constraints_options, constraints_specification) |
| 69 | + return generate_constraints_expression(__get_current_backend(), constraints_options, constraints_specification) |
60 | 70 | end |
61 | 71 |
|
62 | 72 | ## Factorisation constraints |
@@ -125,19 +135,20 @@ end |
125 | 135 |
|
126 | 136 | ## |
127 | 137 |
|
128 | | -function generate_constraints_expression(backend, constraints_specification) |
| 138 | +function generate_constraints_expression(backend, constraints_options, constraints_specification) |
129 | 139 |
|
130 | 140 | if isblock(constraints_specification) |
131 | 141 | generatedfname = gensym(:constraints) |
132 | 142 | generatedfbody = :(function $(generatedfname)() $constraints_specification end) |
133 | | - return :($(generate_constraints_expression(backend, generatedfbody))()) |
| 143 | + return :($(generate_constraints_expression(backend, constraints_options, generatedfbody))()) |
134 | 144 | end |
135 | 145 |
|
136 | 146 | @capture(constraints_specification, (function cs_name_(cs_args__; cs_kwargs__) cs_body_ end) | (function cs_name_(cs_args__) cs_body_ end)) || |
137 | 147 | error("Constraints specification language requires full function definition") |
138 | 148 |
|
139 | | - cs_args = cs_args === nothing ? [] : cs_args |
140 | | - cs_kwargs = cs_kwargs === nothing ? [] : cs_kwargs |
| 149 | + cs_args = cs_args === nothing ? [] : cs_args |
| 150 | + cs_kwargs = cs_kwargs === nothing ? [] : cs_kwargs |
| 151 | + cs_options = write_constraints_specification_options(backend, constraints_options) |
141 | 152 |
|
142 | 153 | lhs_dict = Dict{UInt, FactorisationConstraintLHSInfo}() |
143 | 154 |
|
@@ -308,7 +319,13 @@ function generate_constraints_expression(backend, constraints_specification) |
308 | 319 | return expression |
309 | 320 | end |
310 | 321 |
|
311 | | - return_specification = write_constraints_specification(backend, factorisation_constraints_symbol, marginals_form_constraints_symbol, messages_form_constraints_symbol) |
| 322 | + return_specification = write_constraints_specification( |
| 323 | + backend, |
| 324 | + factorisation_constraints_symbol, |
| 325 | + marginals_form_constraints_symbol, |
| 326 | + messages_form_constraints_symbol, |
| 327 | + cs_options |
| 328 | + ) |
312 | 329 |
|
313 | 330 | res = quote |
314 | 331 | function $cs_name($(cs_args...); $(cs_kwargs...)) |
|
0 commit comments