|
@@ -0,0 +1,32 @@
|
|
|
|
|
+from defs import Channel
|
|
|
|
|
+import numpy as np
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class PhotonicCoder:
|
|
|
|
|
+
|
|
|
|
|
+ def encode(self, data: np.ndarray) -> np.ndarray:
|
|
|
|
|
+ """
|
|
|
|
|
+ """
|
|
|
|
|
+ raise NotImplemented("encode function not defined")
|
|
|
|
|
+
|
|
|
|
|
+ def decode(self, data: np.ndarray) -> np.ndarray:
|
|
|
|
|
+ """
|
|
|
|
|
+ """
|
|
|
|
|
+ raise NotImplemented("decode function not defined")
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class PhotonicSimulation:
|
|
|
|
|
+ """
|
|
|
|
|
+ This is a main class that will contain coder/channel and all
|
|
|
|
|
+ necessary useful methods to run/monitor simulation
|
|
|
|
|
+ """
|
|
|
|
|
+
|
|
|
|
|
+ def __init__(self, coder: PhotonicCoder, channel: Channel):
|
|
|
|
|
+ self.coder = coder
|
|
|
|
|
+ self.channel = channel
|
|
|
|
|
+
|
|
|
|
|
+ def run(self, data: np.ndarray) -> np.ndarray:
|
|
|
|
|
+ encoded = self.coder.encode(data)
|
|
|
|
|
+ transmitted = self.channel.forward(encoded)
|
|
|
|
|
+ decoded = self.coder.decode(transmitted)
|
|
|
|
|
+ return decoded
|