Skip to content
Snippets Groups Projects

Initial work on constant propagation

Open Oscar Gustafsson requested to merge constantpropagation into master
Files
2
+ 46
2
@@ -5,13 +5,13 @@ Contains some of the most commonly used mathematical operations.
"""
from numbers import Number
from typing import Dict, Optional
from typing import Dict, Iterable, Optional, Set
from numpy import abs as np_abs
from numpy import conjugate, sqrt
from b_asic.graph_component import Name, TypeName
from b_asic.operation import AbstractOperation
from b_asic.operation import AbstractOperation, Operation
from b_asic.port import SignalSourceProvider
@@ -125,6 +125,14 @@ class Addition(AbstractOperation):
def evaluate(self, a, b):
return a + b
def _propagate_some_constants(
self,
constants: Iterable[Optional[Number]],
valid_operations: Optional[Set["Operation"]] = None,
) -> None:
if any(c == 0.0 for c in constants):
print("One input is 0!")
class Subtraction(AbstractOperation):
"""
@@ -185,6 +193,14 @@ class Subtraction(AbstractOperation):
def evaluate(self, a, b):
return a - b
def _propagate_some_constants(
self,
constants: Iterable[Optional[Number]],
valid_operations: Optional[Set["Operation"]] = None,
) -> None:
if any(c == 0.0 for c in constants):
print("One input is 0!")
class AddSub(AbstractOperation):
r"""
@@ -266,6 +282,14 @@ class AddSub(AbstractOperation):
"""Set if operation is add."""
self.set_param("is_add", is_add)
def _propagate_some_constants(
self,
constants: Iterable[Optional[Number]],
valid_operations: Optional[Set["Operation"]] = None,
) -> None:
if any(c == 0.0 for c in constants):
print("One input is 0!")
class Multiplication(AbstractOperation):
r"""
@@ -323,6 +347,15 @@ class Multiplication(AbstractOperation):
def evaluate(self, a, b):
return a * b
def _propagate_some_constants(
self,
constants: Iterable[Optional[Number]],
valid_operations: Optional[Set["Operation"]] = None,
) -> None:
if any(c == 0.0 for c in constants):
print("One input is 0!")
print("Can turn into ConstantMultiplication")
class Division(AbstractOperation):
r"""
@@ -361,6 +394,17 @@ class Division(AbstractOperation):
def evaluate(self, a, b):
return a / b
def _propagate_some_constants(
self,
constants: Iterable[Optional[Number]],
valid_operations: Optional[Set["Operation"]] = None,
) -> None:
numerator, denominator = constants
if numerator == 0.0:
print("Result is 0!")
if denominator is not None:
print("Can turn into ConstantMultiplication")
class Min(AbstractOperation):
r"""
Loading