Skip to content

Commit 72773fb

Browse files
committed
refact(net): consider as netop needs also intermediate data nodes.
1 parent aa752cb commit 72773fb

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

docs/source/composition.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ We can merge ``graphop`` and ``another_graph`` like so, avoiding a redundant ``m
136136
>>> merged_graph = compose("merged_graph", graphop, another_graph, merge=True)
137137
>>> print(merged_graph)
138138
NetworkOperation('merged_graph',
139-
needs=['a', 'b', 'c'],
139+
needs=['a', 'b', 'ab', 'a_minus_ab', 'c'],
140140
provides=['ab', 'a_minus_ab', 'abs_a_minus_ab_cubed', 'cab'],
141141
x4ops)
142142

graphtik/network.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,10 @@ def _optionalized(graph, data):
189189

190190

191191
def collect_requirements(graph) -> Tuple[iset, iset]:
192-
"""Collect and split datanodes all `graph` ops in needs/provides."""
192+
"""Collect & split datanodes in (possibly overlapping) `needs`/`provides`."""
193193
operations = list(yield_operations(graph))
194194
provides = iset(p for op in operations for p in op.provides)
195-
needs = (
196-
iset(_optionalized(graph, n) for op in operations for n in op.needs) - provides
197-
)
195+
needs = iset(_optionalized(graph, n) for op in operations for n in op.needs)
198196
# TODO: Unify _DataNode + modifiers to avoid ugly hack `net.collect_requirements()`.
199197
provides = iset(str(n) if not isinstance(n, sideffect) else n for n in provides)
200198
return needs, provides

test/test_graphtik.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ def test_network_simple_merge():
246246

247247
assert (
248248
repr(net3)
249-
== "NetworkOperation('merged', needs=['c', 'd', 'e', 'f'], provides=['sum2', 'sum1', 'sum3', 'a', 'b'], x5ops)"
249+
== "NetworkOperation('merged', needs=['a', 'b', 'sum1', 'c', 'd', 'e', 'f'], "
250+
"provides=['sum2', 'sum1', 'sum3', 'a', 'b'], x5ops)"
250251
)
251252

252253

@@ -263,7 +264,8 @@ def test_network_deep_merge():
263264
assert net1(a=1, b=2, c=4) == exp
264265
assert (
265266
repr(net1)
266-
== "NetworkOperation('my network 1', needs=[optional('a'), 'b', 'c'], provides=['sum1', 'sum2', 'sum3'], x3ops)"
267+
== "NetworkOperation('my network 1', needs=[optional('a'), 'b', 'sum1', 'c'], "
268+
"provides=['sum1', 'sum2', 'sum3'], x3ops)"
267269
)
268270

269271
sum_op4 = operation(name="sum_op1", needs=[vararg("a"), "b"], provides="sum1")(
@@ -275,7 +277,7 @@ def test_network_deep_merge():
275277
assert net2(**{"a": 1, "b": 2}) == exp
276278
assert (
277279
repr(net2)
278-
== "NetworkOperation('my network 2', needs=[optional('a'), 'b'], provides=['sum1', 'sum2'], x2ops)"
280+
== "NetworkOperation('my network 2', needs=[optional('a'), 'b', 'sum1'], provides=['sum1', 'sum2'], x2ops)"
279281
)
280282

281283
net3 = compose("merged", net1, net2, merge=True)
@@ -284,7 +286,7 @@ def test_network_deep_merge():
284286

285287
assert (
286288
repr(net3)
287-
== "NetworkOperation('merged', needs=[optional('a'), 'b', 'c'], provides=['sum2', 'sum1', 'sum3'], x4ops)"
289+
== "NetworkOperation('merged', needs=[optional('a'), 'b', 'sum1', 'c'], provides=['sum2', 'sum1', 'sum3'], x4ops)"
288290
)
289291

290292
## Reverse ops, change results and `needs` optionality.
@@ -295,7 +297,7 @@ def test_network_deep_merge():
295297

296298
assert (
297299
repr(net3)
298-
== "NetworkOperation('merged', needs=[optional('a'), 'b', 'c'], provides=['sum1', 'sum2', 'sum3'], x4ops)"
300+
== "NetworkOperation('merged', needs=[optional('a'), 'b', 'sum1', 'c'], provides=['sum1', 'sum2', 'sum3'], x4ops)"
299301
)
300302

301303

@@ -319,7 +321,9 @@ def test_network_merge_in_doctests():
319321
assert merged_graph.provides
320322

321323
assert (
322-
repr(merged_graph) == "NetworkOperation('merged_graph', needs=['a', 'b', 'c'], "
324+
repr(merged_graph) ==
325+
"NetworkOperation('merged_graph', "
326+
"needs=['a', 'b', 'ab', 'a_minus_ab', 'c'], "
323327
"provides=['ab', 'a_minus_ab', 'abs_a_minus_ab_cubed', 'cab'], x4ops)"
324328
)
325329

0 commit comments

Comments
 (0)