def _toSLH(self): # These numerically optimal solutions were obtained as outlined in # my blog post on the Mabuchi-Lab internal blog # email me ([email protected])for details. if self.N == 1: kappa0 = 9.28874141848 / self.tau kappas = np_array([7.35562929]) / self.tau Deltas = np_array([3.50876192]) / self.tau elif self.N == 3: kappa0 = 14.5869543803 / self.tau kappas = np_array([ 13.40782559, 9.29869721]) / self.tau Deltas = np_array([3.48532283, 7.14204585]) / self.tau elif self.N == 5: kappa0 = 19.8871474779 / self.tau kappas = np_array([19.03316217, 10.74270752, 16.28055664]) / self.tau Deltas = np_array([3.47857213, 10.84138821, 7.03434809]) / self.tau else: raise NotImplementedError("The number of cavities to realize the delay must be one of 1,3 or 5.") h0 = make_namespace_string(self.name, 'C0') hp = [make_namespace_string(self.name, "C{:d}p".format(n+1)) for n in range((self.N-1)/2)] hm = [make_namespace_string(self.name, "C{:d}m".format(n+1)) for n in range((self.N-1)/2)] S = Matrix([1.]) slh0 = SLH(S, Matrix([[sqrt(kappa0) * Destroy(h0)]]), ZeroOperator) slhp = [SLH(S, Matrix([[sqrt(kj) * Destroy(hj)]]), Dj * Create(hj) * Destroy(hj)) for (kj, Dj, hj) in zip(kappas, Deltas, hp)] slhm = [SLH(S, Matrix([[sqrt(kj) * Destroy(hj)]]), -Dj * Create(hj) * Destroy(hj)) for (kj, Dj, hj) in zip(kappas, Deltas, hm)] return freduce(lambda a, b: a << b, slhp + slhm, slh0)
def C2(self): return ThreePortKerrCavity(make_namespace_string(self.name, 'C2'), kappa_2=self.kappa_2, chi=self.chi, kappa_1=self.kappa_1, kappa_3=self.kappa_3, Delta=self.Delta)
def tls_space(self): """ The two-level-atom's Hilbert space. :type: :py:class:`qnet.algebra.hilbert_space_algebra.LocalSpace` """ return local_space("a", make_namespace_string(self.namespace, self.name), basis = ('h', 'g'))
def fock_space(self): """ The cavity mode's Hilbert space. :type: :py:class:`qnet.algebra.hilbert_space_algebra.LocalSpace` """ return local_space("f", make_namespace_string(self.namespace, self.name), dimension = self.FOCK_DIM)
def LSS_ci_ls(self): return Beamsplitter(make_namespace_string(self.name, 'LSS_ci_ls'), theta=self.theta_LS0)
def KC(self): return KerrCavity(make_namespace_string(self.name, 'KC'), kappa_2=self.kappa, chi=self.chi, kappa_1=self.kappa, Delta=self.Delta)
def BS(self): return Beamsplitter(make_namespace_string(self.name, 'BS'), theta=self.theta)
def W_beta(self): return Displace(make_namespace_string(self.name, 'W_beta'), alpha = self.beta)
def P(self): return Phase(make_namespace_string(self.name, 'P'), phi = self.phi)
def B2(self): return Beamsplitter(make_namespace_string(self.name, "B2"))
def Phase2(self): return Phase(make_namespace_string(self.name, 'Phase2'), phi = self.phip)
def B3(self): return Beamsplitter(make_namespace_string(self.name, 'B3'))
def NAND2(self): return PseudoNAND(make_namespace_string(self.name, 'NAND2'))
def LSS_ci_ls(self): return Beamsplitter(make_namespace_string(self.name, 'LSS_ci_ls'), theta = self.theta_LS0)
def W(self): return Displace(make_namespace_string(self.name, 'W'), alpha=self.alpha)
def P(self): return Phase(make_namespace_string(self.name, "P"), phi=self.phi)
def B2(self): return Beamsplitter(make_namespace_string(self.name, 'B2'), theta = self.theta)
def BS1(self): return Beamsplitter(make_namespace_string(self.name, 'BS1'))
def C(self): return ThreePortKerrCavity(make_namespace_string(self.name, 'C'), kappa_2 = self.kappa_2, chi = self.chi, kappa_1 = self.kappa_1, kappa_3 = self.kappa_3, Delta = self.Delta)
def K(self): return KerrCavity(make_namespace_string(self.name, 'K'), kappa_2 = self.kappa, chi = self.chi, kappa_1 = self.kappa, Delta = self.Delta)
def W(self): return Displace(make_namespace_string(self.name, 'W'), alpha = self.alpha)