Skip to content
Snippets Groups Projects

Resolve "Simulate SFG"

Merged Ivar Härnqvist requested to merge 24-simulate-sfg into develop
23 files
+ 1392
930
Compare changes
  • Side-by-side
  • Inline
Files
23
+ 41
81
@@ -30,12 +30,12 @@ class Constant(AbstractOperation):
@property
def value(self) -> Number:
"""TODO: docstring"""
"""Get the constant value of this operation."""
return self.param("value")
@value.setter
def value(self, value: Number):
"""TODO: docstring"""
def value(self, value: Number) -> None:
"""Set the constant value of this operation."""
return self.set_param("value", value)
@@ -103,36 +103,22 @@ class Division(AbstractOperation):
return a / b
class SquareRoot(AbstractOperation):
"""Unary square root operation.
TODO: More info.
"""
def __init__(self, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 1, output_count = 1, name = name, input_sources = [src0])
@property
def type_name(self) -> TypeName:
return "sqrt"
def evaluate(self, a):
return sqrt(complex(a))
class ComplexConjugate(AbstractOperation):
"""Unary complex conjugate operation.
class Min(AbstractOperation):
"""Binary min operation.
TODO: More info.
"""
def __init__(self, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 1, output_count = 1, name = name, input_sources = [src0])
def __init__(self, src0: Optional[SignalSourceProvider] = None, src1: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 2, output_count = 1, name = name, input_sources = [src0, src1])
@property
def type_name(self) -> TypeName:
return "conj"
return "min"
def evaluate(self, a):
return conjugate(a)
def evaluate(self, a, b):
assert not isinstance(a, complex) and not isinstance(b, complex), \
("core_operations.Min does not support complex numbers.")
return a if a < b else b
class Max(AbstractOperation):
@@ -153,26 +139,8 @@ class Max(AbstractOperation):
return a if a > b else b
class Min(AbstractOperation):
"""Binary min operation.
TODO: More info.
"""
def __init__(self, src0: Optional[SignalSourceProvider] = None, src1: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 2, output_count = 1, name = name, input_sources = [src0, src1])
@property
def type_name(self) -> TypeName:
return "min"
def evaluate(self, a, b):
assert not isinstance(a, complex) and not isinstance(b, complex), \
("core_operations.Min does not support complex numbers.")
return a if a < b else b
class Absolute(AbstractOperation):
"""Unary absolute value operation.
class SquareRoot(AbstractOperation):
"""Unary square root operation.
TODO: More info.
"""
@@ -181,48 +149,46 @@ class Absolute(AbstractOperation):
@property
def type_name(self) -> TypeName:
return "abs"
return "sqrt"
def evaluate(self, a):
return np_abs(a)
return sqrt(complex(a))
class ConstantMultiplication(AbstractOperation):
"""Unary constant multiplication operation.
class ComplexConjugate(AbstractOperation):
"""Unary complex conjugate operation.
TODO: More info.
"""
def __init__(self, value: Number, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
def __init__(self, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 1, output_count = 1, name = name, input_sources = [src0])
self.set_param("value", value)
@property
def type_name(self) -> TypeName:
return "cmul"
return "conj"
def evaluate(self, a):
return a * self.param("value")
return conjugate(a)
class ConstantAddition(AbstractOperation):
"""Unary constant addition operation.
class Absolute(AbstractOperation):
"""Unary absolute value operation.
TODO: More info.
"""
def __init__(self, value: Number, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
def __init__(self, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 1, output_count = 1, name = name, input_sources = [src0])
self.set_param("value", value)
@property
def type_name(self) -> TypeName:
return "cadd"
return "abs"
def evaluate(self, a):
return a + self.param("value")
return np_abs(a)
class ConstantSubtraction(AbstractOperation):
"""Unary constant subtraction operation.
class ConstantMultiplication(AbstractOperation):
"""Unary constant multiplication operation.
TODO: More info.
"""
@@ -232,27 +198,21 @@ class ConstantSubtraction(AbstractOperation):
@property
def type_name(self) -> TypeName:
return "csub"
return "cmul"
def evaluate(self, a):
return a - self.param("value")
class ConstantDivision(AbstractOperation):
"""Unary constant division operation.
TODO: More info.
"""
def __init__(self, value: Number, src0: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 1, output_count = 1, name = name, input_sources = [src0])
self.set_param("value", value)
return a * self.param("value")
@property
def type_name(self) -> TypeName:
return "cdiv"
def value(self) -> Number:
"""Get the constant value of this operation."""
return self.param("value")
@value.setter
def value(self, value: Number) -> None:
"""Set the constant value of this operation."""
return self.set_param("value", value)
def evaluate(self, a):
return a / self.param("value")
class Butterfly(AbstractOperation):
"""Butterfly operation that returns two outputs.
@@ -263,9 +223,9 @@ class Butterfly(AbstractOperation):
def __init__(self, src0: Optional[SignalSourceProvider] = None, src1: Optional[SignalSourceProvider] = None, name: Name = ""):
super().__init__(input_count = 2, output_count = 2, name = name, input_sources = [src0, src1])
def evaluate(self, a, b):
return a + b, a - b
@property
def type_name(self) -> TypeName:
return "bfly"
def evaluate(self, a, b):
return a + b, a - b
Loading