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