diff --git a/b_asic/operation.py b/b_asic/operation.py index bc4ee71ba37c28dacc4417f1669505453d39fba2..8b8251dc332af6cd0cb2a977a9b820ba2824c5d1 100644 --- a/b_asic/operation.py +++ b/b_asic/operation.py @@ -34,7 +34,7 @@ from b_asic.graph_component import ( ) from b_asic.port import InputPort, OutputPort, SignalSourceProvider from b_asic.signal import Signal -from b_asic.types import Num +from b_asic.types import Num, NumRuntime if TYPE_CHECKING: # Conditionally imported to avoid circular imports @@ -593,7 +593,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): # Import here to avoid circular imports. from b_asic.core_operations import Addition, Constant - if isinstance(src, Num): + if isinstance(src, NumRuntime): return Addition(self, Constant(src)) else: return Addition(self, src) @@ -602,14 +602,16 @@ class AbstractOperation(Operation, AbstractGraphComponent): # Import here to avoid circular imports. from b_asic.core_operations import Addition, Constant - return Addition(Constant(src) if isinstance(src, Num) else src, self) + return Addition( + Constant(src) if isinstance(src, NumRuntime) else src, self + ) def __sub__(self, src: Union[SignalSourceProvider, Num]) -> "Subtraction": # Import here to avoid circular imports. from b_asic.core_operations import Constant, Subtraction return Subtraction( - self, Constant(src) if isinstance(src, Num) else src + self, Constant(src) if isinstance(src, NumRuntime) else src ) def __rsub__(self, src: Union[SignalSourceProvider, Num]) -> "Subtraction": @@ -617,7 +619,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): from b_asic.core_operations import Constant, Subtraction return Subtraction( - Constant(src) if isinstance(src, Num) else src, self + Constant(src) if isinstance(src, NumRuntime) else src, self ) def __mul__( @@ -631,7 +633,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): return ( ConstantMultiplication(src, self) - if isinstance(src, Num) + if isinstance(src, NumRuntime) else Multiplication(self, src) ) @@ -646,7 +648,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): return ( ConstantMultiplication(src, self) - if isinstance(src, Num) + if isinstance(src, NumRuntime) else Multiplication(src, self) ) @@ -654,7 +656,9 @@ class AbstractOperation(Operation, AbstractGraphComponent): # Import here to avoid circular imports. from b_asic.core_operations import Constant, Division - return Division(self, Constant(src) if isinstance(src, Num) else src) + return Division( + self, Constant(src) if isinstance(src, NumRuntime) else src + ) def __rtruediv__( self, src: Union[SignalSourceProvider, Num] @@ -662,7 +666,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): # Import here to avoid circular imports. from b_asic.core_operations import Constant, Division, Reciprocal - if isinstance(src, Num): + if isinstance(src, NumRuntime): if src == 1: return Reciprocal(self) else: @@ -963,7 +967,7 @@ class AbstractOperation(Operation, AbstractGraphComponent): # TODO: Fix def truncate_input(self, index: int, value: Num, bits: int) -> Num: - if isinstance(value, float | int): + if isinstance(value, (float, int)): return round(value) & ((2**bits) - 1) else: raise TypeError diff --git a/b_asic/types.py b/b_asic/types.py index 656e1226eebb29699617f7df55c7e16f4277c3aa..1f37cebb556a05646def9605c043f4ac1f5ee4cb 100644 --- a/b_asic/types.py +++ b/b_asic/types.py @@ -1,7 +1,9 @@ -from typing import NewType +from typing import NewType, Union # https://stackoverflow.com/questions/69334475/how-to-hint-at-number-types-i-e-subclasses-of-number-not-numbers-themselv -Num = int | float | complex +Num = Union[int, float, complex] + +NumRuntime = (complex, float, int) Name = str