Skip to content

Commit

Permalink
added coherent source
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonSekavcnik committed Dec 15, 2023
1 parent da082fd commit 692b75d
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 3 deletions.
1 change: 1 addition & 0 deletions quasi/devices/sources/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .ideal_single_photon_source import IdealSinglePhotonSource
from .ideal_coherent_source import IdealCoherentSource
79 changes: 79 additions & 0 deletions quasi/devices/sources/ideal_coherent_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
"""
Ideal Coherent Source Implementation
"""
import numpy as np
from math import factorial

from quasi.devices import (GenericDevice,
wait_input_compute,
coordinate_gui,
ensure_output_compute)
from quasi.devices.port import Port
from quasi.signals import (GenericSignal,
QuantumContentType,
GenericBoolSignal,
GenericQuantumSignal)

from quasi.gui.icons import icon_list
from quasi.simulation import ModeManager, Simulation

from quasi._math.fock.ops import adagger, a, coherent_state



class IdealCoherentSource(GenericDevice):
"""
COHERENT
"""
ports = {
"control": Port(
label="control",
direction="input",
signal=None,
signal_type=GenericBoolSignal,
device=None),
"output": Port(
label="output",
direction="output",
signal=None,
signal_type=GenericQuantumSignal,
device=None),
}

# Gui Configuration
gui_icon = icon_list.LASER
gui_tags = ["ideal"]
gui_name = "Ideal Coherent Photon Source"

power_peak = 0
power_average = 0

reference = None

@ensure_output_compute
@coordinate_gui
@wait_input_compute
def compute_outputs(self, *args, **kwargs):
mm = ModeManager()
m_id = mm.create_new_mode()
AD = adagger(mm.simulation.dimensions)
A = a(mm.simulation.dimensions)
density_matrix = np.zeros((
mm.simulation.dimensions,
mm.simulation.dimensions), dtype=np.complex128)
alpha = 1

for m in range(mm.simulation.dimensions):
for n in range(mm.simulation.dimensions):
density_matrix[m, n] = ((alpha**m * np.conj(alpha)**n) /
np.sqrt(factorial(m) * factorial(n)))

density_matrix /= np.pi

mm.modes[m_id] = density_matrix
print(mm.modes[m_id])

self.ports["output"].signal.set_contents(
content_type=QuantumContentType.FOCK,
mode_id=m_id)
self.ports["output"].signal.set_computed()
Binary file added quasi/gui/assets/laser.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions quasi/gui/icons/icon_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
SIMPLE_TRIGGER = "simple_trigger.png"
HISTOGRAM = "histogram.png"
PLAY = "play.png"
LASER = "laser.png"
4 changes: 1 addition & 3 deletions quasi/simulation/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,13 @@ def register_device(self, device_information: DeviceInformation):
def set_simulation_type(self, simulation_type: SimulationType):
self.simulation_type = simulation_type

def get_dimensiosn(self):
return self.simulation_type

@classmethod
def set_dimensions(cls, dimensions):
cls.dimensions = dimensions

@classmethod
def get_dimensions(cls, dimensions):
def get_dimensions(cls):
return cls.dimensions

def run(self):
Expand Down

0 comments on commit 692b75d

Please sign in to comment.