Skip to content

Commit 092f41e

Browse files
committed
v0.4.4 handle null in array when adding list-like attributes
1 parent 078858a commit 092f41e

File tree

5 files changed

+32
-2
lines changed

5 files changed

+32
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
### Work In Progress
99
- Node: WeightedNode for weighted edge tree implementation.
1010

11+
## [0.4.4] - 2022-11-08
12+
### Fixed
13+
- Tree Constructors: Handle adding attributes that are array-like - add array even when one of the items is null
14+
1115
## [0.4.3] - 2022-11-08
1216
### Added
1317
- Node: Print format for BaseNode.
@@ -67,6 +71,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6771
- Utility Iterators: Tree traversal methods.
6872
- Workflow To Do App: Tree use case with to-do list implementation.
6973

74+
[0.4.3]: https://github.com/kayjan/bigtree/compare/v0.4.3...v0.4.4
7075
[0.4.3]: https://github.com/kayjan/bigtree/compare/v0.4.2...v0.4.3
7176
[0.4.2]: https://github.com/kayjan/bigtree/compare/v0.4.1...v0.4.2
7277
[0.4.1]: https://github.com/kayjan/bigtree/compare/v0.4.0...v0.4.1

bigtree/tree/construct.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ def add_dataframe_to_tree_by_path(
300300
for row in data.to_dict(orient="index").values():
301301
node_attrs = row.copy()
302302
del node_attrs[path_col]
303-
node_attrs = {k: v for k, v in node_attrs.items() if not np.any(pd.isnull(v))}
303+
node_attrs = {k: v for k, v in node_attrs.items() if not np.all(pd.isnull(v))}
304304
add_path_to_tree(
305305
tree_root,
306306
row[path_col],
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
DAGNode
2+
=====================
3+
4+
.. automodule:: bigtree.node.dagnode
5+
:members:
6+
:show-inheritance:

docs/source/node.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ Node
66

77
bigtree/node/basenode
88
bigtree/node/node
9+
bigtree/node/dagnode

tests/tree/test_construct.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import pandas as pd
44
import pytest
55

6-
from bigtree import find_names
76
from bigtree.node.node import Node
87
from bigtree.tree.construct import (
98
add_dataframe_to_tree_by_name,
@@ -17,6 +16,7 @@
1716
list_to_tree_tuples,
1817
nested_dict_to_tree,
1918
)
19+
from bigtree.tree.search import find_name, find_names
2020
from bigtree.utils.exceptions import DuplicatedNodeError, TreeError
2121
from tests.node.test_basenode import (
2222
assert_tree_structure_basenode_root_attr,
@@ -362,6 +362,24 @@ def test_add_dict_to_tree_by_name(self):
362362
assert_tree_structure_basenode_root_attr(root)
363363
assert_tree_structure_node_root_generic(root)
364364

365+
def test_add_dict_to_tree_by_name_different_dtype(self):
366+
name_dict = {
367+
"a": {"random": [1]},
368+
"b": {"random": [1, 2]},
369+
"c": {"random": [1, None]},
370+
"d": {"random": [None]},
371+
"e": {"random": None},
372+
"f": {"random": 0},
373+
"g": {"random": -1},
374+
"h": {"random": [-1]},
375+
}
376+
root = add_dict_to_tree_by_name(self.root, name_dict)
377+
nodes = ["a", "b", "c", "d", "e", "f", "g", "h"]
378+
expected_list = [[1], [1, 2], [1, None], None, None, 0, -1, [-1]]
379+
for node_name, expected in zip(nodes, expected_list):
380+
actual = find_name(root, node_name).get_attr("random")
381+
assert expected == actual, f"Expected\n{expected}\nReceived\n{actual}"
382+
365383
def test_add_dict_to_tree_by_name_empty(self):
366384
with pytest.raises(ValueError):
367385
add_dict_to_tree_by_name(self.root, {})

0 commit comments

Comments
 (0)