Skip to content

Commit 79e5b8e

Browse files
committed
-
1 parent 4b08a9f commit 79e5b8e

File tree

5 files changed

+70
-6
lines changed

5 files changed

+70
-6
lines changed

source_py3/python_toolbox/combi/perm.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class Perm(sequence_tools.CuteSequenceMixin, collections.Sequence,
5858

5959
@classmethod
6060
def coerce(cls, item, perm_space=None):
61-
if isinstance(item, Perm) and (item.just_dapplied_rapplied_perm_space
61+
if isinstance(item, Perm) and (perm_space is not None) and \
62+
(item.just_dapplied_rapplied_perm_space
6263
== perm_space.just_dapplied_rapplied_perm_space):
6364
return item
6465
else:

source_py3/python_toolbox/nifty_collections/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55

66
from .ordered_dict import OrderedDict
77
from .ordered_set import OrderedSet
8+
from .sorted_set import SortedSet
89
from .weak_key_default_dict import WeakKeyDefaultDict
910
from .weak_key_identity_dict import WeakKeyIdentityDict
1011
from .lazy_tuple import LazyTuple
1112
from .frozen_dict import FrozenDict
1213
from .frozen_counter import FrozenCounter
14+
from .integer_set import IntegerSet
1315

1416
from .emitting_ordered_set import EmittingOrderedSet
1517
from .emitting_weak_key_default_dict import EmittingWeakKeyDefaultDict
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Copyright 2009-2014 Ram Rachum.
2+
# This program is distributed under the MIT license.
3+
4+
import threading
5+
import collections
6+
import itertools
7+
8+
from python_toolbox import decorator_tools
9+
from python_toolbox import comparison_tools
10+
11+
infinity = float('inf')
12+
13+
14+
@comparison_tools.total_ordering
15+
class IntegerSet(collections.Set):
16+
def __init__(self, iterable):
17+
self.integers =
18+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright 2009-2014 Ram Rachum.
2+
# This program is distributed under the MIT license.
3+
4+
import collections
5+
6+
from python_toolbox import comparison_tools
7+
from python_toolbox import misc_tools
8+
9+
from .ordered_set import OrderedSet, KEY, PREV, NEXT
10+
11+
12+
class SortedSet(OrderedSet):
13+
14+
def __init__(self, iterable=None, key=None, reverse=False):
15+
super().__init__(iterable=iterable)
16+
self._key = key if (key is not None) else misc_tools.identity_function
17+
self._reverse = reverse
18+
19+
20+
_sort = lambda self: self.sort(key=self._key, reverse=self._reverse)
21+
22+
def add(self, key):
23+
"""
24+
Add an element to a set.
25+
26+
This has no effect if the element is already present.
27+
"""
28+
super().add(key)
29+
self._sort()
30+
31+

source_py3/test_python_toolbox/test_combi/test_perm_space.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ def test_perm_spaces():
3232
assert not pure_0a.is_dapplied
3333
assert not pure_0a.is_fixed
3434
assert not pure_0a.is_sliced
35+
assert not pure_0a.is_infinite
36+
3537

3638
first_perm = pure_0a[0]
3739
some_perm = pure_0a[7]
@@ -51,6 +53,14 @@ def test_perm_spaces():
5153
assert set(some_perm) == set(range(4))
5254
assert tuple(first_perm) == (0, 1, 2, 3)
5355
assert tuple(last_perm) == (3, 2, 1, 0)
56+
assert Perm.coerce(first_perm) == first_perm
57+
assert Perm.coerce(tuple(first_perm)) == first_perm
58+
assert Perm.coerce(list(first_perm)) == first_perm
59+
assert Perm.coerce(tuple(first_perm), pure_0a) == first_perm
60+
assert Perm.coerce(list(first_perm), pure_0b) == first_perm
61+
assert Perm.coerce(tuple(first_perm), PermSpace(5, n_elements=4)) != \
62+
first_perm
63+
5464

5565
assert isinstance(first_perm.items, combi.perm.PermItems)
5666
assert first_perm.items[2] == (2, 2)
@@ -467,11 +477,13 @@ def test_neighbors():
467477

468478

469479
def test_infinite_perm_space():
470-
perm_space = PermSpace(sequence_tools.CuteRange(infinity))
471-
assert perm_space.length == infinity
472-
assert perm_space == infinite_pure_perm_space
473-
assert perm_space[100].length == infinity
474-
assert perm_space.index(perm_space[100]) == 100
480+
assert infinite_pure_perm_space == \
481+
PermSpace(sequence_tools.CuteRange(infinity))
482+
assert infinite_pure_perm_space.length == infinity
483+
assert infinite_pure_perm_space.is_infinite
484+
assert infinite_pure_perm_space[100].length == infinity
485+
assert infinite_pure_perm_space.index(infinite_pure_perm_space[100]) == 100
486+
assert Perm(100) == infinite_pure_perm_space[100]
475487

476488

477489

0 commit comments

Comments
 (0)