Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
treevalue
提交
76a5e75a
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,发现更多精彩内容 >>
未验证
提交
76a5e75a
编写于
7月 07, 2022
作者:
HansBug
😆
提交者:
GitHub
7月 07, 2022
1
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #56 from opendilab/dev/update
dev(hansbug): add update method
上级
bd4d17f5
e28a4972
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
126 addition
and
10 deletion
+126
-10
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
+49
-0
treevalue/tree/tree/tree.pxd
treevalue/tree/tree/tree.pxd
+9
-8
treevalue/tree/tree/tree.pyx
treevalue/tree/tree/tree.pyx
+67
-1
未找到文件。
docs/source/api_doc/tree/tree.rst
浏览文件 @
76a5e75a
...
...
@@ -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
: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
.. _apidoc_tree_tree_delayed:
...
...
test/tree/tree/test_tree.py
浏览文件 @
76a5e75a
...
...
@@ -4,6 +4,7 @@ import re
import
pytest
from
treevalue
import
raw
,
TreeValue
,
delayed
from
treevalue.tree.common
import
create_storage
try
:
_
=
reversed
({}.
keys
())
...
...
@@ -360,6 +361,54 @@ class TestTreeTreeTree:
assert
tv1
.
clear
()
is
None
assert
not
tv1
# noinspection DuplicatedCode
def
test_update
(
self
):
tv1
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
tv1
.
update
({
'a'
:
3
,
'c'
:
TreeValue
({
'x'
:
3
,
'y'
:
4
}),
'd'
:
{
'x'
:
200
,
'y'
:
300
}})
assert
tv1
==
TreeValue
({
'a'
:
3
,
'b'
:
2
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
}),
})
tv2
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
tv2
.
update
(
a
=
3
,
c
=
TreeValue
({
'x'
:
3
,
'y'
:
4
}),
d
=
{
'x'
:
200
,
'y'
:
300
})
assert
tv2
==
TreeValue
({
'a'
:
3
,
'b'
:
2
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
}),
})
tv3
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
tv3
.
update
(
TreeValue
({
'a'
:
3
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
})}))
assert
tv3
==
TreeValue
({
'a'
:
3
,
'b'
:
2
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
}),
})
tv4
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
tv4
.
update
(
create_storage
({
'a'
:
3
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
})}))
assert
tv4
==
TreeValue
({
'a'
:
3
,
'b'
:
2
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
}),
})
tv5
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
with
pytest
.
raises
(
TypeError
):
tv5
.
update
(
'sdklfj'
)
with
pytest
.
raises
(
TypeError
):
tv5
.
update
(
123
)
tv6
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
tv6
.
update
({
'a'
:
3
,
'c'
:
TreeValue
({
'x'
:
3
,
'y'
:
4
}),
'd'
:
{
'x'
:
200
,
'y'
:
300
}},
a
=
50
,
f
=
'dfkl'
)
assert
tv6
==
TreeValue
({
'a'
:
50
,
'b'
:
2
,
'f'
:
'dfkl'
,
'c'
:
{
'x'
:
3
,
'y'
:
4
},
'd'
:
raw
({
'x'
:
200
,
'y'
:
300
}),
})
def
test_keys
(
self
):
tv1
=
TreeValue
({
'a'
:
1
,
'b'
:
2
,
'c'
:
{
'x'
:
2
,
'y'
:
3
},
'd'
:
raw
({
'x'
:
2
,
'y'
:
3
})})
assert
len
(
tv1
.
keys
())
==
4
...
...
treevalue/tree/tree/tree.pxd
浏览文件 @
76a5e75a
...
...
@@ -20,14 +20,15 @@ cdef class TreeValue:
cpdef
_getitem_extern
(
self
,
object
key
)
cpdef
_setitem_extern
(
self
,
object
key
,
object
value
)
cpdef
_delitem_extern
(
self
,
object
key
)
cpdef
get
(
self
,
str
key
,
object
default
=
*
)
cpdef
pop
(
self
,
str
key
,
object
default
=
*
)
cpdef
popitem
(
self
)
cpdef
void
clear
(
self
)
cpdef
treevalue_keys
keys
(
self
)
cpdef
treevalue_values
values
(
self
)
cpdef
treevalue_items
items
(
self
)
cdef
void
_update
(
self
,
object
d
,
dict
kwargs
)
except
*
cpdef
public
get
(
self
,
str
key
,
object
default
=
*
)
cpdef
public
pop
(
self
,
str
key
,
object
default
=
*
)
cpdef
public
popitem
(
self
)
cpdef
public
void
clear
(
self
)
cpdef
public
treevalue_keys
keys
(
self
)
cpdef
public
treevalue_values
values
(
self
)
cpdef
public
treevalue_items
items
(
self
)
cdef
str
_prefix_fix
(
object
text
,
object
prefix
)
cdef
str
_title_repr
(
TreeStorage
st
,
object
type_
)
...
...
treevalue/tree/tree/tree.pyx
浏览文件 @
76a5e75a
...
...
@@ -2,7 +2,7 @@
# cython:language_level=3
import
os
from
collections.abc
import
Sized
,
Container
,
Reversible
from
collections.abc
import
Sized
,
Container
,
Reversible
,
Mapping
from
operator
import
itemgetter
import
cython
...
...
@@ -169,6 +169,72 @@ cdef class TreeValue:
"""
self
.
_st
.
clear
()
cdef
void
_update
(
self
,
object
d
,
dict
kwargs
)
except
*
:
cdef
object
dt
if
d
is
None
:
dt
=
{}
elif
isinstance
(
d
,
Mapping
):
dt
=
d
elif
isinstance
(
d
,
TreeValue
):
dt
=
d
.
_detach
().
detach
()
elif
isinstance
(
d
,
TreeStorage
):
dt
=
d
.
detach
()
else
:
raise
TypeError
(
f
'Invalid type of update dict -
{
type
(
d
)
!
r
}
.'
)
cdef
str
key
cdef
object
value
for
key
,
value
in
dt
.
items
():
self
.
_st
.
set
(
key
,
self
.
_raw
(
value
))
for
key
,
value
in
kwargs
.
items
():
self
.
_st
.
set
(
key
,
self
.
_raw
(
value
))
@
cython
.
binding
(
True
)
def
update
(
self
,
__update_dict
=
None
,
**
kwargs
):
"""
Overview:
Update items in current treevalue.
:param __update_dict: Dictionary object for updating.
:param kwargs: Arguments for updating.
.. note::
The method :meth:`update` is similar to
\
`dict.update <https://docs.python.org/3/library/stdtypes.html#dict.update>`_.
Examples::
>>> from treevalue import TreeValue
>>>
>>> t = TreeValue({'a': 1, 'b': 3, 'c': '233'})
>>> t.update({'a': 10, 'f': 'sdkj'}) # with dict
>>> t
<TreeValue 0x7fa31f5ba048>
├── 'a' --> 10
├── 'b' --> 3
├── 'c' --> '233'
└── 'f' --> 'sdkj'
>>>
>>> t.update(a=100, ft='fffff') # with key-word arguments
>>> t
<TreeValue 0x7fa31f5ba048>
├── 'a' --> 100
├── 'b' --> 3
├── 'c' --> '233'
├── 'f' --> 'sdkj'
└── 'ft' --> 'fffff'
>>>
>>> t.update(TreeValue({'f': {'x': 1}, 'b': 40})) # with TreeValue
>>> t
<TreeValue 0x7fa31f5ba048>
├── 'a' --> 100
├── 'b' --> 40
├── 'c' --> '233'
├── 'f' --> <TreeValue 0x7fa31f5ba278>
│ └── 'x' --> 1
└── 'ft' --> 'fffff'
"""
self
.
_update
(
__update_dict
,
kwargs
)
@
cython
.
binding
(
True
)
cpdef
_attr_extern
(
self
,
str
key
):
r
"""
...
...
HansBug
😆
@HansBug
mentioned in commit
66b8188d
·
7月 14, 2022
mentioned in commit
66b8188d
mentioned in commit 66b8188d872bd26ea433296f6ef024161a6678e8
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录