Skip to content

Commit 095405d

Browse files
committed
-
1 parent 00beccc commit 095405d

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

source_py3/python_toolbox/combi/selection_space.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@
2424

2525
class SelectionSpace(sequence_tools.CuteSequenceMixin,
2626
collections.Sequence):
27-
def __init__(self, sequence, n):
27+
def __init__(self, sequence):
2828
self.sequence = \
2929
sequence_tools.ensure_iterable_is_immutable_sequence(sequence)
30-
self.length = 2 ** len(self.sequence)
30+
self.sequence_length = len(self.sequence)
31+
self.length = 2 ** self.sequence_length
3132

3233

3334
def __repr__(self):
@@ -40,16 +41,18 @@ def __getitem__(self, i):
4041
if isinstance(i, slice):
4142
raise NotImplementedError
4243

44+
if (-self.length <= i <= -1):
45+
i += self.length
4346
if not (0 <= i < self.length):
4447
raise IndexError
4548

46-
pattern = '{0:0%sb}' % self.length
49+
pattern = '{0:0%sb}' % self.sequence_length
4750
binary_i = pattern.format(i)
4851

49-
assert len(binary_i) == len(self.sequence)
52+
assert len(binary_i) == self.sequence_length
5053

5154
return tuple(item for (is_included, item) in
52-
zip(binary_i, self.sequence) if is_included)
55+
zip(map(int, binary_i), self.sequence) if is_included)
5356

5457

5558
_reduced = property(lambda self: (type(self), self.sequence))

source_py3/test_python_toolbox/test_combi/test_perm_space.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,5 +386,6 @@ def test_neighbors():
386386

387387

388388
def test_super_structure():
389-
389+
# blocktodo do a whole thing with mapspaces and somethingspacespaceshit
390+
pass
390391

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Copyright 2009-2014 Ram Rachum.
2+
# This program is distributed under the MIT license.
3+
4+
from python_toolbox.combi import *
5+
6+
7+
def test():
8+
selection_space = SelectionSpace(range(5))
9+
assert len(tuple(selection_space)) == len(selection_space) == 2 ** 5
10+
assert selection_space[0] == ()
11+
assert selection_space[-1] == tuple(range(5))
12+
13+

0 commit comments

Comments
 (0)