Skip to content

Commit 030520a

Browse files
committed
-
1 parent 99217d8 commit 030520a

File tree

8 files changed

+158
-360
lines changed

8 files changed

+158
-360
lines changed

source_py3/python_toolbox/combi/perming/perm_space.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def __init__(self, iterable_or_length, domain=None, *, n_elements=None,
181181
# #
182182
if self.is_rapplied:
183183
self.is_recurrent = any(count >= 2 for count in
184-
self._frozen_ordered_counter.values())
184+
self._frozen_ordered_tally.values())
185185
else:
186186
self.is_recurrent = False
187187
# #
@@ -396,12 +396,12 @@ def _unsliced_length(self):
396396
if self.is_combination:
397397
return math_tools.calculate_length_of_recurrent_comb_space(
398398
self.n_elements,
399-
self._frozen_counter_counter
399+
self._frozen_tally_tally
400400
)
401401
else:
402402
return math_tools.calculate_length_of_recurrent_perm_space(
403403
self.n_elements,
404-
self._frozen_counter_counter
404+
self._frozen_tally_tally
405405
)
406406

407407
else:
@@ -442,12 +442,12 @@ def variation_selection(self):
442442
return variation_selection
443443

444444
@caching.CachedProperty
445-
def _frozen_ordered_counter(self):
445+
def _frozen_ordered_tally(self):
446446
return nifty_collections.FrozenOrderedTally(self.sequence)
447447

448-
_frozen_counter_counter = caching.CachedProperty(
448+
_frozen_tally_tally = caching.CachedProperty(
449449
lambda self: nifty_collections.FrozenTallyTally(
450-
self._frozen_ordered_counter.values())
450+
self._frozen_ordered_tally.values())
451451
)
452452

453453

source_py3/python_toolbox/math_tools/sequences.py

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,52 +60,48 @@ def abs_stirling(n, k):
6060

6161
_length_of_recurrent_perm_space_cache = {}
6262

63-
def calculate_length_of_recurrent_perm_space(k, recurrence_counter):
63+
def calculate_length_of_recurrent_perm_space(k, ftt):
6464
from python_toolbox import nifty_collections
6565
from python_toolbox import cute_iter_tools
6666
cache = _length_of_recurrent_perm_space_cache
67-
if not isinstance(recurrence_counter, nifty_collections.FrozenTallyTally):
68-
recurrence_counter = \
69-
nifty_collections.FrozenTallyTally(recurrence_counter)
67+
if not isinstance(ftt, nifty_collections.FrozenTallyTally):
68+
ftt = nifty_collections.FrozenTallyTally(ftt)
7069
if k == 0:
7170
return 1
7271
elif k == 1:
73-
assert recurrence_counter
72+
assert ftt
7473
# (Works because `FrozenCrateCounter` has a functioning `__bool__`,
7574
# unlike Python's `Counter`.)
76-
return recurrence_counter.n_elements
75+
return ftt.n_elements
7776
try:
78-
return cache[(k, recurrence_counter)]
77+
return cache[(k, ftt)]
7978
except KeyError:
8079
pass
8180

8281
levels = []
83-
current_reccurence_counters = {recurrence_counter}
84-
while len(levels) < k and current_reccurence_counters:
82+
current_ftts = {ftt}
83+
while len(levels) < k and current_ftts:
8584
k_ = k - len(levels)
8685
levels.append(
87-
{recurrence_counter_: recurrence_counter_.
88-
get_sub_counters_for_one_crate_removed()
89-
for recurrence_counter_ in current_reccurence_counters
90-
if (k_, recurrence_counter_) not in cache}
86+
{ftt_: ftt_.get_sub_ftts_for_one_crate_removed()
87+
for ftt_ in current_ftts
88+
if (k_, ftt_) not in cache}
9189
)
92-
current_reccurence_counters = \
93-
set(itertools.chain(*levels[-1].values()))
90+
current_ftts = set(itertools.chain(*levels[-1].values()))
9491

9592
# The last level is calculated. Time to make our way up.
9693
for k_, level in enumerate(reversed(levels), (k - len(levels) + 1)):
9794
if k_ == 1:
98-
for recurrence_counter_, sub_counters_counter in level.items():
99-
cache[(k_, recurrence_counter_)] = \
100-
recurrence_counter_.n_elements
95+
for ftt_, sub_ftt_tally in level.items():
96+
cache[(k_, ftt_)] = ftt_.n_elements
10197
else:
102-
for recurrence_counter_, sub_counters_counter in level.items():
103-
cache[(k_, recurrence_counter_)] = sum(
104-
(cache[(k_ - 1, sub_counter)] * factor for
105-
sub_counter, factor in sub_counters_counter.items())
98+
for ftt_, sub_ftt_tally in level.items():
99+
cache[(k_, ftt_)] = sum(
100+
(cache[(k_ - 1, sub_ftt)] * factor for
101+
sub_ftt, factor in sub_ftt_tally.items())
106102
)
107103

108-
return cache[(k, recurrence_counter)]
104+
return cache[(k, ftt)]
109105

110106

111107

@@ -114,54 +110,50 @@ def calculate_length_of_recurrent_perm_space(k, recurrence_counter):
114110

115111
_length_of_recurrent_comb_space_cache = {}
116112

117-
def calculate_length_of_recurrent_comb_space(k, recurrence_counter):
113+
def calculate_length_of_recurrent_comb_space(k, ftt):
118114
'''
119115
blocktodo gotta properly name these two sons of bitches
120116
'''
121117
from python_toolbox import nifty_collections
122118
from python_toolbox import cute_iter_tools
123119
cache = _length_of_recurrent_comb_space_cache
124-
if not isinstance(recurrence_counter, nifty_collections.FrozenTallyTally):
125-
recurrence_counter = \
126-
nifty_collections.FrozenTallyTally(recurrence_counter)
120+
if not isinstance(ftt, nifty_collections.FrozenTallyTally):
121+
ftt = nifty_collections.FrozenTallyTally(ftt)
127122
if k == 0:
128123
return 1
129124
elif k == 1:
130-
assert recurrence_counter
125+
assert ftt
131126
# (Works because `FrozenCrateCounter` has a functioning `__bool__`,
132127
# unlike Python's `Counter`.)
133-
return recurrence_counter.n_elements
128+
return ftt.n_elements
134129
try:
135-
return cache[(k, recurrence_counter)]
130+
return cache[(k, ftt)]
136131
except KeyError:
137132
pass
138133

139134
levels = []
140-
current_reccurence_counters = {recurrence_counter}
141-
while len(levels) < k and current_reccurence_counters:
135+
current_ftts = {ftt}
136+
while len(levels) < k and current_ftts:
142137
k_ = k - len(levels)
143138
levels.append(
144-
{recurrence_counter_: recurrence_counter_.
145-
get_sub_counters_for_one_crate_and_previous_piles_removed()
146-
for recurrence_counter_ in current_reccurence_counters
147-
if (k_, recurrence_counter_) not in cache}
139+
{ftt_: ftt_.get_sub_ftts_for_one_crate_and_previous_piles_removed()
140+
for ftt_ in current_ftts
141+
if (k_, ftt_) not in cache}
148142
)
149-
current_reccurence_counters = \
150-
set(itertools.chain(*levels[-1].values()))
143+
current_ftts = set(itertools.chain(*levels[-1].values()))
151144

152145
# The last level is calculated. Time to make our way up.
153146
for k_, level in enumerate(reversed(levels), (k - len(levels) + 1)):
154147
if k_ == 1:
155-
for recurrence_counter_, sub_counters in level.items():
156-
cache[(k_, recurrence_counter_)] = len(sub_counters)
148+
for ftt_, sub_ftts in level.items():
149+
cache[(k_, ftt_)] = len(sub_ftts)
157150
else:
158-
for recurrence_counter_, sub_counters in level.items():
159-
cache[(k_, recurrence_counter_)] = sum(
160-
(cache[(k_ - 1, sub_counter)] for
161-
sub_counter in sub_counters)
151+
for ftt_, sub_ftts in level.items():
152+
cache[(k_, ftt_)] = sum(
153+
(cache[(k_ - 1, sub_ftt)] for sub_ftt in sub_ftts)
162154
)
163155

164-
return cache[(k, recurrence_counter)]
156+
return cache[(k, ftt)]
165157

166158

167159

source_py3/python_toolbox/nifty_collections/frozen_tally_and_frozen_ordered_tally.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ def _count_elements(mapping, iterable):
2323

2424
class _FrozenTallyMixin:
2525
'''
26-
An immutable counter.
26+
blocktododoc An immutable tally.
2727
28-
A counter that can't be changed. The advantage of this over
28+
A tally that can't be changed. The advantage of this over
2929
`collections.Counter` is mainly that it's hashable, and thus can be used as
3030
a key in dicts and sets.
3131
@@ -108,15 +108,6 @@ def elements(self):
108108

109109
__pos__ = lambda self: self
110110

111-
# Multiset-style mathematical operations discussed in:
112-
# Knuth TAOCP Volume II section 4.6.3 exercise 19
113-
# and at http://en.wikipedia.org/wiki/Multiset
114-
#
115-
# Outputs guaranteed to only include positive counts.
116-
#
117-
# To strip negative and zero counts, add-in an empty counter:
118-
# c += FrozenCounter()
119-
120111
def __add__(self, other):
121112
'''
122113
Add counts from two counters.
@@ -281,10 +272,11 @@ def __ge__(self, other):
281272

282273

283274
class FrozenTally(_FrozenTallyMixin, FrozenDict):
284-
pass
275+
'''blocktododoc '''
285276

286277

287278
class FrozenOrderedTally(_FrozenTallyMixin, FrozenOrderedDict):
279+
'''blocktododoc '''
288280
def __repr__(self):
289281
if not self:
290282
return '%s()' % type(self).__name__

source_py3/python_toolbox/nifty_collections/frozen_tally_tally.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,34 +26,34 @@ def __init__(self, iterable):
2626
raise TypeError('Keys to `FrozenChunkCounter` must be '
2727
'non-negative integers.')
2828

29-
def get_sub_counters_for_one_crate_removed(self):
30-
sub_counters_counter = collections.Counter()
29+
def get_sub_ftts_for_one_crate_removed(self):
30+
sub_ftts_counter = collections.Counter()
3131
for key_to_reduce, value_of_key_to_reduce in self.items():
32-
sub_counter = collections.Counter(self)
33-
sub_counter[key_to_reduce] -= 1
34-
sub_counter[key_to_reduce - 1] += 1
35-
sub_counters_counter[FrozenTallyTally(sub_counter)] = \
32+
sub_ftt_prototype = collections.Counter(self)
33+
sub_ftt_prototype[key_to_reduce] -= 1
34+
sub_ftt_prototype[key_to_reduce - 1] += 1
35+
sub_ftts_counter[FrozenTallyTally(sub_ftt_prototype)] = \
3636
value_of_key_to_reduce
37-
return FrozenTally(sub_counters_counter)
37+
return FrozenTally(sub_ftts_counter)
3838

39-
def get_sub_counters_for_one_crate_and_previous_piles_removed(self):
40-
sub_counters = []
39+
def get_sub_ftts_for_one_crate_and_previous_piles_removed(self):
40+
sub_ftts = []
4141
growing_dict = {}
4242
for key_to_reduce, value_of_key_to_reduce in \
4343
reversed(sorted(self.items())):
4444
growing_dict[key_to_reduce] = value_of_key_to_reduce
4545

46-
sub_counter_prototype = collections.Counter(growing_dict)
47-
sub_counter_prototype[key_to_reduce] -= 1
48-
sub_counter_prototype[key_to_reduce - 1] += 1
46+
sub_ftt_prototype = collections.Counter(growing_dict)
47+
sub_ftt_prototype[key_to_reduce] -= 1
48+
sub_ftt_prototype[key_to_reduce - 1] += 1
4949

5050
for i in range(value_of_key_to_reduce):
51-
sub_counters.append(
51+
sub_ftts.append(
5252
FrozenTallyTally(
5353
{key: (i if key == key_to_reduce else value)
54-
for key, value in sub_counter_prototype.items()}
54+
for key, value in sub_ftt_prototype.items()}
5555
)
5656
)
57-
return tuple(sub_counters)
57+
return tuple(sub_ftts)
5858

5959

source_py3/test_python_toolbox/test_combi/test_extensive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def __init__(self, iterable_or_length, domain=None, n_elements=None,
5050
isinstance(iterable_or_length, collections.Iterable) else \
5151
sequence_tools.CuteRange(iterable_or_length)
5252
self.sequence_length = len(self.sequence)
53-
self._sequence_frozen_counter = \
53+
self._sequence_frozen_tally = \
5454
nifty_collections.FrozenTally(self.sequence)
5555
self.is_recurrent = len(set(self.sequence)) < len(self.sequence)
5656
self.n_elements = n_elements if n_elements is not None else \
@@ -93,7 +93,7 @@ def _iter(self):
9393
if candidate in yielded_candidates:
9494
continue
9595
# if nifty_collections.FrozenCounter(candidate) > \
96-
# self._sequence_frozen_counter:
96+
# self._sequence_frozen_tally:
9797
# continue
9898
if any(candidate[self.domain.index(key)] != value for
9999
key, value in self.fixed_map.items()):

source_py3/test_python_toolbox/test_nifty_collections/test_counter/__init__.py

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)