Skip to content

Commit 48db555

Browse files
committed
-
1 parent 98b64e2 commit 48db555

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

source_py3/python_toolbox/combi/perm.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,21 @@
2323

2424
infinity = float('inf')
2525

26-
class PermItems(sequence_tools.CuteSequenceMixin, collections.Sequence):
26+
27+
class _BasePermView:
2728
def __init__(self, perm):
2829
self.perm = perm
30+
__repr__ = lambda self: '<%s: %s>' % (type(self).__name__, self.perm)
31+
32+
33+
class PermItems(sequence_tools.CuteSequenceMixin, _BasePermView,
34+
collections.Sequence):
2935
def __getitem__(self, i):
3036
return (self.perm.domain[i], self.perm._perm_sequence[i])
3137

3238

33-
class PermAsDictoid(sequence_tools.CuteSequenceMixin, collections.Mapping):
34-
def __init__(self, perm):
35-
self.perm = perm
39+
class PermAsDictoid(sequence_tools.CuteSequenceMixin, _BasePermView,
40+
collections.Mapping):
3641
def __getitem__(self, key):
3742
return self.perm[key]
3843
def __iter__(self):

source_py3/test_python_toolbox/test_combi/test_perm_space.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from python_toolbox import sequence_tools
77

8+
from python_toolbox import combi
89
from python_toolbox.combi import *
910

1011
infinity = float('inf')
@@ -44,12 +45,21 @@ def test_perm_spaces():
4445
pure_perm_space_dict[pure_0c] == pure_perm_space_dict[pure_0d] == 'd'
4546

4647
assert None not in pure_0a # Because, damn.
48+
assert PermSpace('meow')[0] not in pure_0a
4749

4850
assert type(first_perm) == type(some_perm) == type(last_perm) == Perm
4951
assert set(some_perm) == set(range(4))
5052
assert tuple(first_perm) == (0, 1, 2, 3)
5153
assert tuple(last_perm) == (3, 2, 1, 0)
5254

55+
assert isinstance(first_perm.items, combi.perm.PermItems)
56+
assert first_perm.items[2] == (2, 2)
57+
assert repr(first_perm.items) == '<PermItems: %s>' % repr(first_perm)
58+
assert isinstance(first_perm.as_dictoid, combi.perm.PermAsDictoid)
59+
assert first_perm.as_dictoid[2] == 2
60+
assert dict(first_perm.as_dictoid) == {0: 0, 1: 1, 2: 2, 3: 3}
61+
62+
5363
assert some_perm.inverse == ~ some_perm
5464
assert ~ ~ some_perm == some_perm
5565

@@ -96,6 +106,10 @@ def test_perm_spaces():
96106
big_perm_space = PermSpace(range(150), fixed_map={1: 5, 70: 3,},
97107
degrees=(3, 5))
98108

109+
assert big_perm_space == PermSpace(range(150),
110+
fixed_map={1: 5, 70: 3,}.items(),
111+
degrees=(3, 5))
112+
99113
for i in [10**10, 3*11**9-344, 4*12**8-5, 5*3**20+4]:
100114
perm = big_perm_space[i]
101115
perm.number # Just ensuring no exception
@@ -200,6 +214,10 @@ def test_dapplied_perm_space():
200214
assert dapplied_perm['r'] == 3
201215
assert dapplied_perm['g'] == 4
202216

217+
assert dapplied_perm.as_dictoid['g'] == 4
218+
assert dapplied_perm.items[0] == ('g', 4)
219+
220+
203221
# `__contains__` works on the values, not the keys:
204222
for char in 'growl':
205223
assert char not in dapplied_perm
@@ -251,6 +269,7 @@ def test_degreed_perm_space():
251269
funky_perm_space = PermSpace('isogram', domain='travels',
252270
degrees=(1, 3, 5, 9),
253271
fixed_map={'t': 'i', 'v': 'g',})[2:-2]
272+
assert funky_perm_space.purified == PermSpace(7)
254273

255274
assert funky_perm_space.is_rapplied
256275
assert funky_perm_space.is_dapplied
@@ -447,6 +466,7 @@ def test_infinite_perm_space():
447466
assert perm_space.length == infinity
448467
assert perm_space == infinite_pure_perm_space
449468
assert perm_space[100].length == infinity
469+
assert perm_space.index(perm_space[100]) == 100
450470

451471

452472

0 commit comments

Comments
 (0)