@@ -40,23 +40,14 @@ def list_to_dag(
4040 assertions .assert_length_not_empty (relations , "Input list" , "relations" )
4141
4242 node_dict : Dict [str , T ] = dict ()
43- parent_node : T = dagnode . DAGNode () # type: ignore[assignment]
43+ child_name : str = ""
4444
4545 for parent_name , child_name in relations :
46- if parent_name not in node_dict :
47- parent_node = node_type (parent_name )
48- node_dict [parent_name ] = parent_node
49- else :
50- parent_node = node_dict [parent_name ]
51- if child_name not in node_dict :
52- child_node = node_type (child_name )
53- node_dict [child_name ] = child_node
54- else :
55- child_node = node_dict [child_name ]
46+ node_dict [parent_name ] = node_dict .get (parent_name , node_type (parent_name ))
47+ node_dict [child_name ] = node_dict .get (child_name , node_type (child_name ))
48+ node_dict [child_name ].parents = [node_dict [parent_name ]]
5649
57- child_node .parents = [parent_node ]
58-
59- return parent_node
50+ return node_dict [child_name ]
6051
6152
6253def dict_to_dag (
@@ -92,35 +83,27 @@ def dict_to_dag(
9283 assertions .assert_length_not_empty (relation_attrs , "Dictionary" , "relation_attrs" )
9384
9485 node_dict : Dict [str , T ] = dict ()
95- parent_node : T | None = None
86+ _parent_name : Optional [ str ] = None
9687
9788 for child_name , node_attrs in relation_attrs .items ():
9889 node_attrs = node_attrs .copy ()
99- parent_names : List [str ] = []
100- if parent_key in node_attrs :
101- parent_names = node_attrs .pop (parent_key )
90+ parent_names = node_attrs .pop (parent_key , [])
10291 assertions .assert_not_reserved_keywords (
10392 node_attrs , ["parent" , "parents" , "children" ]
10493 )
10594
106- if child_name in node_dict :
107- child_node = node_dict [child_name ]
108- child_node .set_attrs (node_attrs )
109- else :
110- child_node = node_type (child_name , ** node_attrs )
111- node_dict [child_name ] = child_node
95+ node_dict [child_name ] = node_dict .get (child_name , node_type (child_name ))
96+ node_dict [child_name ].set_attrs (node_attrs )
11297
11398 for parent_name in parent_names :
114- parent_node = node_dict .get (parent_name , node_type (parent_name ))
115- node_dict [parent_name ] = parent_node
116- child_node . parents = [ parent_node ]
99+ node_dict [ parent_name ] = node_dict .get (parent_name , node_type (parent_name ))
100+ node_dict [child_name ]. parents = [ node_dict [ parent_name ]]
101+ _parent_name = parent_name
117102
118- if parent_node is None :
119- raise ValueError (
120- f"Parent key { parent_key } not in dictionary, check `relation_attrs` and `parent_key`"
121- )
103+ if _parent_name is None :
104+ raise ValueError ("No parent specified, check `relation_attrs` and `parent_key`" )
122105
123- return parent_node
106+ return node_dict [ _parent_name ]
124107
125108
126109@exceptions .optional_dependencies_pandas
@@ -196,21 +179,23 @@ def dataframe_to_dag(
196179 raise ValueError (f"Child name cannot be empty, check column: { child_col } " )
197180
198181 node_dict : Dict [str , T ] = dict ()
199- parent_node : T = dagnode . DAGNode () # type: ignore[assignment]
182+ _parent_name : Optional [ str ] = None
200183
201184 for row in data .reset_index (drop = True ).to_dict (orient = "index" ).values ():
202185 child_name = row [child_col ]
203186 parent_name = row [parent_col ]
204187 node_attrs = common .filter_attributes (
205188 row , omit_keys = ["name" , child_col , parent_col ], omit_null_values = True
206189 )
207- child_node = node_dict .get (child_name , node_type (child_name , ** node_attrs ))
208- child_node .set_attrs (node_attrs )
209- node_dict [child_name ] = child_node
190+ node_dict [child_name ] = node_dict .get (child_name , node_type (child_name ))
191+ node_dict [child_name ].set_attrs (node_attrs )
210192
211193 if not common .isnull (parent_name ):
212- parent_node = node_dict .get (parent_name , node_type (parent_name ))
213- node_dict [parent_name ] = parent_node
214- child_node .parents = [parent_node ]
194+ node_dict [parent_name ] = node_dict .get (parent_name , node_type (parent_name ))
195+ node_dict [child_name ].parents = [node_dict [parent_name ]]
196+ _parent_name = parent_name
197+
198+ if _parent_name is None :
199+ raise ValueError ("No parent specified, check `data` and `parent_col`" )
215200
216- return parent_node
201+ return node_dict [ _parent_name ]
0 commit comments