Skip to content

Commit 64d578b

Browse files
committed
-
1 parent 42dc1a3 commit 64d578b

File tree

1 file changed

+40
-11
lines changed

1 file changed

+40
-11
lines changed

source_py3/python_toolbox/combi/variations.py

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import enum
22

33
from python_toolbox import cute_iter_tools
4+
from python_toolbox import nifty_collections
45
from python_toolbox import caching
6+
from python_toolbox.third_party import sortedcontainers
57

68
from .selection_space import SelectionSpace
79

@@ -21,7 +23,9 @@ class PermSpaceVariation(enum.Enum):
2123
FIXED = 'fixed'
2224
DEGREED = 'degreed'
2325
SLICED = 'sliced'
24-
26+
27+
28+
PermSpaceVariation.index = tuple(PermSpaceVariation).index
2529

2630
variation_clashes = (
2731
{PermSpaceVariation.DEGREED, PermSpaceVariation.COMBINATION},
@@ -31,13 +35,38 @@ class PermSpaceVariation(enum.Enum):
3135
)
3236

3337

34-
allowed_variation_combinations, unallowed_variation_combinations = \
35-
cute_iter_tools.double_filter(
36-
lambda variation_combination: any(
37-
variation_clash <= variation_combination for variation_clash in
38-
variation_clashes),
39-
SelectionSpace(PermSpaceVariation),
40-
lazy_tuple=True
41-
)
42-
43-
38+
class VariationSelectionSpace(SelectionSpace):
39+
def __init__(self):
40+
SelectionSpace.__init__(self, PermSpaceVariation)
41+
42+
@caching.cache()
43+
def __getitem__(self, i):
44+
return VariationSelection(SelectionSpace.__getitem__(self, i))
45+
46+
@caching.cache()
47+
def __repr__(self):
48+
return '<VariationSelectionSpace>'
49+
50+
51+
class VariationSelection:
52+
def __init__(self, variations):
53+
self.variations = variations
54+
55+
@caching.cache()
56+
def __repr__(self):
57+
return '<%s: %s>' % (
58+
type(self).__name__,
59+
', '.join(variation.value for variation in
60+
sorted(self.variations, key=PermSpaceVariation.index))
61+
)
62+
63+
@caching.CachedProperty
64+
def is_allowed(self):
65+
return not any(variation_clash <= self.variations for
66+
variation_clash in variation_clashes)
67+
68+
69+
variation_selection_space = VariationSelectionSpace()
70+
variation_selection_space[7].is_allowed
71+
repr(variation_selection_space[7])
72+
2 / 2

0 commit comments

Comments
 (0)