Skip to content

Commit 18716ff

Browse files
authored
Merge pull request #716 from conjure-cp/nik/matrix/fix-indices
fix(parser/json): JSON parser failing on explicit matrix index domains
2 parents 44872a3 + 1d839c5 commit 18716ff

20 files changed

+227
-106
lines changed

conjure_oxide/tests/integration/basic/matrix/01-indexing/input-expected-rule-trace-human.txt

+12-12
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ find a: matrix indexed by [[int(1..5)]] of bool
44

55
such that
66

7-
(a[[1]] = true),
8-
(a[[2]] = true),
9-
(a[[3]] = true),
10-
(a[[4]] = true),
11-
(a[[5]] = Not(a[[4]]))
7+
(a[1] = true),
8+
(a[2] = true),
9+
(a[3] = true),
10+
(a[4] = true),
11+
(a[5] = Not(a[4]))
1212

1313
--
1414

15-
Not(a[[4]]),
15+
Not(a[4]),
1616
~~> not_constraint_to_reify ([("Minion", 4090)])
17-
Reify(a[[4]], false)
17+
Reify(a[4], false)
1818

1919
--
2020

@@ -24,9 +24,9 @@ find a: matrix indexed by [[int(1..5)]] of bool
2424

2525
such that
2626

27-
(a[[1]] = true),
28-
(a[[2]] = true),
29-
(a[[3]] = true),
30-
(a[[4]] = true),
31-
(a[[5]] = Reify(a[[4]], false))
27+
(a[1] = true),
28+
(a[2] = true),
29+
(a[3] = true),
30+
(a[4] = true),
31+
(a[5] = Reify(a[4], false))
3232

conjure_oxide/tests/integration/basic/matrix/02-2d-slicing/input-expected-rule-trace-human.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ allDiff(a[2,..]),
99
allDiff(a[..,1]),
1010
allDiff(a[..,2]),
1111
allDiff(a[..,3]),
12-
(a[[1, 1]] = 1),
13-
(a[[2, 2]] = 1)
12+
(a[1, 1] = 1),
13+
(a[2, 2] = 1)
1414

1515
--
1616

@@ -25,6 +25,6 @@ allDiff(a[2,..]),
2525
allDiff(a[..,1]),
2626
allDiff(a[..,2]),
2727
allDiff(a[..,3]),
28-
(a[[1, 1]] = 1),
29-
(a[[2, 2]] = 1)
28+
(a[1, 1] = 1),
29+
(a[2, 2] = 1)
3030

conjure_oxide/tests/integration/basic/matrix/03-domain-letting/input-expected-rule-trace-human.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ allDiff(a[2,..]),
1010
allDiff(a[..,1]),
1111
allDiff(a[..,2]),
1212
allDiff(a[..,3]),
13-
(a[[1, 1]] = 1),
14-
(a[[2, 2]] = 1)
13+
(a[1, 1] = 1),
14+
(a[2, 2] = 1)
1515

1616
--
1717

@@ -20,16 +20,16 @@ allDiff(a[2,..]),
2020
allDiff(a[..,1]),
2121
allDiff(a[..,2]),
2222
allDiff(a[..,3]),
23-
(a[[1, 1]] = 1),
24-
(a[[2, 2]] = 1),
23+
(a[1, 1] = 1),
24+
(a[2, 2] = 1),
2525
~~> substitute_domain_lettings ([("Base", 5000)])
2626
allDiff(a[1,..]),
2727
allDiff(a[2,..]),
2828
allDiff(a[..,1]),
2929
allDiff(a[..,2]),
3030
allDiff(a[..,3]),
31-
(a[[1, 1]] = 1),
32-
(a[[2, 2]] = 1)
31+
(a[1, 1] = 1),
32+
(a[2, 2] = 1)
3333

3434
--
3535

@@ -45,6 +45,6 @@ allDiff(a[2,..]),
4545
allDiff(a[..,1]),
4646
allDiff(a[..,2]),
4747
allDiff(a[..,3]),
48-
(a[[1, 1]] = 1),
49-
(a[[2, 2]] = 1)
48+
(a[1, 1] = 1),
49+
(a[2, 2] = 1)
5050

Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
Model before rewriting:
22

3-
letting a be [[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)]
3+
letting a be [[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)]
44
find b: int(1..10)
55

66
such that
77

8-
(b > a[[3, 3]])
8+
(b > a[3, 3])
99

1010
--
1111

12-
(b > a[[3, 3]]),
12+
(b > a[3, 3]),
1313
~~> gt_to_geq ([("Minion", 8400)])
14-
(Sum([b, -1]) >= a[[3, 3]])
14+
(Sum([b, -1]) >= a[3, 3])
1515

1616
--
1717

1818
a,
1919
~~> substitute_value_lettings ([("Base", 5000)])
20-
[[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)]
20+
[[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)]
2121

2222
--
2323

24-
(Sum([b, -1]) >= [[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)][[3, 3]]),
24+
(Sum([b, -1]) >= [[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)][3, 3]),
2525
~~> flatten_generic ([("Minion", 4200)])
26-
(__0 >= [[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)][[3, 3]])
26+
(__0 >= [[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)][3, 3])
2727
new variables:
2828
find __0: int(0..9)
2929
new constraints:
@@ -36,14 +36,20 @@ and([SumLeq([b, -1], __0),SumGeq([b, -1], __0);int(1..)])
3636

3737
--
3838

39+
[[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)][3, 3],
40+
~~> matrix_to_list ([("Base", 2000)])
41+
[[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..)][3, 3]
42+
43+
--
44+
3945
Final model:
4046

41-
letting a be [[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)]
47+
letting a be [[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..3)]
4248
find b: int(1..10)
4349
find __0: int(0..9)
4450

4551
such that
4652

47-
(__0 >= [[1,2,3;int(1..)],[4,5,6;int(1..)],[7,8,9;int(1..)];int(1..)][[3, 3]]),
53+
(__0 >= [[1,2,3;int(1..3)],[4,5,6;int(1..3)],[7,8,9;int(1..3)];int(1..)][3, 3]),
4854
and([SumLeq([b, -1], __0),SumGeq([b, -1], __0);int(1..)])
4955

conjure_oxide/tests/integration/basic/matrix/04-value-letting/input.expected-parse.serialised.json

+16-4
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,10 @@
153153
{
154154
"IntDomain": [
155155
{
156-
"UnboundedR": 1
156+
"Bounded": [
157+
1,
158+
3
159+
]
157160
}
158161
]
159162
}
@@ -213,7 +216,10 @@
213216
{
214217
"IntDomain": [
215218
{
216-
"UnboundedR": 1
219+
"Bounded": [
220+
1,
221+
3
222+
]
217223
}
218224
]
219225
}
@@ -273,7 +279,10 @@
273279
{
274280
"IntDomain": [
275281
{
276-
"UnboundedR": 1
282+
"Bounded": [
283+
1,
284+
3
285+
]
277286
}
278287
]
279288
}
@@ -285,7 +294,10 @@
285294
{
286295
"IntDomain": [
287296
{
288-
"UnboundedR": 1
297+
"Bounded": [
298+
1,
299+
3
300+
]
289301
}
290302
]
291303
}

conjure_oxide/tests/integration/basic/matrix/04-value-letting/input.expected-rewrite.serialised.json

+28-7
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@
9292
{
9393
"IntDomain": [
9494
{
95-
"UnboundedR": 1
95+
"Bounded": [
96+
1,
97+
3
98+
]
9699
}
97100
]
98101
}
@@ -152,7 +155,10 @@
152155
{
153156
"IntDomain": [
154157
{
155-
"UnboundedR": 1
158+
"Bounded": [
159+
1,
160+
3
161+
]
156162
}
157163
]
158164
}
@@ -212,7 +218,10 @@
212218
{
213219
"IntDomain": [
214220
{
215-
"UnboundedR": 1
221+
"Bounded": [
222+
1,
223+
3
224+
]
216225
}
217226
]
218227
}
@@ -420,7 +429,10 @@
420429
{
421430
"IntDomain": [
422431
{
423-
"UnboundedR": 1
432+
"Bounded": [
433+
1,
434+
3
435+
]
424436
}
425437
]
426438
}
@@ -480,7 +492,10 @@
480492
{
481493
"IntDomain": [
482494
{
483-
"UnboundedR": 1
495+
"Bounded": [
496+
1,
497+
3
498+
]
484499
}
485500
]
486501
}
@@ -540,7 +555,10 @@
540555
{
541556
"IntDomain": [
542557
{
543-
"UnboundedR": 1
558+
"Bounded": [
559+
1,
560+
3
561+
]
544562
}
545563
]
546564
}
@@ -552,7 +570,10 @@
552570
{
553571
"IntDomain": [
554572
{
555-
"UnboundedR": 1
573+
"Bounded": [
574+
1,
575+
3
576+
]
556577
}
557578
]
558579
}
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
Model before rewriting:
22

3-
letting a be [[1,2,3;int(1..)],[1,3,2;int(1..)],[3,2,1;int(1..)];int(1..)]
3+
letting a be [[1,2,3;int(1,2,4)],[1,3,2;int(1,2,4)],[3,2,1;int(1,2,4)];int(-2..0)]
44
find b: int(1..5)
55

66
such that
77

8-
(b < a[[0, 1]])
8+
(b < a[0, 1])
99

1010
--
1111

12-
(b < a[[0, 1]]),
12+
(b < a[0, 1]),
1313
~~> lt_to_leq ([("Minion", 8400)])
14-
(b <= Sum([a[[0, 1]], -1]))
14+
(b <= Sum([a[0, 1], -1]))
1515

1616
--
1717

1818
a,
1919
~~> substitute_value_lettings ([("Base", 5000)])
20-
[[1,2,3;int(1..)],[1,3,2;int(1..)],[3,2,1;int(1..)];int(1..)]
20+
[[1,2,3;int(1,2,4)],[1,3,2;int(1,2,4)],[3,2,1;int(1,2,4)];int(-2..0)]
2121

2222
--
2323

2424
Final model:
2525

26-
letting a be [[1,2,3;int(1..)],[1,3,2;int(1..)],[3,2,1;int(1..)];int(1..)]
26+
letting a be [[1,2,3;int(1,2,4)],[1,3,2;int(1,2,4)],[3,2,1;int(1,2,4)];int(-2..0)]
2727
find b: int(1..5)
2828

2929
such that
3030

31-
(b <= Sum([[[1,2,3;int(1..)],[1,3,2;int(1..)],[3,2,1;int(1..)];int(1..)][[0, 1]], -1]))
31+
(b <= Sum([[[1,2,3;int(1,2,4)],[1,3,2;int(1,2,4)],[3,2,1;int(1,2,4)];int(-2..0)][0, 1], -1]))
3232

conjure_oxide/tests/integration/basic/matrix/05-value-letting-index/input.expected-parse.serialised.json

+25-4
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,13 @@
153153
{
154154
"IntDomain": [
155155
{
156-
"UnboundedR": 1
156+
"Single": 1
157+
},
158+
{
159+
"Single": 2
160+
},
161+
{
162+
"Single": 4
157163
}
158164
]
159165
}
@@ -213,7 +219,13 @@
213219
{
214220
"IntDomain": [
215221
{
216-
"UnboundedR": 1
222+
"Single": 1
223+
},
224+
{
225+
"Single": 2
226+
},
227+
{
228+
"Single": 4
217229
}
218230
]
219231
}
@@ -273,7 +285,13 @@
273285
{
274286
"IntDomain": [
275287
{
276-
"UnboundedR": 1
288+
"Single": 1
289+
},
290+
{
291+
"Single": 2
292+
},
293+
{
294+
"Single": 4
277295
}
278296
]
279297
}
@@ -285,7 +303,10 @@
285303
{
286304
"IntDomain": [
287305
{
288-
"UnboundedR": 1
306+
"Bounded": [
307+
-2,
308+
0
309+
]
289310
}
290311
]
291312
}

0 commit comments

Comments
 (0)