Skip to content

Commit 7a946c6

Browse files
committed
-
1 parent 1fcaac3 commit 7a946c6

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

source_py3/python_toolbox/combi/perm_space.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,14 @@ def index(self, perm):
546546
if not isinstance(perm, collections.Iterable):
547547
raise ValueError
548548

549-
perm = sequence_tools.ensure_iterable_is_immutable_sequence(perm)
549+
try:
550+
perm = sequence_tools.ensure_iterable_is_immutable_sequence(
551+
perm,
552+
allow_unordered=self.is_combination
553+
)
554+
except sequence_tools.UnorderedIterableException:
555+
raise ValueError('An unordered iterable is never contained in a '
556+
'non-combination `PermSpace`.')
550557
perm_set = set(perm)
551558
if not (perm_set <= set(self.sequence)):
552559
raise ValueError

source_py3/python_toolbox/sequence_tools/misc.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
infinity = float('inf')
1818

1919

20+
class UnorderedIterableException(Exception):
21+
'''
22+
An unordered iterable was encountered when we expected an orderable one.
23+
'''
24+
25+
2026
def are_equal_regardless_of_order(seq1, seq2):
2127
'''
2228
Do `seq1` and `seq2` contain the same elements, same number of times?
@@ -230,7 +236,8 @@ def get_recurrences(sequence):
230236

231237

232238
def ensure_iterable_is_immutable_sequence(iterable, default_type=tuple,
233-
unallowed_types=(bytes,)):
239+
unallowed_types=(bytes,),
240+
allow_unordered=True):
234241
'''
235242
Return a version of `iterable` that is an immutable sequence.
236243
@@ -239,6 +246,8 @@ def ensure_iterable_is_immutable_sequence(iterable, default_type=tuple,
239246
specified in `default_type`.
240247
'''
241248
assert isinstance(iterable, collections.Iterable)
249+
if not allow_unordered:
250+
242251
if isinstance(iterable, collections.MutableSequence) or \
243252
isinstance(iterable, unallowed_types) or \
244253
not isinstance(iterable, collections.Sequence):

source_py3/test_python_toolbox/test_combi/test_perm_space.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def test_perms():
4141
assert int(last_perm) == len(pure_perm_space) - 1
4242

4343
assert first_perm in pure_perm_space
44+
assert set(first_perm) not in pure_perm_space # No order? Not contained.
4445
assert some_perm in pure_perm_space
4546
assert last_perm in pure_perm_space
4647
assert tuple(first_perm) in pure_perm_space

0 commit comments

Comments
 (0)