Skip to content

Commit 71096bd

Browse files
committed
FEAT(op): NULL_OP to erase Operations while merging
1 parent 5f82ed1 commit 71096bd

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

graphtik/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@
4545
from .modifiers import mapped, optional, vararg, varargs, sideffect, sideffected, rename_dependency
4646
from .netop import compose
4747
from .network import AbortedException, IncompleteExecutionError
48-
from .op import operation
48+
from .op import operation, NULL_OP

graphtik/netop.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from .config import is_debug, reset_abort
1515
from .modifiers import optional, sideffect
1616
from .network import ExecutionPlan, Network, NodePredicate, Solution, yield_ops
17-
from .op import FunctionalOperation, Operation, reparse_operation_data
17+
from .op import FunctionalOperation, NULL_OP, Operation, reparse_operation_data
1818

1919
log = logging.getLogger(__name__)
2020

@@ -77,11 +77,10 @@ def proc_op(op, parent=None):
7777
merge_set = iset() # Preseve given node order.
7878
for op in operations:
7979
if isinstance(op, NetworkOperation):
80-
merge_set.update(
81-
proc_op(s, op.name) for s in op.net.graph if isinstance(s, Operation)
82-
)
80+
merge_set.update(proc_op(s, op.name) for s in yield_ops(op.net.graph))
8381
else:
8482
merge_set.add(proc_op(op))
83+
merge_set = iset(i for i in merge_set if not isinstance(i, NULL_OP))
8584

8685
assert all(bool(n) for n in merge_set)
8786
net = Network(*merge_set)

graphtik/op.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,3 +862,13 @@ def decorator(*args, **kw):
862862
decorator.withset = op.withset
863863

864864
return decorator
865+
866+
867+
class NULL_OP(FunctionalOperation):
868+
"""Eliminates same-named operations added later during term:`operation merging`."""
869+
870+
def __init__(self, name, parents=None):
871+
super().__init__(name=name, parents=parents)
872+
873+
def compute(self, *args, **kw):
874+
raise AssertionError("Should have been eliminated!")

0 commit comments

Comments
 (0)