Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
treevalue
提交
92bbe31e
T
treevalue
项目概览
OpenDILab开源决策智能平台
/
treevalue
大约 1 年 前同步成功
通知
3
Star
213
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
treevalue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
92bbe31e
编写于
7月 07, 2022
作者:
HansBug
😆
提交者:
GitHub
7月 07, 2022
1
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #59 from opendilab/dev/iter
dev(hansbug): update __iter__ and __reversed__
上级
fcc35480
fdeca27f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
60 addition
and
28 deletion
+60
-28
docs/source/api_doc/tree/tree.rst
docs/source/api_doc/tree/tree.rst
+1
-1
test/tree/tree/test_tree.py
test/tree/tree/test_tree.py
+13
-6
treevalue/tree/tree/graph.py
treevalue/tree/tree/graph.py
+1
-1
treevalue/tree/tree/tree.pyx
treevalue/tree/tree/tree.pyx
+45
-20
未找到文件。
docs/source/api_doc/tree/tree.rst
浏览文件 @
92bbe31e
...
...
@@ -9,7 +9,7 @@ TreeValue
---------------
.. autoclass:: TreeValue
: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, update, setdefault
: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, update, setdefault
, __reversed__
.. _apidoc_tree_tree_delayed:
...
...
test/tree/tree/test_tree.py
浏览文件 @
92bbe31e
...
...
@@ -252,12 +252,19 @@ class TestTreeTreeTree:
def
test_tree_value_iter
(
self
):
# Attention: dict(tv1) is not supported in python 3.7+
tv1
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
}})
assert
sorted
(
list
(
tv1
))
==
[
(
'a'
,
1
),
(
'b'
,
2
),
(
'c'
,
TreeValue
({
'x'
:
2
,
'y'
:
3
}))
]
assert
sorted
(
list
(
tv1
.
c
))
==
[(
'x'
,
2
),
(
'y'
,
3
)]
assert
sorted
(
list
(
tv1
))
==
[
'a'
,
'b'
,
'c'
]
assert
sorted
(
list
(
tv1
.
c
))
==
[
'x'
,
'y'
]
def
test_tree_value_reversed
(
self
):
tv1
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
}})
if
_reversible
:
assert
list
(
reversed
(
tv1
))
==
list
(
iter
(
tv1
))[::
-
1
]
assert
list
(
reversed
(
tv1
.
c
))
==
list
(
iter
(
tv1
.
c
))[::
-
1
]
else
:
with
pytest
.
raises
(
TypeError
):
reversed
(
tv1
)
with
pytest
.
raises
(
TypeError
):
reversed
(
tv1
.
c
)
def
test_tree_value_len
(
self
):
tv1
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
}})
...
...
treevalue/tree/tree/graph.py
浏览文件 @
92bbe31e
...
...
@@ -185,7 +185,7 @@ def graphics(*trees, title: Optional[str] = None, cfg: Optional[dict] = None,
graph_title
=
title
or
"<untitled>"
,
graph_cfg
=
cfg
or
{},
repr_gen
=
repr_gen
or
(
lambda
x
:
nohtml
(
repr
(
x
))),
iter_gen
=
lambda
n
:
iter
(
n
)
if
isinstance
(
n
,
TreeValue
)
else
None
,
iter_gen
=
lambda
n
:
iter
(
n
.
items
()
)
if
isinstance
(
n
,
TreeValue
)
else
None
,
node_cfg_gen
=
_dict_call_merge
(
lambda
n
,
p
,
np
,
pp
,
is_node
,
is_root
,
root
:
{
'fillcolor'
:
_shape_color
(
root
[
2
]),
'color'
:
_border_color
(
root
[
2
],
is_node
),
...
...
treevalue/tree/tree/tree.pyx
浏览文件 @
92bbe31e
...
...
@@ -15,6 +15,13 @@ from ...utils import format_tree
cdef
class
_CObject
:
pass
try
:
reversed
({
'a'
:
1
}.
keys
())
except
TypeError
:
_reversible
=
False
else
:
_reversible
=
True
cdef
inline
object
_item_unwrap
(
object
v
):
if
isinstance
(
v
,
list
)
and
len
(
v
)
==
1
:
return
v
[
0
]
...
...
@@ -529,24 +536,49 @@ cdef class TreeValue:
Overview:
Get iterator of this tree value.
Returns:
- iter (:obj:`iter`): Iterator for keys and values.
:return: An iterator for the keys.
Example:
Examples:
>>> from treevalue import TreeValue
>>>
>>> t = TreeValue({'a': 1, 'b': 2, 'x': 3})
>>> for key, value in t:
>>> print(key, value)
>>> for key in t:
... print(key)
a
b
x
The output will be:
.. note::
The method :meth:`__iter__`'s bahaviour should be similar to
\
`dict.__iter__ <https://docs.python.org/3/library/stdtypes.html#dict.update>`_.
"""
yield
from
self
.
_st
.
iter_keys
()
>>> a 1
>>> b 2
>>> x 3
@
cython
.
binding
(
True
)
def
__reversed__
(
self
):
"""
cdef
str
k
cdef
object
v
for
k
,
v
in
self
.
_st
.
iter_items
():
yield
k
,
self
.
_unraw
(
v
)
Overview:
Get the reversed iterator of tree value.
:return: A reversed iterator for the keys.
Examples:
>>> from treevalue import TreeValue
>>>
>>> t = TreeValue({'a': 1, 'b': 2, 'x': 3})
>>> for key in reversed(t):
... print(key)
x
b
a
.. note::
Only available in python 3.8 or higher version.
"""
if
_reversible
:
return
self
.
_st
.
iter_rev_keys
()
else
:
raise
TypeError
(
f
'
{
self
.
_type
.
__name__
!
r
}
object is not reversible'
)
@
cython
.
binding
(
True
)
def
__len__
(
self
):
...
...
@@ -810,13 +842,6 @@ cdef object _build_tree(TreeStorage st, object type_, str prefix, dict id_pool,
self_repr
=
_prefix_fix
(
self_repr
,
prefix
)
return
self_repr
,
children
try
:
reversed
({
'a'
:
1
}.
keys
())
except
TypeError
:
_reversible
=
False
else
:
_reversible
=
True
# noinspection PyPep8Naming
cdef
class
treevalue_keys
(
_CObject
,
Sized
,
Container
,
Reversible
):
def
__cinit__
(
self
,
TreeStorage
storage
,
type
_type
):
...
...
HansBug
😆
@HansBug
mentioned in commit
76c38fc1
·
7月 14, 2022
mentioned in commit
76c38fc1
mentioned in commit 76c38fc1c2cad07ee83f448316580bb8110e9586
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录