Skip to content

Commit e736ba3

Browse files
committed
-
1 parent 637b2b6 commit e736ba3

File tree

2 files changed

+60
-13
lines changed

2 files changed

+60
-13
lines changed

source_py2/python_toolbox/combi/perm_space.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,37 @@ def __init__(self, iterable_or_length, domain=None, n_elements=None,
148148
# #
149149
if isinstance(iterable_or_length, numbers.Integral):
150150
self.is_rapplied = False
151-
self.sequence = xrange(iterable_or_length)
151+
self.sequence = sequence_tools.CuteRange(
152+
iterable_or_length,
153+
_avoid_built_in_range=True
154+
)
155+
# (Avoiding built-in `xrange` in Python 2 because it lacks
156+
# `.index`.)
152157
self.sequence_length = iterable_or_length
153158
else:
154159
assert isinstance(iterable_or_length, collections.Iterable)
155160
self.sequence = sequence_tools. \
156161
ensure_iterable_is_immutable_sequence(iterable_or_length)
157-
range_candidate = xrange(len(self.sequence))
162+
range_candidate = sequence_tools.CuteRange(
163+
len(self.sequence),
164+
_avoid_built_in_range=True
165+
)
166+
# (Avoiding built-in `xrange` in Python 2 because it lacks
167+
# `.index`.)
158168

159169
self.is_rapplied = not (
160170
cute_iter_tools.are_equal(self.sequence,
161171
range_candidate)
162172
)
163173
self.sequence_length = len(self.sequence)
164174
if not self.is_rapplied:
165-
self.sequence = xrange(self.sequence_length)
175+
self.sequence = sequence_tools.CuteRange(
176+
self.sequence_length,
177+
_avoid_built_in_range=True
178+
)
179+
# (Avoiding built-in `xrange` in Python 2 because it lacks
180+
# `.index`.)
181+
166182

167183
if self.is_rapplied and (len(set(self.sequence)) < len(self.sequence)):
168184
# Can implement this later by calculating the actual length.

source_py2/test_python_toolbox/test_combi/test_product_space.py

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# This program is distributed under the MIT license.
33

44
from python_toolbox import cute_testing
5+
from python_toolbox import sequence_tools
56

67
from python_toolbox.combi import *
78

@@ -39,15 +40,45 @@ def test():
3940
with cute_testing.RaiseAssertor(IndexError):
4041
product_space[-product_space.length - 100]
4142

42-
assert {ProductSpace((range(4), range(3))),
43-
ProductSpace((range(4), range(3))),
44-
ProductSpace((range(3), range(4)))} == {
45-
ProductSpace((range(4), range(3))),
46-
ProductSpace((range(3), range(4)))
47-
}
43+
# In the following asserts, using `CuteRange` rather than `xrange` because
44+
# the latter doesn't have a functional `__hash__`.
4845

49-
assert ProductSpace((range(4), range(3))) == \
50-
ProductSpace((range(4), range(3)))
51-
assert ProductSpace((range(4), range(3))) != \
52-
ProductSpace((range(3), range(4)))
46+
assert {
47+
ProductSpace(
48+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
49+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))
50+
),
51+
ProductSpace(
52+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
53+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))
54+
),
55+
ProductSpace(
56+
(sequence_tools.CuteRange(3, _avoid_built_in_range=True),
57+
sequence_tools.CuteRange(4, _avoid_built_in_range=True))
58+
)} == {
59+
ProductSpace(
60+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
61+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))
62+
),
63+
ProductSpace(
64+
(sequence_tools.CuteRange(3, _avoid_built_in_range=True),
65+
sequence_tools.CuteRange(4, _avoid_built_in_range=True))
66+
)
67+
}
68+
69+
assert ProductSpace(
70+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
71+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))
72+
) == ProductSpace(
73+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
74+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))
75+
)
76+
77+
assert ProductSpace(
78+
(sequence_tools.CuteRange(4, _avoid_built_in_range=True),
79+
sequence_tools.CuteRange(3, _avoid_built_in_range=True))) != \
80+
ProductSpace(
81+
(sequence_tools.CuteRange(3, _avoid_built_in_range=True),
82+
sequence_tools.CuteRange(4, _avoid_built_in_range=True))
83+
)
5384

0 commit comments

Comments
 (0)