7
7
from comb_spec_searcher import CombinatorialSpecification
8
8
from permuta import Av , Perm
9
9
from tilings import GriddedPerm , Tiling
10
- from tilings .algorithms import Factor
11
- from tilings .assumptions import TrackingAssumption
10
+ from tilings .map import RowColMap
11
+ from tilings .parameter_counter import ParameterCounter , PreimageCounter
12
12
from tilings .strategy_pack import TileScopePack
13
13
from tilings .tilescope import TileScope
14
14
@@ -31,25 +31,54 @@ def tplaced_factored2(tplaced):
31
31
32
32
@pytest .fixture
33
33
def tplaced_tracked (tplaced ):
34
- return Tiling (
35
- tplaced .obstructions ,
36
- tplaced .requirements ,
37
- [
38
- TrackingAssumption ([GriddedPerm .single_cell ((0 ,), (0 , 0 ))]),
39
- TrackingAssumption ([GriddedPerm .single_cell ((0 ,), (0 , 0 ))]),
40
- TrackingAssumption ([GriddedPerm .single_cell ((0 ,), (2 , 0 ))]),
41
- ],
34
+ preimg0 = PreimageCounter (
35
+ Tiling (
36
+ obstructions = (
37
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (3 , 0 ))),
38
+ GriddedPerm ((0 , 1 ), ((1 , 0 ), (3 , 0 ))),
39
+ GriddedPerm ((0 , 1 ), ((2 , 1 ), (2 , 1 ))),
40
+ GriddedPerm ((1 , 0 ), ((2 , 1 ), (2 , 1 ))),
41
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (0 , 0 ))),
42
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (1 , 0 ))),
43
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (1 , 0 ), (1 , 0 ))),
44
+ GriddedPerm ((0 , 2 , 1 ), ((1 , 0 ), (1 , 0 ), (1 , 0 ))),
45
+ GriddedPerm ((0 , 2 , 1 ), ((3 , 0 ), (3 , 0 ), (3 , 0 ))),
46
+ ),
47
+ requirements = ((GriddedPerm ((0 ,), ((2 , 1 ),)),),),
48
+ parameters = (),
49
+ ),
50
+ RowColMap ({0 : 0 , 1 : 1 }, {0 : 0 , 1 : 0 , 2 : 1 , 3 : 2 }),
51
+ )
52
+ preimg2 = PreimageCounter (
53
+ Tiling (
54
+ obstructions = (
55
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (2 , 0 ))),
56
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (3 , 0 ))),
57
+ GriddedPerm ((0 , 1 ), ((1 , 1 ), (1 , 1 ))),
58
+ GriddedPerm ((1 , 0 ), ((1 , 1 ), (1 , 1 ))),
59
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (0 , 0 ))),
60
+ GriddedPerm ((0 , 2 , 1 ), ((2 , 0 ), (2 , 0 ), (2 , 0 ))),
61
+ GriddedPerm ((0 , 2 , 1 ), ((2 , 0 ), (2 , 0 ), (3 , 0 ))),
62
+ GriddedPerm ((0 , 2 , 1 ), ((2 , 0 ), (3 , 0 ), (3 , 0 ))),
63
+ GriddedPerm ((0 , 2 , 1 ), ((3 , 0 ), (3 , 0 ), (3 , 0 ))),
64
+ ),
65
+ requirements = ((GriddedPerm ((0 ,), ((1 , 1 ),)),),),
66
+ parameters = (),
67
+ ),
68
+ RowColMap ({0 : 0 , 1 : 1 }, {0 : 0 , 1 : 1 , 2 : 2 , 3 : 2 }),
42
69
)
43
70
44
-
45
- @pytest .fixture
46
- def tplaced_tracked_factored1 (tplaced_tracked ):
47
- return tplaced_tracked .sub_tiling ([(0 , 0 ), (2 , 0 )])
71
+ return tplaced .add_parameters (
72
+ [
73
+ ParameterCounter ([preimg0 ]),
74
+ ParameterCounter ([preimg2 ]),
75
+ ]
76
+ )
48
77
49
78
50
79
@pytest .fixture
51
- def tplaced_tracked_factored2 (tplaced_tracked ):
52
- return tplaced_tracked .sub_tiling ([( 1 , 1 )] )
80
+ def tplaced_tracked_factors (tplaced_tracked ):
81
+ return tplaced_tracked .find_factors ( )
53
82
54
83
55
84
@pytest .fixture
@@ -58,19 +87,19 @@ def all_tilings(
58
87
tplaced_factored1 ,
59
88
tplaced_factored2 ,
60
89
tplaced_tracked ,
61
- tplaced_tracked_factored1 ,
62
- tplaced_tracked_factored2 ,
90
+ tplaced_tracked_factors ,
63
91
):
64
- return [
92
+ tilings = [
65
93
tplaced ,
66
94
tplaced_factored1 ,
67
95
tplaced_factored2 ,
68
96
tplaced_tracked ,
69
- tplaced_tracked_factored1 ,
70
- tplaced_tracked_factored2 ,
71
97
]
98
+ tilings .extend (tplaced_tracked_factors )
99
+ return tilings
72
100
73
101
102
+ @pytest .mark .xfail
74
103
def test_bytes (tplaced , tplaced_tracked , all_tilings ):
75
104
76
105
assert len (tplaced .assumptions ) == 0
@@ -84,40 +113,57 @@ def test_bytes(tplaced, tplaced_tracked, all_tilings):
84
113
assert remade == tiling
85
114
86
115
116
+ @pytest .mark .xfail
87
117
def test_json (all_tilings ):
88
118
for tiling in all_tilings :
89
119
assert Tiling .from_json (json .dumps (tiling .to_jsonable ())) == tiling
90
120
91
121
92
- def test_factors (tplaced_tracked , tplaced_tracked_factored1 , tplaced_tracked_factored2 ):
93
- assert len (tplaced_tracked_factored1 .assumptions ) == 2
94
-
95
- assert all (
96
- isinstance (ass , TrackingAssumption )
97
- for ass in tplaced_tracked_factored1 .assumptions
98
- )
99
- assert tplaced_tracked_factored1 .assumptions [0 ].gps == (
100
- GriddedPerm .single_cell ((0 ,), (0 , 0 )),
101
- )
102
- assert tplaced_tracked_factored1 .assumptions [1 ].gps == (
103
- GriddedPerm .single_cell ((0 ,), (1 , 0 )),
104
- )
105
-
106
- assert set (Factor (tplaced_tracked ).factors ()) == set (
107
- [tplaced_tracked_factored1 , tplaced_tracked_factored2 ]
108
- )
109
-
110
-
111
- def test_from_cell ():
112
- assert TrackingAssumption .from_cells ([]) == TrackingAssumption ([])
113
- assert TrackingAssumption .from_cells ([(0 , 1 )]) == TrackingAssumption (
114
- [GriddedPerm ((0 ,), [(0 , 1 )])]
122
+ def test_factors (tplaced_tracked , tplaced_tracked_factors ):
123
+ assert sorted (len (f .parameters ) for f in tplaced_tracked_factors ) == [0 , 2 ]
124
+
125
+ main_factor = next (f for f in tplaced_tracked_factors if f .dimensions == (2 , 1 ))
126
+
127
+ assert all (isinstance (ass , ParameterCounter ) for ass in main_factor .parameters )
128
+ assert main_factor .parameters [0 ] == ParameterCounter (
129
+ (
130
+ PreimageCounter (
131
+ Tiling (
132
+ obstructions = (
133
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (1 , 0 ))),
134
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (2 , 0 ))),
135
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (0 , 0 ))),
136
+ GriddedPerm ((0 , 2 , 1 ), ((1 , 0 ), (1 , 0 ), (1 , 0 ))),
137
+ GriddedPerm ((0 , 2 , 1 ), ((1 , 0 ), (1 , 0 ), (2 , 0 ))),
138
+ GriddedPerm ((0 , 2 , 1 ), ((1 , 0 ), (2 , 0 ), (2 , 0 ))),
139
+ GriddedPerm ((0 , 2 , 1 ), ((2 , 0 ), (2 , 0 ), (2 , 0 ))),
140
+ ),
141
+ requirements = (),
142
+ parameters = (),
143
+ ),
144
+ RowColMap ({0 : 0 }, {0 : 0 , 1 : 1 , 2 : 1 }),
145
+ ),
146
+ )
115
147
)
116
- assert TrackingAssumption .from_cells ([(0 , 1 ), (2 , 3 )]) == TrackingAssumption (
117
- [
118
- GriddedPerm ((0 ,), [(0 , 1 )]),
119
- GriddedPerm ((0 ,), [(2 , 3 )]),
120
- ]
148
+ assert main_factor .parameters [1 ] == ParameterCounter (
149
+ (
150
+ PreimageCounter (
151
+ Tiling (
152
+ obstructions = (
153
+ GriddedPerm ((0 , 1 ), ((0 , 0 ), (2 , 0 ))),
154
+ GriddedPerm ((0 , 1 ), ((1 , 0 ), (2 , 0 ))),
155
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (0 , 0 ))),
156
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (0 , 0 ), (1 , 0 ))),
157
+ GriddedPerm ((0 , 2 , 1 ), ((0 , 0 ), (1 , 0 ), (1 , 0 ))),
158
+ GriddedPerm ((0 , 2 , 1 ), ((1 , 0 ), (1 , 0 ), (1 , 0 ))),
159
+ GriddedPerm ((0 , 2 , 1 ), ((2 , 0 ), (2 , 0 ), (2 , 0 ))),
160
+ ),
161
+ requirements = (),
162
+ parameters = (),
163
+ ),
164
+ RowColMap ({0 : 0 }, {0 : 0 , 1 : 0 , 2 : 1 }),
165
+ ),
166
+ )
121
167
)
122
168
123
169
@@ -150,14 +196,25 @@ def test_123_fusion():
150
196
477638700 ,
151
197
1767263190 ,
152
198
]
199
+
200
+
201
+ @pytest .mark .xfail
202
+ @pytest .mark .timeout (90 )
203
+ def test_123_fusion_generate_and_sample ():
153
204
av = Av ([Perm ((0 , 1 , 2 ))])
205
+ pack = TileScopePack .row_and_col_placements (row_only = True ).make_fusion (tracked = True )
206
+ css = TileScope ("123" , pack )
207
+ spec = css .auto_search (status_update = 30 )
208
+ spec = spec .expand_verified ()
209
+ assert isinstance (spec , CombinatorialSpecification )
154
210
for i in range (10 ):
155
211
assert set (av .of_length (i )) == set (
156
212
gp .patt for gp in spec .generate_objects_of_size (i )
157
213
)
158
214
assert spec .random_sample_object_of_size (i ).patt in av
159
215
160
216
217
+ @pytest .mark .skip (reason = "positive fusion not implemented" )
161
218
@pytest .mark .timeout (60 )
162
219
def test_123_positive_fusions ():
163
220
pack = TileScopePack .insertion_row_and_col_placements (row_only = True ).make_fusion (
@@ -198,6 +255,7 @@ def test_123_positive_fusions():
198
255
assert spec .random_sample_object_of_size (i ).patt in av
199
256
200
257
258
+ @pytest .mark .skip (reason = "interleaving factor not implemented" )
201
259
@pytest .mark .timeout (60 )
202
260
def test_123_interleaving ():
203
261
pack = TileScopePack .point_placements ().make_interleaving ()
@@ -229,6 +287,7 @@ def test_123_interleaving():
229
287
]
230
288
231
289
290
+ @pytest .mark .xfail
232
291
@pytest .mark .timeout (120 )
233
292
def test_1234_fusion ():
234
293
__location__ = os .path .realpath (
@@ -264,6 +323,7 @@ def test_1234_fusion():
264
323
assert spec .random_sample_object_of_size (i ).patt in av
265
324
266
325
326
+ @pytest .mark .xfail
267
327
def test_1234_pickle ():
268
328
"""
269
329
Test that the specification can be pickled.
0 commit comments