Skip to content
Snippets Groups Projects

Resolve "Replacing Operations in SFG"

Merged Jacob Wahlman requested to merge 15-replacing-operations-in-sfg into develop
All threads resolved!
Files
2
@@ -367,6 +367,44 @@ class SFG(AbstractOperation):
@@ -367,6 +367,44 @@ class SFG(AbstractOperation):
# Add connected operation to the queue of operations to visit.
# Add connected operation to the queue of operations to visit.
op_stack.append(original_connected_op)
op_stack.append(original_connected_op)
 
def replace_component(self, component: Operation, _component: Operation = None, _id: GraphID = None):
 
"""Find and replace all components matching either on GraphID, Type or both.
 
Then return a new deepcopy of the sfg with the replaced component.
 
 
Arguments:
 
component: The new component(s), e.g Multiplication
 
 
Keyword arguments:
 
_component: The specific component to replace.
 
_id: The GraphID to match the component to replace.
 
"""
 
 
assert _component is not None or _id is not None, \
 
"Define either operation to replace or GraphID of operation"
 
 
if _id is not None:
 
_component = self.find_by_id(_id)
 
 
assert _component is not None and isinstance(_component, Operation), \
 
"No operation matching the criteria found"
 
assert _component.output_count == component.output_count, \
 
"The output count may not differ between the operations"
 
assert _component.input_count == component.input_count, \
 
"The input count may not differ between the operations"
 
 
for index_in, _inp in enumerate(_component.inputs):
 
for _signal in _inp.signals:
 
_signal.remove_destination()
 
_signal.set_destination(component.input(index_in))
 
 
for index_out, _out in enumerate(_component.outputs):
 
for _signal in _out.signals:
 
_signal.remove_source()
 
_signal.set_source(component.output(index_out))
 
 
# The old SFG will be deleted by Python GC
 
return self()
 
def _evaluate_source(self, src: OutputPort, results: MutableResultMap, registers: MutableRegisterMap, prefix: str) -> Number:
def _evaluate_source(self, src: OutputPort, results: MutableResultMap, registers: MutableRegisterMap, prefix: str) -> Number:
src_prefix = prefix
src_prefix = prefix
if src_prefix:
if src_prefix:
Loading