11import enum
22
33from python_toolbox import cute_iter_tools
4+ from python_toolbox import nifty_collections
45from python_toolbox import caching
6+ from python_toolbox .third_party import sortedcontainers
57
68from .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
2630variation_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