Skip to content

Commit bd4d17f

Browse files
authored
Merge pull request #53 from opendilab/dev/mutablemapping
dev(hansbug): add clear method into TreeValue
2 parents a144b91 + 2e3c930 commit bd4d17f

File tree

7 files changed

+32
-1
lines changed

7 files changed

+32
-1
lines changed

docs/source/api_doc/tree/tree.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ TreeValue
99
---------------
1010

1111
.. autoclass:: TreeValue
12-
:members: __init__, __getattribute__, __setattr__, __delattr__, __contains__, __repr__, __iter__, __hash__, __eq__, _attr_extern, __len__, __bool__, __str__, __getstate__, __setstate__, get, pop, keys, values, items, __getitem__, __setitem__, __delitem__, _getitem_extern, _setitem_extern, _delitem_extern, popitem
12+
:members: __init__, __getattribute__, __setattr__, __delattr__, __contains__, __repr__, __iter__, __hash__, __eq__, _attr_extern, __len__, __bool__, __str__, __getstate__, __setstate__, get, pop, keys, values, items, __getitem__, __setitem__, __delitem__, _getitem_extern, _setitem_extern, _delitem_extern, popitem, clear
1313

1414

1515
.. _apidoc_tree_tree_delayed:

test/tree/common/test_storage.py

+13
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,19 @@ def test_del_(self):
273273
with pytest.raises(KeyError):
274274
t.del_('fff')
275275

276+
def test_clear(self):
277+
t = create_storage({'a': 1, 'b': 2, 'c': raw({'x': 3, 'y': 4}), 'd': {'x': 3, 'y': 4}})
278+
t.clear()
279+
assert t == create_storage({})
280+
assert t.size() == 0
281+
282+
d1 = delayed_partial(lambda: 1)
283+
d2 = delayed_partial(lambda x: x + 1, d1)
284+
t1 = create_storage({'a': d1, 'b': d2, 'c': d1, 'd': 100})
285+
t1.clear()
286+
assert t1 == create_storage({})
287+
assert t1.size() == 0
288+
276289
def test_contains(self):
277290
t = create_storage({'a': 1, 'b': 2, 'c': raw({'x': 3, 'y': 4}), 'd': {'x': 3, 'y': 4}})
278291
assert t.contains('a')

test/tree/tree/test_tree.py

+5
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,11 @@ def test_popitem(self):
355355
with pytest.raises(KeyError):
356356
tv2.popitem()
357357

358+
def test_clear(self):
359+
tv1 = TreeValue({'a': 1, 'b': 2, 'c': {'x': 2, 'y': 3}, 'd': raw({'x': 2, 'y': 3})})
360+
assert tv1.clear() is None
361+
assert not tv1
362+
358363
def test_keys(self):
359364
tv1 = TreeValue({'a': 1, 'b': 2, 'c': {'x': 2, 'y': 3}, 'd': raw({'x': 2, 'y': 3})})
360365
assert len(tv1.keys()) == 4

treevalue/tree/common/storage.pxd

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ cdef class TreeStorage:
1616
cpdef public object pop_or_default(self, str key, object default)
1717
cpdef public tuple popitem(self)
1818
cpdef public void del_(self, str key) except *
19+
cpdef public void clear(self)
1920
cpdef public boolean contains(self, str key)
2021
cpdef public uint size(self)
2122
cpdef public boolean empty(self)

treevalue/tree/common/storage.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ cdef class TreeStorage:
6767
except KeyError:
6868
raise KeyError(f"Key {repr(key)} not found in this tree.")
6969

70+
cpdef public void clear(self):
71+
self.map.clear()
72+
7073
cpdef public boolean contains(self, str key):
7174
return key in self.map
7275

treevalue/tree/tree/tree.pxd

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ cdef class TreeValue:
2323
cpdef get(self, str key, object default= *)
2424
cpdef pop(self, str key, object default= *)
2525
cpdef popitem(self)
26+
cpdef void clear(self)
2627

2728
cpdef treevalue_keys keys(self)
2829
cpdef treevalue_values values(self)

treevalue/tree/tree/tree.pyx

+8
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ cdef class TreeValue:
161161
except KeyError:
162162
raise KeyError(f'popitem(): {self._type.__name__} is empty.')
163163

164+
@cython.binding(True)
165+
cpdef void clear(self):
166+
"""
167+
Overview:
168+
Clear all the items in this treevalue object.
169+
"""
170+
self._st.clear()
171+
164172
@cython.binding(True)
165173
cpdef _attr_extern(self, str key):
166174
r"""

0 commit comments

Comments
 (0)