KeyError for "rule = equivalence_rules[(b, a)].to_reverse_rule()"
Closed this issue ยท 7 comments
Note that it may take MANY runs for the error to appear. It also sometimes hangs forever when making the specification.
To recreate in about 90 seconds:
from tilings.tilescope import TileScope, TileScopePack
basis = '0213_1230'
pack = TileScopePack.insertion_row_and_col_placements(row_only=True).make_fusion(apply_first=True)
css = TileScope(basis, pack)
spec = css.auto_search()
full traceback:
Traceback (most recent call last):
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 138, in _add_equivalence_path_rules
rule = equivalence_rules[(a, b)]
KeyError: (Tiling(obstructions=(GriddedPerm(Perm((0,)), ((0, 0),)), GriddedPerm(Perm((0,)), ((1, 1),)), GriddedPerm(Perm((0,)), ((2, 0),)), GriddedPerm(Perm((0,)), ((3, 0),)), GriddedPerm(Perm((0,)), ((4, 0),)), GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1)), ((2, 1), (3, 1))), GriddedPerm(Perm((0, 1)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (4, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (4, 1), (4, 1), (4, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((3, 1),)),)),)), Tiling(obstructions=(GriddedPerm(Perm((0,)), ((0, 0),)), GriddedPerm(Perm((0,)), ((1, 1),)), GriddedPerm(Perm((0,)), ((2, 0),)), GriddedPerm(Perm((0,)), ((3, 0),)), GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (3, 1), (3, 1), (3, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((2, 1),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((2, 1),)),)),)))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/users/personnel/jay/atrap/repos/handy-scripts/jay/surveyor/surveyor.py", line 104, in run_work_packet
spec = css.auto_search(max_time=time_to_try)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/comb_spec_searcher.py", line 613, in auto_search
minimization_time_limit=0.01 * (time.time() - auto_search_start),
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/utils.py", line 30, in inner
res = func(css, *args, **kwargs)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/comb_spec_searcher.py", line 676, in get_specification
expand_verified=expand_verified,
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 75, in __init__
self._populate_rules_dict(strategies, equivalence_paths, expand_verified)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 122, in _populate_rules_dict
self._add_equivalence_path_rules(equivalence_paths, equivalence_rules)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 140, in _add_equivalence_path_rules
rule = equivalence_rules[(b, a)].to_reverse_rule()
KeyError: (Tiling(obstructions=(GriddedPerm(Perm((0,)), ((0, 0),)), GriddedPerm(Perm((0,)), ((1, 1),)), GriddedPerm(Perm((0,)), ((2, 0),)), GriddedPerm(Perm((0,)), ((3, 0),)), GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (3, 1), (3, 1), (3, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (3, 1), (3, 1), (3, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((2, 1),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((2, 1),)),)),)), Tiling(obstructions=(GriddedPerm(Perm((0,)), ((0, 0),)), GriddedPerm(Perm((0,)), ((1, 1),)), GriddedPerm(Perm((0,)), ((2, 0),)), GriddedPerm(Perm((0,)), ((3, 0),)), GriddedPerm(Perm((0,)), ((4, 0),)), GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1)), ((2, 1), (3, 1))), GriddedPerm(Perm((0, 1)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (4, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (4, 1), (4, 1), (4, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((3, 1),)),)),)))
PermutaTriangle/Tilings#186 will fix the hanging issue
Cannot replicate. Closing for now.
This one is back, but once again I cannot replicate. This time the class/pack was:
from tilings.tilescope import TileScope, TileScopePack
basis = '0213_1230'
pack = TileScopePack.insertion_row_and_col_placements(row_only=True).make_fusion(apply_first=True)
css = TileScope(basis, pack)
spec = css.auto_search()
and the traceback is
[E 200626 10:13:28 surveyor:211] 0213_1230
insertion_row_placements_fusion
Looking for recursive combinatorial specification with the strategies:
Inferral: row and column separation, obstruction transitivity
Initial: tracked fusion, add assumptions, splitting the assumptions, factor, requirement corroboration, point insertion
Verification: verify atoms, insertion encoding verified, one by one verification, locally factorable verification
Set 1: row placement
Traceback (most recent call last):
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 138, in _add_equivalence_path_rules
rule = equivalence_rules[(a, b)]
KeyError: (Tiling(obstructions=(GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1)), ((2, 1), (3, 1))), GriddedPerm(Perm((0, 1)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (4, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (4, 1))), GriddedPerm(Perm((1, 0)), ((4, 1), (4, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((2, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((3, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((4, 1), (4, 1), (5, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((5, 1), (5, 1), (5, 1), (5, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),), (GriddedPerm(Perm((0,)), ((5, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((3, 1),)),)),)), Tiling(obstructions=(GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((2, 1), (3, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((3, 1), (3, 1), (4, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (4, 1), (4, 1), (4, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((2, 1),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((2, 1),)),)),)))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/users/personnel/jay/atrap/repos/handy-scripts/jay/surveyor/surveyor.py", line 104, in run_work_packet
spec = css.auto_search(max_time=time_to_try)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/comb_spec_searcher.py", line 613, in auto_search
minimization_time_limit=0.01 * (time.time() - auto_search_start),
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/utils.py", line 30, in inner
res = func(css, *args, **kwargs)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/comb_spec_searcher.py", line 676, in get_specification
expand_verified=expand_verified,
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 75, in __init__
self._populate_rules_dict(strategies, equivalence_paths, expand_verified)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 122, in _populate_rules_dict
self._add_equivalence_path_rules(equivalence_paths, equivalence_rules)
File "/users/personnel/jay/atrap/repos/comb_spec_searcher/comb_spec_searcher/specification.py", line 140, in _add_equivalence_path_rules
rule = equivalence_rules[(b, a)].to_reverse_rule()
KeyError: (Tiling(obstructions=(GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((2, 1), (3, 1), (4, 1))), GriddedPerm(Perm((1, 2, 0)), ((3, 1), (3, 1), (4, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (4, 1), (4, 1), (4, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (4, 1), (4, 1), (4, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((2, 1),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((2, 1),)),)),)), Tiling(obstructions=(GriddedPerm(Perm((0, 1)), ((1, 0), (1, 0))), GriddedPerm(Perm((0, 1)), ((2, 1), (2, 1))), GriddedPerm(Perm((0, 1)), ((2, 1), (3, 1))), GriddedPerm(Perm((0, 1)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((1, 0), (1, 0))), GriddedPerm(Perm((1, 0)), ((2, 1), (2, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((2, 1), (4, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (3, 1))), GriddedPerm(Perm((1, 0)), ((3, 1), (4, 1))), GriddedPerm(Perm((1, 0)), ((4, 1), (4, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 1, 2)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (0, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (2, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (3, 1))), GriddedPerm(Perm((0, 2, 1)), ((0, 1), (0, 1), (4, 1))), GriddedPerm(Perm((1, 0, 2)), ((2, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((3, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((4, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 0, 2)), ((5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (0, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (2, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (3, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((0, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((2, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((3, 1), (4, 1), (5, 1))), GriddedPerm(Perm((1, 2, 0)), ((4, 1), (4, 1), (5, 1))), GriddedPerm(Perm((0, 2, 1, 3)), ((0, 1), (0, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((0, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((2, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((3, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((4, 1), (5, 1), (5, 1), (5, 1))), GriddedPerm(Perm((1, 2, 3, 0)), ((5, 1), (5, 1), (5, 1), (5, 1)))), requirements=((GriddedPerm(Perm((0,)), ((1, 0),)),), (GriddedPerm(Perm((0,)), ((3, 1),)),), (GriddedPerm(Perm((0,)), ((4, 1),)),), (GriddedPerm(Perm((0,)), ((5, 1),)),)), assumptions=(TrackingAssumption((GriddedPerm(Perm((0,)), ((3, 1),)),)),)))
Maybe we need to add some print statements and try to catch it happening again.
Could you rerun and save the input to the CombinatorialSpecification initialiser? This will make it easier to debug.
Also, are you sure this doesn't need ForgetDB to replicate the error?
You're right, I should have caught that. This script recreates the error in under two minutes.
from tilings.tilescope import TileScope, TileScopePack
basis = '0213_1230'
pack = TileScopePack.insertion_row_and_col_placements(row_only=True).make_fusion(apply_first=True)
css = TileScope(basis, pack, ruledb="forget")
spec = css.auto_search()
I don't know if you still want the input into the CombinatorialSpecification init, but just in case here it is
[Edit: removed because too long]
Ok, so I ran the second class suggested 0213_1230
.
The a
and b
in question I got are as follows:
a
+-+-+-+-+-+-+
|1| |โ|โ|/|2|
+-+-+-+-+-+-+
| |โ| | | | |
+-+-+-+-+-+-+
/: Av+(10)
1: Av(012, 021)
2: Av+(102, 1230)
โ: Av(01, 10)
โ: point
Crossing obstructions:
01: (2, 1), (3, 1)
10: (2, 1), (3, 1)
10: (2, 1), (4, 1)
10: (3, 1), (4, 1)
012: (0, 1), (0, 1), (2, 1)
012: (0, 1), (0, 1), (3, 1)
021: (0, 1), (0, 1), (2, 1)
021: (0, 1), (0, 1), (3, 1)
021: (0, 1), (0, 1), (4, 1)
102: (2, 1), (5, 1), (5, 1)
102: (3, 1), (5, 1), (5, 1)
102: (4, 1), (5, 1), (5, 1)
120: (0, 1), (0, 1), (5, 1)
120: (0, 1), (2, 1), (5, 1)
120: (0, 1), (3, 1), (5, 1)
120: (0, 1), (4, 1), (5, 1)
120: (2, 1), (4, 1), (5, 1)
120: (3, 1), (4, 1), (5, 1)
120: (4, 1), (4, 1), (5, 1)
0213: (0, 1), (0, 1), (5, 1), (5, 1)
1230: (0, 1), (5, 1), (5, 1), (5, 1)
1230: (2, 1), (5, 1), (5, 1), (5, 1)
1230: (3, 1), (5, 1), (5, 1), (5, 1)
1230: (4, 1), (5, 1), (5, 1), (5, 1)
Requirement 0:
0: (1, 0)
Requirement 1:
0: (3, 1)
Requirement 2:
0: (4, 1)
Requirement 3:
0: (5, 1)
Assumption 0:
can count points in cell (3, 1)
b
+-+-+-+-+-+
|1| |โ|/|2|
+-+-+-+-+-+
| |โ| | | |
+-+-+-+-+-+
/: Av+(10)
1: Av(012, 021)
2: Av+(102, 1230)
โ: point
Crossing obstructions:
10: (2, 1), (3, 1)
012: (0, 1), (0, 1), (2, 1)
021: (0, 1), (0, 1), (2, 1)
021: (0, 1), (0, 1), (3, 1)
102: (2, 1), (4, 1), (4, 1)
102: (3, 1), (4, 1), (4, 1)
120: (0, 1), (0, 1), (4, 1)
120: (0, 1), (2, 1), (4, 1)
120: (0, 1), (3, 1), (4, 1)
120: (2, 1), (3, 1), (4, 1)
120: (3, 1), (3, 1), (4, 1)
0213: (0, 1), (0, 1), (4, 1), (4, 1)
1230: (0, 1), (4, 1), (4, 1), (4, 1)
1230: (2, 1), (4, 1), (4, 1), (4, 1)
1230: (3, 1), (4, 1), (4, 1), (4, 1)
Requirement 0:
0: (1, 0)
Requirement 1:
0: (2, 1)
Requirement 2:
0: (3, 1)
Requirement 3:
0: (4, 1)
Assumption 0:
can count points in cell (2, 1)
When I look in the ruledb for their corresponding rule, I am given
>>> css.ruledb.rule_to_strategy[css.classdb.get_label(x), (css.classdb.get_label(y),)]
FusionStrategy(row_idx=None, col_idx=2, tracked=True)
>>> strategy = _
>>> rule = strategy(a)
>>> print(rule)
fuse columns 2 and 3
+-+-+-+-+-+-+ +-+-+-+-+-+
|1| |โ|โ|/|2| โฃ |1| |โ|/|2|
+-+-+-+-+-+-+ +-+-+-+-+-+
| |โ| | | | | | |โ| | | |
+-+-+-+-+-+-+ +-+-+-+-+-+
/: Av+(10) /: Av+(10)
1: Av(012, 021) 1: Av(012, 021)
2: Av+(102, 1230) 2: Av+(102, 1230)
โ: Av(01, 10) โ: point
โ: point Crossing obstructions:
Crossing obstructions: 10: (2, 1), (3, 1)
01: (2, 1), (3, 1) 012: (0, 1), (0, 1), (2, 1)
10: (2, 1), (3, 1) 021: (0, 1), (0, 1), (2, 1)
10: (2, 1), (4, 1) 021: (0, 1), (0, 1), (3, 1)
10: (3, 1), (4, 1) 102: (2, 1), (4, 1), (4, 1)
012: (0, 1), (0, 1), (2, 1) 102: (3, 1), (4, 1), (4, 1)
012: (0, 1), (0, 1), (3, 1) 120: (0, 1), (0, 1), (4, 1)
021: (0, 1), (0, 1), (2, 1) 120: (0, 1), (2, 1), (4, 1)
021: (0, 1), (0, 1), (3, 1) 120: (0, 1), (3, 1), (4, 1)
021: (0, 1), (0, 1), (4, 1) 120: (2, 1), (3, 1), (4, 1)
102: (2, 1), (5, 1), (5, 1) 120: (3, 1), (3, 1), (4, 1)
102: (3, 1), (5, 1), (5, 1) 0213: (0, 1), (0, 1), (4, 1), (4, 1)
102: (4, 1), (5, 1), (5, 1) 1230: (0, 1), (4, 1), (4, 1), (4, 1)
120: (0, 1), (0, 1), (5, 1) 1230: (2, 1), (4, 1), (4, 1), (4, 1)
120: (0, 1), (2, 1), (5, 1) 1230: (3, 1), (4, 1), (4, 1), (4, 1)
120: (0, 1), (3, 1), (5, 1) Requirement 0:
120: (0, 1), (4, 1), (5, 1) 0: (1, 0)
120: (2, 1), (4, 1), (5, 1) Requirement 1:
120: (3, 1), (4, 1), (5, 1) 0: (2, 1)
120: (4, 1), (4, 1), (5, 1) Requirement 2:
0213: (0, 1), (0, 1), (5, 1), (5, 1) 0: (3, 1)
1230: (0, 1), (5, 1), (5, 1), (5, 1) Requirement 3:
1230: (2, 1), (5, 1), (5, 1), (5, 1) 0: (4, 1)
1230: (3, 1), (5, 1), (5, 1), (5, 1) Assumption 0:
1230: (4, 1), (5, 1), (5, 1), (5, 1) can count points in cell (2, 1)
Requirement 0:
0: (1, 0)
Requirement 1:
0: (3, 1)
Requirement 2:
0: (4, 1)
Requirement 3:
0: (5, 1)
Assumption 0:
can count points in cell (3, 1)
This is very specific case where. The two cells are fusable (as they are anything in Av(01, 10) with a line drawn, such that there is a point on the right). This implies that the cell on the left is empty - so by chance this fusion rule is in fact an equivalence rule. The problem is that this strategy is stopping us choosing the useful version (which would come from inserting a point in the cell, and discovering it was empty).