From cfb3f2ef81b3250c3aeb8cc25eb74569ebbb098f Mon Sep 17 00:00:00 2001 From: Jan Viatteau Date: Sun, 11 Aug 2024 12:59:05 -0400 Subject: [PATCH 1/5] Added FC_solve_EoM module which has functions for solving frequency conversion, with its test and example files --- FrequencyConversion/FC_solve_EoM.py | 238 + FrequencyConversion/example_solve_EoM.ipynb | 9356 +++++++++++++++++ .../fermionic_bloch_messiah.py | 28 + .../test_fermionic_bloch_messiah.py | 47 + FrequencyConversion/test_solve_EoM.py | 103 + 5 files changed, 9772 insertions(+) create mode 100644 FrequencyConversion/FC_solve_EoM.py create mode 100644 FrequencyConversion/example_solve_EoM.ipynb create mode 100644 FrequencyConversion/fermionic_bloch_messiah.py create mode 100644 FrequencyConversion/test_fermionic_bloch_messiah.py create mode 100644 FrequencyConversion/test_solve_EoM.py diff --git a/FrequencyConversion/FC_solve_EoM.py b/FrequencyConversion/FC_solve_EoM.py new file mode 100644 index 0000000..c4d4560 --- /dev/null +++ b/FrequencyConversion/FC_solve_EoM.py @@ -0,0 +1,238 @@ +"""Functions to calculate the numerical solution to the FC equations of motion using linear algebra""" + +import numpy as jnp +from scipy.linalg import svd +from scipy.linalg import expm +from scipy.special import hermite + +# pylint: disable=invalid-name +# pylint: disable=too-many-arguments +# pylint: disable=too-many-locals +# pylint: disable=consider-using-enumerate + + +def dag(M): + """ + Gives the Hermitian conjugate of input matrix. + + Args: + M (array): input matrix + + Returns: + array: the Hermitian conjugate matrix + """ + return M.conj().T + + +def pulse_shape(dw, sig, n=0): + """ + Gives a Hermite-Gaussian pulse shape. + + Args: + dw (array): frequency vector or grid + sig (float): width of the pulse + n (int): index of Hermite polynomial used. Default is 0 (first Hermite polynomial) + + Returns: + array: pulse shape + """ + gaussian = jnp.exp(-(dw**2) / (2 * sig**2)) / jnp.sqrt(2 * jnp.pi * sig**2) + return gaussian * hermite(n)(dw / sig) + + +def get_blocks(M): + """ + Separates a matrix into 4 blocks. + + Args: + M (array): matrix to split + + Returns: + (array, :top left block + array, :top right block + array, :bottom left block + array) :bottom right block + """ + side = M.shape[0] + Ua = M[0 : side // 2, 0 : side // 2] + Va = M[0 : side // 2, side // 2 : side] + Vc = M[side // 2 : side, 0 : side // 2] + Uc = M[side // 2 : side, side // 2 : side] + return Ua, Va, Vc, Uc + + +def get_prop(dw, vp, va, vc, pump, L, D=1): + """ + Generates the propagator given the crystal and pump parameters, and a frequency vector. + + Args: + dw (array): frequency vector + vp (float): group velocity for pump + va (float): group velocity for a beam + vc (float): group velocity for c beam + pump (array): pump pulse shape as a matrix (already scaled) + L (float): length of propagation in the crystal + D (float): number depicting the strength of the nonlinear interaction + + Returns: + (array, :logm of the propagator + array) :propagator + """ + + # Upper left and bottom right (diagonal) blocks + ka = 1 / va - 1 / vp + kc = 1 / vc - 1 / vp + + Ka = jnp.diag(1j * dw * ka) + Kc = jnp.diag(1j * dw * kc) + # Bottom left and upper right (non-diagonal) blocks + + J = jnp.block([[Ka, -1j * jnp.conj(D) * pump], [-1j * D * pump.conj().T, Kc]]) + prop = expm(J * L) + return J, prop + + +def check_prop(prop, print_checks=False): + """ + Verifies that the obtained propagator fulfills the 6 conditions imposed in the paper + by Andreas Christ from 2013 (equations A3-4 and A6-7). + Returns the maximum error for each condition. + + Args : + prop (matrix): the propagator to perform the checks on + print_checks (bool): if True, prints if the condition is True or False. False by default. + + Returns : + array: maximum value of the absolute value of the condition mismatch, + for each condition (always an array of 6 floats) + """ + Ua, Va, Vc, Uc = get_blocks(prop) + Vc = -Vc + N = Ua.shape[0] + cond1a = Ua @ dag(Ua) + Va @ dag(Va) + cond1b = Uc @ dag(Uc) + Vc @ dag(Vc) + cond3a = dag(Ua) @ Ua + dag(Vc) @ Vc + cond3b = dag(Uc) @ Uc + dag(Va) @ Va + cond2 = Ua @ dag(Vc) - Va @ dag(Uc) + cond4 = dag(Ua) @ Va - dag(Vc) @ Uc + I = jnp.identity(N) + O = jnp.zeros((N, N)) + conds = jnp.array([cond1a, cond1b, cond2, cond3a, cond3b, cond4]) + comps = jnp.array([I, I, O, I, I, O]) + labels = ["1a", "1b", "2", "3a", "3b", "4"] + to_return = jnp.array([]) + for i in range(len(labels)): + cond = conds[i] + comp = comps[i] + txt = "Condition {name} is {TF}" + if print_checks: + print(txt.format(name=labels[i], TF=jnp.allclose(cond, comp))) + to_return = jnp.append(to_return, jnp.max(jnp.abs(cond - comp))) + return to_return + + +def remove_phases(prop, dw, L, vp, va, vc): + """ + Removes the free space propagation phases from the propagator. + + Args: + prop (array): propagator with phases + dw (array): frequency vector + L (float): length of propagation in crystal + vp (float): group velocity for pump + va (float): group velocity for a beam + vc (float): group velocity for c beam + + Returns: + array :the phase-free propagator as a matrix + """ + kc = 1 / vp - 1 / vc + ka = 1 / va - 1 / vp + + # separate into blocks + Ua, Va, Vc, Uc = get_blocks(prop) + # remove phases + Uc = jnp.diag(jnp.exp(1j * dw * kc * L)) @ Uc + Vc = jnp.diag(jnp.exp(1j * dw * kc * L)) @ Vc + Va = jnp.diag(jnp.exp(-1j * dw * ka * L)) @ Va + Ua = jnp.diag(jnp.exp(-1j * dw * ka * L)) @ Ua + return jnp.block([[Ua, Va], [Vc, Uc]]) + + +def get_JCA(prop): + """ + Gives the Joint Spectral Amplitude based on the propagator. + + Args: + prop (array): propagator with phases + dw (array): frequency vector + L (float) : length of propagation in crystal + vp (float): group velocity for pump + va (float): group velocity for a beam + vc (float): group velocity for c beam + + Returns: + array :JCA as a matrix + """ + Ua, _, Vc, _ = get_blocks(prop) + M = Ua @ jnp.conj(Vc).T + U, s, V = svd(M) + S = jnp.diag(s) + R = jnp.arcsin(2 * S) / 2 + J = U @ R @ V + return J + + +def get_schmidt(prop): + """ + Gives average number of photons, eigenfunctions (Schmidt modes) + and eigenvalues (Schmidt coefficients squared) from propagator. + This is done using an eigendecomposition. + For the method with straight-up svds, see get_schmidt2. + + Args: + prop(array): propagator + dw (array): frequency vector + L (float): length of propagation crystal + vp (float): group velocity for pump + va (float): group velocity for a beam + vc (float): group velocity for c beam + + Returns: + (float, :avg number of photons + array, :Schmidt modes + array) :Schmidt coefficients squared + """ + _, Va, _, _ = get_blocks(prop) + Numa = Va @ jnp.conj(Va).T # Numbers matrix for a-beam + Na = jnp.real(jnp.trace(Numa)) # average number of photons in a-beam + val, u = jnp.linalg.eigh(Numa) # schmidt coefficients squared and modes from eigendecomposition + val = jnp.flip(val) + u = jnp.flip(u, axis=1) + return Na, val, u + + +def get_schmidt2(prop): + """ + Alternative method to get Schmidt modes and coefficients + by doing svds of the propagator blocks directly. + + Args : + prop (array): the propagator + + Returns : + (array, :the U matrix from the svd of Va + array, :the array of singular values from the svd of Va + array, :the V matrix from the svd of Va + array, :the U matrix from the svd of Vc + array, :the array of singular values from the svd of Vc + array) :the V matrix from the svd of Vc + """ + _, Va, Vc, _ = get_blocks(prop) + varphiV, sinrk1, phiV = svd(Va) + xiV, sinrk2, psiV = svd(Vc) + varphiV = jnp.flip(varphiV, axis=0) + phiV = jnp.flip(phiV, axis=0) + xiV = jnp.flip(xiV, axis=0) + psiV = jnp.flip(psiV, axis=0) + return jnp.conj(varphiV), sinrk1, phiV.T, jnp.conj(xiV), sinrk2, psiV.T diff --git a/FrequencyConversion/example_solve_EoM.ipynb b/FrequencyConversion/example_solve_EoM.ipynb new file mode 100644 index 0000000..7c7752c --- /dev/null +++ b/FrequencyConversion/example_solve_EoM.ipynb @@ -0,0 +1,9356 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Short example of usage for generating and analyzing the propagator for frequency conversion, for an unpoled waveguide." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from FC_solve_EoM import get_prop, get_JCA, get_schmidt, get_schmidt2, pulse_shape, remove_phases\n", + "%config InlineBackend.figure_formats=['svg']\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "np.set_printoptions(linewidth=170)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We begin by defining the parameters associated with frequency conversion (of the pump and crystal)." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities\n", + "\n", + "dw_range = 10 # Range of frequency values\n", + "N = 301 # Number of frequency points\n", + "dw = np.linspace(-dw_range, dw_range, N) # Frequency vector\n", + "L = 1.35 # Length of propagation in FC medium\n", + "sig = 1.1 # Width of the (Hermite-Gaussian) pump shape\n", + "amp = 0.08 # Pump amplitude\n", + "pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig, n = 0) # Gaussian-shaped pump" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then generate the propagator by calling the appropriate function." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "_, prop = get_prop(dw, vp, va, vc, pump, L) # Matrix to exponentiate and propagator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize the input pulses by defining them and comparing them to the pump pulse shape." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Initial pulses\n", + "initial_Ea = np.zeros(dw.size)\n", + "initial_Ec = 0.05 * pulse_shape(dw, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:50.269748\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(dw, initial_Ea, label=\"Initial $E_a$\")\n", + "plt.plot(dw, initial_Ec, label=\"Initial $E_c$\")\n", + "plt.plot(dw, pulse_shape(dw, sig), label=\"Normalized pump pulse\")\n", + "plt.ylabel(\"Amplitude\")\n", + "plt.title(\"Input pulses\")\n", + "plt.legend(loc=\"upper left\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get what the output pulses look like, we do matrix multiplication with the propagator, with its phases removed." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "sol = remove_phases(prop, dw, L, vp, va, vc) @ np.concatenate((initial_Ea, initial_Ec))\n", + "Ea, Ec = np.split(sol, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'a beam / down-converted beam')" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:50.546072\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(dw, np.real(Ea), label=\"Re\")\n", + "plt.plot(dw, np.imag(Ea), label=\"Im\")\n", + "plt.plot(dw, np.abs(Ea), label=\"Abs\")\n", + "plt.legend()\n", + "plt.xlabel(\"$\\delta\\omega$\")\n", + "plt.ylabel(\"Amplitude\")\n", + "plt.title(\"a beam / down-converted beam\")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'c beam / non-converted beam')" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:50.743731\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(dw, np.real(Ec), label=\"Re\")\n", + "plt.plot(dw, np.imag(Ec), label=\"Im\")\n", + "plt.plot(dw, np.abs(Ec), label=\"Abs\")\n", + "plt.legend()\n", + "plt.xlabel(\"$\\delta\\omega$\")\n", + "plt.ylabel(\"Amplitude\")\n", + "plt.title(\"c beam / non-converted beam\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get the Joint Conversion Amplitude, we call the appropriate function and show the matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "J = get_JCA(prop)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, '$\\\\delta\\\\omega_{out}$')" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:51.030434\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(np.abs(J), extent=[dw.min(), dw.max(), dw.min(), dw.max()])\n", + "plt.title(\"JCA\")\n", + "plt.xlabel(\"$\\delta\\omega_{in}$\")\n", + "plt.ylabel(\"$\\delta\\omega_{out}$\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To extract information from the propagator, we can do a Schmidt decomposition. This yields the same information as an eigendecomposition of the numbers matrix, which is what we do by calling `get_schmidt`. From the function, we get the average number of photons generated, the vector of eigenvalues (Schmidt coefficients squared) and the eigenvectors (Schmidt modes)." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average number of signal photons is 7.046517e-01\n" + ] + } + ], + "source": [ + "Na, val, u = get_schmidt(prop)\n", + "txt = \"Average number of signal photons is {val:e}\"\n", + "print(txt.format(val=Na))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then select a mode to plot. Here is the first mode." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Schmidt mode 1')" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:51.326580\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mark = 1 # number of the Schmidt mode to plot\n", + "\n", + "mode = np.exp(-1j * np.angle(u[(N - 1) // 2, mark-1])) * u[:, mark-1] # applying a phase so that the imaginary part is 0 at 0\n", + "plt.plot(dw, np.real(mode), label=\"Re\")\n", + "plt.plot(dw, np.imag(mode), label=\"Im\")\n", + "plt.plot(dw, np.abs(mode), label=\"Abs\")\n", + "plt.legend()\n", + "plt.ylabel(\"Amplitude\")\n", + "plt.title(\"Schmidt mode \" + str(mark))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also make a bar plot of the conversion efficiencies for each mode. Here we do the first 10 modes." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.0, 1.1)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:51.495201\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "effs = val[:10] # efficiencies for the first 10 modes\n", + "plt.bar(x=np.arange(1, 11), height=effs)\n", + "plt.xlabel(\"Schmidt mode number\")\n", + "plt.ylabel(\"$sin^2(r_k)$\")\n", + "plt.title(\"FC Efficiency\")\n", + "plt.ylim(0, 1.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check that our results are good, we can also make use of the `get_schmidt2` function, which does the same Schmidt decomposition but by doing the SVDs directly." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "u, val, *_ = get_schmidt2(prop)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Schmidt mode 1')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:51.757983\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mark = 1 # number of the Schmidt mode to plot\n", + "\n", + "mode = np.exp(-1j * np.angle(u[(N - 1) // 2, mark-1])) * u[:, mark-1] # applying a phase so that the imaginary part is 0 at 0\n", + "plt.plot(dw, np.real(mode), label=\"Re\")\n", + "plt.plot(dw, np.imag(mode), label=\"Im\")\n", + "plt.plot(dw, np.abs(mode), label=\"Abs\")\n", + "plt.legend()\n", + "plt.ylabel(\"Amplitude\")\n", + "plt.title(\"Schmidt mode \" + str(mark))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.0, 1.1)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-08-11T12:57:51.943626\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.7.2, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "effs = val[:10]**2 # efficiencies for the first 10 modes. We square them because SVDs yield the Schmidt coefficients not squared.\n", + "plt.bar(x=np.arange(1, 11), height=effs)\n", + "plt.xlabel(\"Schmidt mode number\")\n", + "plt.ylabel(\"$sin^2(r_k)$\")\n", + "plt.title(\"FC Efficiency\")\n", + "plt.ylim(0, 1.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, the SVD results match the eigendecomposition results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/FrequencyConversion/fermionic_bloch_messiah.py b/FrequencyConversion/fermionic_bloch_messiah.py new file mode 100644 index 0000000..f6e1dd9 --- /dev/null +++ b/FrequencyConversion/fermionic_bloch_messiah.py @@ -0,0 +1,28 @@ +import numpy as np + +# pylint: disable=invalid-name +# pylint: disable=too-many-arguments +# pylint: disable=too-many-locals +# pylint: disable=consider-using-enumerate + +def fermionic_bloch_messiah_1(M): + """Implements the fermionic Bloch-Messiah decomposition""" + + size = M.shape[0] + size = size // 2 + Ua = M[:size, :size] + Va = M[:size, size:] + Vc = M[size:, :size] + Uc = M[size:, size:] + Aa, C, Badag = np.linalg.svd(Ua) + Ac, _, Bcdag = np.linalg.svd(Uc) + isDa = np.diag(Aa.T.conj() @ Va @ Bcdag.T.conj()) + isDaabs = np.abs(isDa) + sqrtangle = np.angle(isDa) / 2 + phase = np.exp(1j * sqrtangle) + conjphase = phase.conj() + zero = np.zeros_like(Ac) + A = np.block([[Aa * phase, zero], [zero, Ac * conjphase]]) + D = np.block([[np.diag(C), np.diag(isDaabs)], [-np.diag(isDaabs), np.diag(C)]]) + Bdag = np.block([[conjphase[:, None] * Badag, zero], [zero, phase[:, None] * Bcdag]]) + return A, D.real, Bdag diff --git a/FrequencyConversion/test_fermionic_bloch_messiah.py b/FrequencyConversion/test_fermionic_bloch_messiah.py new file mode 100644 index 0000000..6664743 --- /dev/null +++ b/FrequencyConversion/test_fermionic_bloch_messiah.py @@ -0,0 +1,47 @@ +"""Tests for the implementation of the fermionic bloch messiah decomposition""" + +import pytest +import numpy as np +from FC_solve_EoM import get_prop, get_JCA, get_schmidt, get_schmidt2, pulse_shape, get_blocks +from fermionic_bloch_messiah import fermionic_bloch_messiah_1 + +# pylint: disable=invalid-name +# pylint: disable=too-many-arguments +# pylint: disable=too-many-locals +# pylint: disable=consider-using-enumerate + +@pytest.mark.parametrize("N", [101, 301, 1001]) +@pytest.mark.parametrize("amp", np.arange(0.01, 0.31, 0.03)) +def test_fbm_decomp(amp, N): + """Tests that the product of decomposition matrices gives back the propagator""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + L = 1.35 # length of propagation in FC medium + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L) # propagator + + A, D, Bdag = fermionic_bloch_messiah_1(prop) + + assert np.allclose(A @ D @ Bdag, prop, atol=1e-7) + # We set absolute tolerance to 1e-7 to pass the tests, but even with that on test is failed + + +@pytest.mark.parametrize("N", [101, 301, 1001]) +@pytest.mark.parametrize("amp", np.linspace(0.01, 0.3, 10)) +def test_fbm_sv(amp, N): + """Tests that the singular values match the expected cos^2+sin^2 relation""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + L = 1.35 # length of propagation in FC medium + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L) # propagator + + A, D, Bdag = fermionic_bloch_messiah_1(prop) + + Du, Dv, *_ = get_blocks(D) + + assert np.allclose(Du @ Du + Dv @ Dv, np.identity(N)) diff --git a/FrequencyConversion/test_solve_EoM.py b/FrequencyConversion/test_solve_EoM.py new file mode 100644 index 0000000..32cc57c --- /dev/null +++ b/FrequencyConversion/test_solve_EoM.py @@ -0,0 +1,103 @@ +"""Tests for the solve_EoM functions""" + +import pytest +import numpy as np +from scipy.optimize import curve_fit +from FC_solve_EoM import get_prop, get_JCA, get_schmidt, get_schmidt2, pulse_shape, get_blocks + +# pylint: disable=invalid-name +# pylint: disable=too-many-arguments +# pylint: disable=too-many-locals +# pylint: disable=consider-using-enumerate + + +@pytest.mark.parametrize("N", [101, 301, 1001]) +@pytest.mark.parametrize("amp", np.arange(0.01, 0.3, 0.02)) +def test_prop_blocks_1(N, amp): + """Tests that the propagator blocks follow the right relations""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + L = 1.35 # length of propagation in FC medium + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L) # matrix to exponentiate and propagator + + Ua, Va, Vc, Uc = get_blocks(prop) + Vc = -Vc + + cond1a = np.allclose(Ua @ Ua.T.conj() + Va @ Va.T.conj(), np.identity(N)) + cond1b = np.allclose(Uc @ Uc.T.conj() + Vc @ Vc.T.conj(), np.identity(N)) + assert cond1a and cond1b + + +@pytest.mark.parametrize("N", [101, 301, 1001]) +@pytest.mark.parametrize("amp", np.linspace(0.01, 0.3, 10)) +def test_prop_blocks_2(N, amp): + """Tests that the propagator blocks follow the right relations""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + L = 1.35 # length of propagation in FC medium + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L) # matrix to exponentiate and propagator + + Ua, Va, Vc, Uc = get_blocks(prop) + Vc = -Vc + + assert np.allclose(Ua @ Vc.T.conj(), Va @ Uc.T.conj()) + + +@pytest.mark.parametrize("N", [101, 301]) +@pytest.mark.parametrize("amp", np.linspace(0.01, 0.3, 10)) +def test_noint(N, amp): + """Tests that when the nonlinear interaction is off, the propagator is diagonal""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + L = 1.35 # length of propagation in FC medium + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L, D=0) # propagator + + assert np.allclose(prop - np.diag(np.diagonal(prop)), np.zeros(prop.shape)) + + +@pytest.mark.parametrize("N", [101, 301]) +@pytest.mark.parametrize("L", np.arange(0.5, 3, 0.5)) +def test_JCA_low_gain(N, L): + """Tests that the JCA at low gain matches a sinc times a gaussian""" + vc, vp, va = 1 / 1.5, 1 / 3, 1 / 4.5 # group velocities + dw_range = 10 # Range of frequency values + dw = np.linspace(-dw_range, dw_range, N) # frequency difference vector + sig = 1.1 # width of the (Hermite-Gaussian) pump shape + amp = 1e-2 # pump amplitude for low gain + pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig) # pump + _, prop = get_prop(dw, vp, va, vc, pump, L, D=0) # propagator + + def phase_matching(dw_a, dw_c, L): + dk = dw_a * (1 / va - 1 / vp) + dw_c * (1 / vp - 1 / vc) + return L / 2 * np.sinc(dk * L / 2) + + def JSA_model(X, Y, sig, L, amp): + return np.abs(phase_matching(X, Y, L) * amp * pulse_shape(X - Y, sig)) + + def _JSA_model(M, sig, L, amp): + x, y = M + return JSA_model(x, y, sig, L, amp) + + J = get_JCA(prop) + + X, Y = np.meshgrid(dw, dw) + + xdata = np.vstack((np.ravel(X), np.ravel(Y))) + ydata = np.ravel(np.abs(J)) + p0 = (sig, amp, 6.28) + + popt, pcov = curve_fit(_JSA_model, xdata, ydata, p0) + + fit = JSA_model(X, Y, popt[0], popt[1], popt[2]) + + assert np.allclose(J, fit) + From d7235fd32a94894d05ce6c8064242ddaa8230339 Mon Sep 17 00:00:00 2001 From: Jan Viatteau Date: Wed, 14 Aug 2024 09:06:42 +0200 Subject: [PATCH 2/5] Switched jnp to np and replaced the scipy svd by the numpy one --- FrequencyConversion/FC_solve_EoM.py | 67 ++++++++++++++--------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/FrequencyConversion/FC_solve_EoM.py b/FrequencyConversion/FC_solve_EoM.py index c4d4560..9c9001e 100644 --- a/FrequencyConversion/FC_solve_EoM.py +++ b/FrequencyConversion/FC_solve_EoM.py @@ -1,7 +1,6 @@ """Functions to calculate the numerical solution to the FC equations of motion using linear algebra""" -import numpy as jnp -from scipy.linalg import svd +import numpy as np from scipy.linalg import expm from scipy.special import hermite @@ -36,7 +35,7 @@ def pulse_shape(dw, sig, n=0): Returns: array: pulse shape """ - gaussian = jnp.exp(-(dw**2) / (2 * sig**2)) / jnp.sqrt(2 * jnp.pi * sig**2) + gaussian = np.exp(-(dw**2) / (2 * sig**2)) / np.sqrt(2 * np.pi * sig**2) return gaussian * hermite(n)(dw / sig) @@ -83,11 +82,11 @@ def get_prop(dw, vp, va, vc, pump, L, D=1): ka = 1 / va - 1 / vp kc = 1 / vc - 1 / vp - Ka = jnp.diag(1j * dw * ka) - Kc = jnp.diag(1j * dw * kc) + Ka = np.diag(1j * dw * ka) + Kc = np.diag(1j * dw * kc) # Bottom left and upper right (non-diagonal) blocks - J = jnp.block([[Ka, -1j * jnp.conj(D) * pump], [-1j * D * pump.conj().T, Kc]]) + J = np.block([[Ka, -1j * np.conj(D) * pump], [-1j * D * pump.conj().T, Kc]]) prop = expm(J * L) return J, prop @@ -115,19 +114,19 @@ def check_prop(prop, print_checks=False): cond3b = dag(Uc) @ Uc + dag(Va) @ Va cond2 = Ua @ dag(Vc) - Va @ dag(Uc) cond4 = dag(Ua) @ Va - dag(Vc) @ Uc - I = jnp.identity(N) - O = jnp.zeros((N, N)) - conds = jnp.array([cond1a, cond1b, cond2, cond3a, cond3b, cond4]) - comps = jnp.array([I, I, O, I, I, O]) + I = np.identity(N) + O = np.zeros((N, N)) + conds = np.array([cond1a, cond1b, cond2, cond3a, cond3b, cond4]) + comps = np.array([I, I, O, I, I, O]) labels = ["1a", "1b", "2", "3a", "3b", "4"] - to_return = jnp.array([]) + to_return = np.array([]) for i in range(len(labels)): cond = conds[i] comp = comps[i] txt = "Condition {name} is {TF}" if print_checks: - print(txt.format(name=labels[i], TF=jnp.allclose(cond, comp))) - to_return = jnp.append(to_return, jnp.max(jnp.abs(cond - comp))) + print(txt.format(name=labels[i], TF=np.allclose(cond, comp))) + to_return = np.append(to_return, np.max(np.abs(cond - comp))) return to_return @@ -152,11 +151,11 @@ def remove_phases(prop, dw, L, vp, va, vc): # separate into blocks Ua, Va, Vc, Uc = get_blocks(prop) # remove phases - Uc = jnp.diag(jnp.exp(1j * dw * kc * L)) @ Uc - Vc = jnp.diag(jnp.exp(1j * dw * kc * L)) @ Vc - Va = jnp.diag(jnp.exp(-1j * dw * ka * L)) @ Va - Ua = jnp.diag(jnp.exp(-1j * dw * ka * L)) @ Ua - return jnp.block([[Ua, Va], [Vc, Uc]]) + Uc = np.diag(np.exp(1j * dw * kc * L)) @ Uc + Vc = np.diag(np.exp(1j * dw * kc * L)) @ Vc + Va = np.diag(np.exp(-1j * dw * ka * L)) @ Va + Ua = np.diag(np.exp(-1j * dw * ka * L)) @ Ua + return np.block([[Ua, Va], [Vc, Uc]]) def get_JCA(prop): @@ -175,10 +174,10 @@ def get_JCA(prop): array :JCA as a matrix """ Ua, _, Vc, _ = get_blocks(prop) - M = Ua @ jnp.conj(Vc).T - U, s, V = svd(M) - S = jnp.diag(s) - R = jnp.arcsin(2 * S) / 2 + M = Ua @ np.conj(Vc).T + U, s, V = np.linalg.svd(M) + S = np.diag(s) + R = np.arcsin(2 * S) / 2 J = U @ R @ V return J @@ -204,11 +203,11 @@ def get_schmidt(prop): array) :Schmidt coefficients squared """ _, Va, _, _ = get_blocks(prop) - Numa = Va @ jnp.conj(Va).T # Numbers matrix for a-beam - Na = jnp.real(jnp.trace(Numa)) # average number of photons in a-beam - val, u = jnp.linalg.eigh(Numa) # schmidt coefficients squared and modes from eigendecomposition - val = jnp.flip(val) - u = jnp.flip(u, axis=1) + Numa = Va @ np.conj(Va).T # Numbers matrix for a-beam + Na = np.real(np.trace(Numa)) # average number of photons in a-beam + val, u = np.linalg.eigh(Numa) # schmidt coefficients squared and modes from eigendecomposition + val = np.flip(val) + u = np.flip(u, axis=1) return Na, val, u @@ -229,10 +228,10 @@ def get_schmidt2(prop): array) :the V matrix from the svd of Vc """ _, Va, Vc, _ = get_blocks(prop) - varphiV, sinrk1, phiV = svd(Va) - xiV, sinrk2, psiV = svd(Vc) - varphiV = jnp.flip(varphiV, axis=0) - phiV = jnp.flip(phiV, axis=0) - xiV = jnp.flip(xiV, axis=0) - psiV = jnp.flip(psiV, axis=0) - return jnp.conj(varphiV), sinrk1, phiV.T, jnp.conj(xiV), sinrk2, psiV.T + varphiV, sinrk1, phiV = np.linalg.svd(Va) + xiV, sinrk2, psiV = np.linalg.svd(Vc) + varphiV = np.flip(varphiV, axis=0) + phiV = np.flip(phiV, axis=0) + xiV = np.flip(xiV, axis=0) + psiV = np.flip(psiV, axis=0) + return np.conj(varphiV), sinrk1, phiV.T, np.conj(xiV), sinrk2, psiV.T From 90cc0de173438340b8e708d0bb1646cc578b8777 Mon Sep 17 00:00:00 2001 From: Jan Viatteau Date: Wed, 14 Aug 2024 09:11:25 +0200 Subject: [PATCH 3/5] Removed fermionic_bloch_messiah --- .../fermionic_bloch_messiah.py | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 FrequencyConversion/fermionic_bloch_messiah.py diff --git a/FrequencyConversion/fermionic_bloch_messiah.py b/FrequencyConversion/fermionic_bloch_messiah.py deleted file mode 100644 index f6e1dd9..0000000 --- a/FrequencyConversion/fermionic_bloch_messiah.py +++ /dev/null @@ -1,28 +0,0 @@ -import numpy as np - -# pylint: disable=invalid-name -# pylint: disable=too-many-arguments -# pylint: disable=too-many-locals -# pylint: disable=consider-using-enumerate - -def fermionic_bloch_messiah_1(M): - """Implements the fermionic Bloch-Messiah decomposition""" - - size = M.shape[0] - size = size // 2 - Ua = M[:size, :size] - Va = M[:size, size:] - Vc = M[size:, :size] - Uc = M[size:, size:] - Aa, C, Badag = np.linalg.svd(Ua) - Ac, _, Bcdag = np.linalg.svd(Uc) - isDa = np.diag(Aa.T.conj() @ Va @ Bcdag.T.conj()) - isDaabs = np.abs(isDa) - sqrtangle = np.angle(isDa) / 2 - phase = np.exp(1j * sqrtangle) - conjphase = phase.conj() - zero = np.zeros_like(Ac) - A = np.block([[Aa * phase, zero], [zero, Ac * conjphase]]) - D = np.block([[np.diag(C), np.diag(isDaabs)], [-np.diag(isDaabs), np.diag(C)]]) - Bdag = np.block([[conjphase[:, None] * Badag, zero], [zero, phase[:, None] * Bcdag]]) - return A, D.real, Bdag From bc62a3b1daa0ddbb86440c2a504768db7d041bac Mon Sep 17 00:00:00 2001 From: Jan Viatteau Date: Tue, 1 Oct 2024 20:01:38 +0200 Subject: [PATCH 4/5] Included discretization constant in interaction matrix and changed to L2 normalization for pump pulse --- FrequencyConversion/FC_solve_EoM.py | 17 +- FrequencyConversion/example_solve_EoM.ipynb | 3197 +++++++++---------- 2 files changed, 1596 insertions(+), 1618 deletions(-) diff --git a/FrequencyConversion/FC_solve_EoM.py b/FrequencyConversion/FC_solve_EoM.py index 9c9001e..0660499 100644 --- a/FrequencyConversion/FC_solve_EoM.py +++ b/FrequencyConversion/FC_solve_EoM.py @@ -35,7 +35,7 @@ def pulse_shape(dw, sig, n=0): Returns: array: pulse shape """ - gaussian = np.exp(-(dw**2) / (2 * sig**2)) / np.sqrt(2 * np.pi * sig**2) + gaussian = np.exp(-(dw**2) / (2 * sig**2)) / (np.pi * sig**2)**(1 / 4) return gaussian * hermite(n)(dw / sig) @@ -84,9 +84,11 @@ def get_prop(dw, vp, va, vc, pump, L, D=1): Ka = np.diag(1j * dw * ka) Kc = np.diag(1j * dw * kc) + # Bottom left and upper right (non-diagonal) blocks + offdiag = np.conj(D) * pump * (dw[-1] - dw[0]) / (dw.size - 1) - J = np.block([[Ka, -1j * np.conj(D) * pump], [-1j * D * pump.conj().T, Kc]]) + J = np.block([[Ka, -1j * offdiag], [-1j * offdiag.conj().T, Kc]]) prop = expm(J * L) return J, prop @@ -158,18 +160,14 @@ def remove_phases(prop, dw, L, vp, va, vc): return np.block([[Ua, Va], [Vc, Uc]]) -def get_JCA(prop): +def get_JCA(prop, dw): """ Gives the Joint Spectral Amplitude based on the propagator. Args: prop (array): propagator with phases dw (array): frequency vector - L (float) : length of propagation in crystal - vp (float): group velocity for pump - va (float): group velocity for a beam - vc (float): group velocity for c beam - + Returns: array :JCA as a matrix """ @@ -178,7 +176,8 @@ def get_JCA(prop): U, s, V = np.linalg.svd(M) S = np.diag(s) R = np.arcsin(2 * S) / 2 - J = U @ R @ V + delta_omega = (dw[-1] - dw[0]) / (dw.size - 1) + J = U @ R @ V / delta_omega return J diff --git a/FrequencyConversion/example_solve_EoM.ipynb b/FrequencyConversion/example_solve_EoM.ipynb index 7c7752c..4531f6a 100644 --- a/FrequencyConversion/example_solve_EoM.ipynb +++ b/FrequencyConversion/example_solve_EoM.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 97, "metadata": {}, "outputs": [ { @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 98, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ "dw = np.linspace(-dw_range, dw_range, N) # Frequency vector\n", "L = 1.35 # Length of propagation in FC medium\n", "sig = 1.1 # Width of the (Hermite-Gaussian) pump shape\n", - "amp = 0.08 # Pump amplitude\n", + "amp = 0.8 # Pump amplitude\n", "pump = amp * pulse_shape(dw[:, np.newaxis] - dw, sig, n = 0) # Gaussian-shaped pump" ] }, @@ -64,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 99, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 100, "metadata": {}, "outputs": [], "source": [ @@ -91,16 +91,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 101, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 25, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" }, @@ -110,12 +110,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-08-11T12:57:50.269748\n", + " 2024-09-30T21:35:08.946848\n", " image/svg+xml\n", " \n", " \n", @@ -131,18 +131,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -150,17 +150,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -292,12 +292,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -349,12 +349,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -364,12 +364,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -379,12 +379,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -394,12 +394,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -412,167 +412,212 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -780,145 +825,145 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -1297,7 +1342,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 102, "metadata": {}, "outputs": [], "source": [ @@ -1307,7 +1352,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 103, "metadata": {}, "outputs": [ { @@ -1316,7 +1361,7 @@ "Text(0.5, 1.0, 'a beam / down-converted beam')" ] }, - "execution_count": 27, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" }, @@ -1326,12 +1371,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-08-11T12:57:50.546072\n", + " 2024-09-30T21:35:09.214932\n", " image/svg+xml\n", " \n", " \n", @@ -1347,18 +1392,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -1366,17 +1411,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1508,12 +1553,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1565,12 +1610,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1580,12 +1625,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1595,12 +1640,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1610,12 +1655,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1625,7 +1670,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -2586,7 +2634,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 104, "metadata": {}, "outputs": [ { @@ -2595,7 +2643,7 @@ "Text(0.5, 1.0, 'c beam / non-converted beam')" ] }, - "execution_count": 28, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" }, @@ -2605,12 +2653,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-08-11T12:57:50.743731\n", + " 2024-09-30T21:35:09.413459\n", " image/svg+xml\n", " \n", " \n", @@ -2626,18 +2674,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -2645,17 +2693,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2787,12 +2835,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2844,12 +2892,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2859,12 +2907,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2874,12 +2922,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2889,12 +2937,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2904,7 +2952,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3314,284 +3281,296 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -3948,16 +3927,16 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 105, "metadata": {}, "outputs": [], "source": [ - "J = get_JCA(prop)" + "J = get_JCA(prop, dw)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 106, "metadata": {}, "outputs": [ { @@ -3966,7 +3945,7 @@ "Text(0, 0.5, '$\\\\delta\\\\omega_{out}$')" ] }, - "execution_count": 30, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" }, @@ -3981,7 +3960,7 @@ " \n", " \n", " \n", - " 2024-08-11T12:57:51.030434\n", + " 2024-09-30T21:35:09.709296\n", " image/svg+xml\n", " \n", " \n", @@ -4012,20 +3991,20 @@ "z\n", "\" style=\"fill: #ffffff\"/>\n", " \n", - " \n", + " \n", " \n", + "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\" id=\"image800aeaa606\" transform=\"scale(1 -1) translate(0 -266.4)\" x=\"58.523438\" y=\"-22.030125\" width=\"266.4\" height=\"266.4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4093,7 +4072,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4146,7 +4125,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4162,7 +4141,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4204,7 +4183,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4219,7 +4198,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4234,7 +4213,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4249,7 +4228,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4264,7 +4243,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4376,12 +4355,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4398,7 +4377,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4414,7 +4393,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4430,7 +4409,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4446,7 +4425,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4461,7 +4440,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4476,7 +4455,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4491,7 +4470,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4506,7 +4485,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4690,7 +4669,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4720,14 +4699,14 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 107, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Average number of signal photons is 7.046517e-01\n" + "Average number of signal photons is 9.751731e-01\n" ] } ], @@ -4746,7 +4725,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 108, "metadata": {}, "outputs": [ { @@ -4755,7 +4734,7 @@ "Text(0.5, 1.0, 'Schmidt mode 1')" ] }, - "execution_count": 32, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, @@ -4770,7 +4749,7 @@ " \n", " \n", " \n", - " 2024-08-11T12:57:51.326580\n", + " 2024-09-30T21:35:09.993846\n", " image/svg+xml\n", " \n", " \n", @@ -4805,12 +4784,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4878,7 +4857,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4931,7 +4910,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4947,7 +4926,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4989,7 +4968,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5004,7 +4983,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5019,7 +4998,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5034,7 +5013,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5049,7 +5028,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5067,17 +5046,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5089,12 +5068,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5106,12 +5085,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5122,12 +5101,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5138,12 +5117,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5154,12 +5133,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5170,12 +5149,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5387,238 +5366,238 @@ " \n", " \n", " \n", - " \n", + "L 238.165619 35.359369 \n", + "L 239.247801 38.170248 \n", + "L 240.329983 42.773112 \n", + "L 241.412165 49.048164 \n", + "L 242.494347 56.833765 \n", + "L 243.576528 65.932182 \n", + "L 245.740892 87.138646 \n", + "L 252.233983 156.402983 \n", + "L 254.398347 175.246957 \n", + "L 255.480528 183.147598 \n", + "L 256.56271 189.933195 \n", + "L 257.644892 195.573519 \n", + "L 258.727074 200.072538 \n", + "L 259.809256 203.465359 \n", + "L 260.891437 205.814283 \n", + "L 261.973619 207.204198 \n", + "L 263.055801 207.737552 \n", + "L 264.137983 207.529158 \n", + "L 265.220165 206.701038 \n", + "L 266.302347 205.377538 \n", + "L 267.384528 203.680868 \n", + "L 269.548892 199.62356 \n", + "L 272.795437 193.297174 \n", + "L 274.959801 189.704239 \n", + "L 276.041983 188.21133 \n", + "L 277.124165 186.941747 \n", + "L 278.206347 185.897461 \n", + "L 279.288528 185.071519 \n", + "L 280.37071 184.449888 \n", + "L 281.452892 184.013294 \n", + "L 282.535074 183.738973 \n", + "L 283.617256 183.602267 \n", + "L 285.781619 183.641747 \n", + "L 287.945983 183.943778 \n", + "L 295.521256 185.257941 \n", + "L 298.767801 185.550292 \n", + "L 303.096528 185.69834 \n", + "L 312.836165 185.689474 \n", + "L 355.041256 185.660651 \n", + "L 399.41071 185.660607 \n", + "L 399.41071 185.660607 \n", + "\" clip-path=\"url(#p27b12666d4)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + "L 238.165619 34.802097 \n", + "L 239.247801 35.960502 \n", + "L 240.329983 37.872928 \n", + "L 241.412165 40.51241 \n", + "L 242.494347 43.842009 \n", + "L 243.576528 47.81559 \n", + "L 244.65871 52.378794 \n", + "L 246.823074 63.022373 \n", + "L 248.987437 75.219047 \n", + "L 253.316165 101.855328 \n", + "L 256.56271 121.504847 \n", + "L 258.727074 133.524573 \n", + "L 260.891437 144.263949 \n", + "L 263.055801 153.496655 \n", + "L 265.220165 161.114038 \n", + "L 266.302347 164.31411 \n", + "L 267.384528 167.120576 \n", + "L 268.46671 169.550895 \n", + "L 269.548892 171.6291 \n", + "L 270.631074 173.385552 \n", + "L 271.713256 174.856257 \n", + "L 272.795437 176.081474 \n", + "L 273.877619 177.103517 \n", + "L 276.041983 178.700878 \n", + "L 278.206347 179.926596 \n", + "L 281.452892 181.428687 \n", + "L 284.699437 182.702593 \n", + "L 287.945983 183.755874 \n", + "L 291.192528 184.556733 \n", + "L 294.439074 185.104527 \n", + "L 297.685619 185.434453 \n", + "L 302.014347 185.612699 \n", + "L 360.452165 185.660544 \n", + "L 399.41071 185.660607 \n", + "L 399.41071 185.660607 \n", + "\" clip-path=\"url(#p27b12666d4)\" style=\"fill: none; stroke: #2ca02c; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5945,7 +5924,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 109, "metadata": {}, "outputs": [ { @@ -5954,7 +5933,7 @@ "(0.0, 1.1)" ] }, - "execution_count": 33, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" }, @@ -5969,7 +5948,7 @@ " \n", " \n", " \n", - " 2024-08-11T12:57:51.495201\n", + " 2024-09-30T21:35:10.171121\n", " image/svg+xml\n", " \n", " \n", @@ -6003,93 +5982,93 @@ " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6128,7 +6107,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6162,7 +6141,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6207,7 +6186,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6261,7 +6240,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6632,12 +6611,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6661,7 +6640,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6676,7 +6655,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6691,7 +6670,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6706,7 +6685,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6721,7 +6700,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7003,7 +6982,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7035,7 +7014,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 110, "metadata": {}, "outputs": [], "source": [ @@ -7044,7 +7023,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 111, "metadata": {}, "outputs": [ { @@ -7053,7 +7032,7 @@ "Text(0.5, 1.0, 'Schmidt mode 1')" ] }, - "execution_count": 35, + "execution_count": 111, "metadata": {}, "output_type": "execute_result" }, @@ -7068,7 +7047,7 @@ " \n", " \n", " \n", - " 2024-08-11T12:57:51.757983\n", + " 2024-09-30T21:35:10.442715\n", " image/svg+xml\n", " \n", " \n", @@ -7103,12 +7082,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7176,7 +7155,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7229,7 +7208,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7245,7 +7224,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7287,7 +7266,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7302,7 +7281,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7317,7 +7296,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7332,7 +7311,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7347,7 +7326,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7365,17 +7344,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7387,12 +7366,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7404,12 +7383,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7420,12 +7399,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7436,12 +7415,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7452,12 +7431,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7468,12 +7447,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7685,238 +7664,238 @@ " \n", " \n", " \n", - " \n", + "L 238.165619 35.359369 \n", + "L 239.247801 38.170248 \n", + "L 240.329983 42.773112 \n", + "L 241.412165 49.048164 \n", + "L 242.494347 56.833765 \n", + "L 243.576528 65.932182 \n", + "L 245.740892 87.138646 \n", + "L 252.233983 156.402983 \n", + "L 254.398347 175.246957 \n", + "L 255.480528 183.147598 \n", + "L 256.56271 189.933195 \n", + "L 257.644892 195.573519 \n", + "L 258.727074 200.072538 \n", + "L 259.809256 203.465359 \n", + "L 260.891437 205.814283 \n", + "L 261.973619 207.204198 \n", + "L 263.055801 207.737552 \n", + "L 264.137983 207.529158 \n", + "L 265.220165 206.701038 \n", + "L 266.302347 205.377538 \n", + "L 267.384528 203.680868 \n", + "L 269.548892 199.62356 \n", + "L 272.795437 193.297174 \n", + "L 274.959801 189.704239 \n", + "L 276.041983 188.21133 \n", + "L 277.124165 186.941747 \n", + "L 278.206347 185.897461 \n", + "L 279.288528 185.071519 \n", + "L 280.37071 184.449888 \n", + "L 281.452892 184.013294 \n", + "L 282.535074 183.738973 \n", + "L 283.617256 183.602267 \n", + "L 285.781619 183.641747 \n", + "L 287.945983 183.943778 \n", + "L 295.521256 185.257941 \n", + "L 298.767801 185.550292 \n", + "L 303.096528 185.69834 \n", + "L 312.836165 185.689474 \n", + "L 355.041256 185.660651 \n", + "L 399.41071 185.660607 \n", + "L 399.41071 185.660607 \n", + "\" clip-path=\"url(#p9d943c5d0d)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + "L 238.165619 34.802097 \n", + "L 239.247801 35.960502 \n", + "L 240.329983 37.872928 \n", + "L 241.412165 40.51241 \n", + "L 242.494347 43.842009 \n", + "L 243.576528 47.81559 \n", + "L 244.65871 52.378794 \n", + "L 246.823074 63.022373 \n", + "L 248.987437 75.219047 \n", + "L 253.316165 101.855328 \n", + "L 256.56271 121.504847 \n", + "L 258.727074 133.524573 \n", + "L 260.891437 144.263949 \n", + "L 263.055801 153.496655 \n", + "L 265.220165 161.114038 \n", + "L 266.302347 164.31411 \n", + "L 267.384528 167.120576 \n", + "L 268.46671 169.550895 \n", + "L 269.548892 171.6291 \n", + "L 270.631074 173.385552 \n", + "L 271.713256 174.856257 \n", + "L 272.795437 176.081474 \n", + "L 273.877619 177.103517 \n", + "L 276.041983 178.700878 \n", + "L 278.206347 179.926596 \n", + "L 281.452892 181.428687 \n", + "L 284.699437 182.702593 \n", + "L 287.945983 183.755874 \n", + "L 291.192528 184.556733 \n", + "L 294.439074 185.104527 \n", + "L 297.685619 185.434453 \n", + "L 302.014347 185.612699 \n", + "L 360.452165 185.660544 \n", + "L 399.41071 185.660607 \n", + "L 399.41071 185.660607 \n", + "\" clip-path=\"url(#p9d943c5d0d)\" style=\"fill: none; stroke: #2ca02c; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8236,7 +8215,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 112, "metadata": {}, "outputs": [ { @@ -8245,7 +8224,7 @@ "(0.0, 1.1)" ] }, - "execution_count": 36, + "execution_count": 112, "metadata": {}, "output_type": "execute_result" }, @@ -8260,7 +8239,7 @@ " \n", " \n", " \n", - " 2024-08-11T12:57:51.943626\n", + " 2024-09-30T21:35:10.620420\n", " image/svg+xml\n", " \n", " \n", @@ -8294,93 +8273,93 @@ " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8419,7 +8398,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8453,7 +8432,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8498,7 +8477,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8552,7 +8531,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8923,12 +8902,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8952,7 +8931,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8967,7 +8946,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8982,7 +8961,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8997,7 +8976,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9012,7 +8991,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9294,7 +9273,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", From 65065c7e27e0f18e06ea34f70ac676c5bae69773 Mon Sep 17 00:00:00 2001 From: Jan Viatteau Date: Wed, 2 Oct 2024 12:34:55 +0200 Subject: [PATCH 5/5] Changed phase removal and updated example notebook accordingly --- FrequencyConversion/FC_solve_EoM.py | 9 +- FrequencyConversion/example_solve_EoM.ipynb | 2872 +++++++++---------- 2 files changed, 1425 insertions(+), 1456 deletions(-) diff --git a/FrequencyConversion/FC_solve_EoM.py b/FrequencyConversion/FC_solve_EoM.py index 0660499..ed63112 100644 --- a/FrequencyConversion/FC_solve_EoM.py +++ b/FrequencyConversion/FC_solve_EoM.py @@ -153,10 +153,11 @@ def remove_phases(prop, dw, L, vp, va, vc): # separate into blocks Ua, Va, Vc, Uc = get_blocks(prop) # remove phases - Uc = np.diag(np.exp(1j * dw * kc * L)) @ Uc - Vc = np.diag(np.exp(1j * dw * kc * L)) @ Vc - Va = np.diag(np.exp(-1j * dw * ka * L)) @ Va - Ua = np.diag(np.exp(-1j * dw * ka * L)) @ Ua + Ua = np.diag(np.exp(-1j * dw * ka * L / 2)) @ Ua @ np.diag(np.exp(-1j * dw * ka * L / 2)) + Va = np.diag(np.exp(-1j * dw * ka * L / 2)) @ Va @ np.diag(np.exp(1j * dw * kc * L / 2)) + Vc = np.diag(np.exp(1j * dw * kc * L / 2)) @ Vc @ np.diag(np.exp(-1j * dw * ka * L / 2)) + Uc = np.diag(np.exp(1j * dw * kc * L / 2)) @ Uc @ np.diag(np.exp(1j * dw * kc * L / 2)) + return np.block([[Ua, Va], [Vc, Uc]]) diff --git a/FrequencyConversion/example_solve_EoM.ipynb b/FrequencyConversion/example_solve_EoM.ipynb index 4531f6a..7cab520 100644 --- a/FrequencyConversion/example_solve_EoM.ipynb +++ b/FrequencyConversion/example_solve_EoM.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -59,16 +59,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We then generate the propagator by calling the appropriate function." + "We then generate the propagator by calling the appropriate function. We then remove its free propagation phases, so we change back to the original electric field operators." ] }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ - "_, prop = get_prop(dw, vp, va, vc, pump, L) # Matrix to exponentiate and propagator" + "_, prop = get_prop(dw, vp, va, vc, pump, L) # Matrix to exponentiate and propagator\n", + "prop = remove_phases(prop, dw, L, vp, va, vc)" ] }, { @@ -80,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -91,16 +92,16 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 101, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, @@ -115,7 +116,7 @@ " \n", " \n", " \n", - " 2024-09-30T21:35:08.946848\n", + " 2024-10-02T12:33:24.451744\n", " image/svg+xml\n", " \n", " \n", @@ -150,12 +151,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -223,7 +224,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -276,7 +277,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -292,7 +293,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -334,7 +335,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -349,7 +350,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -364,7 +365,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -379,7 +380,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -394,7 +395,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -412,12 +413,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -432,7 +433,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -447,7 +448,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -462,7 +463,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -511,7 +512,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -547,7 +548,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -562,7 +563,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -609,7 +610,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -828,7 +829,7 @@ " \n", + "\" clip-path=\"url(#p87a02a93d6)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p87a02a93d6)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p87a02a93d6)\" style=\"fill: none; stroke: #2ca02c; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1342,17 +1343,19 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ - "sol = remove_phases(prop, dw, L, vp, va, vc) @ np.concatenate((initial_Ea, initial_Ec))\n", + "kc = 1 / vp - 1 / vc\n", + "ka = 1 / va - 1 / vp\n", + "sol = prop @ np.concatenate((initial_Ea, initial_Ec))\n", "Ea, Ec = np.split(sol, 2)" ] }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -1361,7 +1364,7 @@ "Text(0.5, 1.0, 'a beam / down-converted beam')" ] }, - "execution_count": 103, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, @@ -1376,7 +1379,7 @@ " \n", " \n", " \n", - " 2024-09-30T21:35:09.214932\n", + " 2024-10-02T12:33:24.720872\n", " image/svg+xml\n", " \n", " \n", @@ -1411,12 +1414,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1484,7 +1487,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1537,7 +1540,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1553,7 +1556,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1595,7 +1598,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1610,7 +1613,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1625,7 +1628,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1640,7 +1643,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1655,7 +1658,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1729,49 +1732,100 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1781,15 +1835,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1797,15 +1851,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1813,7 +1867,23 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2016,234 +2086,216 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + "L 238.165619 276.000379 \n", + "L 239.247801 275.003765 \n", + "L 240.329983 273.358066 \n", + "L 241.412165 271.085931 \n", + "L 242.494347 268.218416 \n", + "L 243.576528 264.794347 \n", + "L 244.65871 260.859532 \n", + "L 246.823074 251.670192 \n", + "L 248.987437 241.11915 \n", + "L 252.233983 223.864244 \n", + "L 256.56271 200.838724 \n", + "L 258.727074 190.299958 \n", + "L 260.891437 180.845061 \n", + "L 263.055801 172.677846 \n", + "L 265.220165 165.902086 \n", + "L 266.302347 163.042782 \n", + "L 267.384528 160.529004 \n", + "L 268.46671 158.349954 \n", + "L 269.548892 156.491012 \n", + "L 270.631074 154.934351 \n", + "L 271.713256 153.659571 \n", + "L 272.795437 152.644328 \n", + "L 273.877619 151.864936 \n", + "L 274.959801 151.296947 \n", + "L 276.041983 150.915686 \n", + "L 277.124165 150.696729 \n", + "L 278.206347 150.61633 \n", + "L 280.37071 150.781727 \n", + "L 282.535074 151.247659 \n", + "L 286.863801 152.56429 \n", + "L 291.192528 153.830226 \n", + "L 294.439074 154.544868 \n", + "L 297.685619 155.027277 \n", + "L 300.932165 155.309278 \n", + "L 305.260892 155.466526 \n", + "L 312.836165 155.46543 \n", + "L 335.561983 155.378072 \n", + "L 399.41071 155.374123 \n", + "L 399.41071 155.374123 \n", + "\" clip-path=\"url(#p13c894111b)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", - " \n", - " \n", + " \n", + "L 238.165619 34.73256 \n", + "L 239.247801 35.683276 \n", + "L 240.329983 37.252593 \n", + "L 241.412165 39.418022 \n", + "L 242.494347 42.148723 \n", + "L 243.576528 45.406122 \n", + "L 244.65871 49.144685 \n", + "L 246.823074 57.853825 \n", + "L 248.987437 67.809017 \n", + "L 257.644892 109.885382 \n", + "L 259.809256 118.661859 \n", + "L 261.973619 126.065945 \n", + "L 263.055801 129.201216 \n", + "L 264.137983 131.949069 \n", + "L 265.220165 134.316057 \n", + "L 266.302347 136.32111 \n", + "L 267.384528 137.995712 \n", + "L 268.46671 139.382447 \n", + "L 269.548892 140.531648 \n", + "L 271.713256 142.328535 \n", + "L 274.959801 144.431077 \n", + "L 286.863801 151.570065 \n", + "L 290.110347 153.042241 \n", + "L 292.27471 153.811473 \n", + "L 294.439074 154.410812 \n", + "L 297.685619 155.015064 \n", + "L 299.849983 155.221331 \n", + "L 303.096528 155.192327 \n", + "L 308.507438 155.15076 \n", + "L 342.055074 155.36989 \n", + "L 399.41071 155.374123 \n", + "L 399.41071 155.374123 \n", + "\" clip-path=\"url(#p13c894111b)\" style=\"fill: none; stroke: #2ca02c; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2492,13 +2544,13 @@ "z\n", "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2535,13 +2587,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2557,13 +2609,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2608,7 +2660,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2634,7 +2686,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -2643,7 +2695,7 @@ "Text(0.5, 1.0, 'c beam / non-converted beam')" ] }, - "execution_count": 104, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, @@ -2653,12 +2705,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-09-30T21:35:09.413459\n", + " 2024-10-02T12:33:24.914946\n", " image/svg+xml\n", " \n", " \n", @@ -2674,18 +2726,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -2693,17 +2745,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2835,12 +2887,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2892,12 +2944,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2907,12 +2959,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2922,12 +2974,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2937,12 +2989,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2952,7 +3004,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -3927,7 +3995,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -3936,7 +4004,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -3945,7 +4013,7 @@ "Text(0, 0.5, '$\\\\delta\\\\omega_{out}$')" ] }, - "execution_count": 106, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, @@ -3960,7 +4028,7 @@ " \n", " \n", " \n", - " 2024-09-30T21:35:09.709296\n", + " 2024-10-02T12:33:25.317534\n", " image/svg+xml\n", " \n", " \n", @@ -3991,20 +4059,20 @@ "z\n", "\" style=\"fill: #ffffff\"/>\n", " \n", - " \n", + " \n", " \n", + "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\" id=\"image2975cbcec4\" transform=\"scale(1 -1) translate(0 -266.4)\" x=\"58.523438\" y=\"-22.030125\" width=\"266.4\" height=\"266.4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4072,7 +4140,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4125,7 +4193,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4141,7 +4209,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4183,7 +4251,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4198,7 +4266,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4213,7 +4281,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4228,7 +4296,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4243,7 +4311,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4355,12 +4423,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4377,7 +4445,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4393,7 +4461,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4409,7 +4477,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4425,7 +4493,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4440,7 +4508,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4455,7 +4523,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4470,7 +4538,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4485,7 +4553,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4669,7 +4737,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4699,7 +4767,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -4725,7 +4793,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -4734,7 +4802,7 @@ "Text(0.5, 1.0, 'Schmidt mode 1')" ] }, - "execution_count": 108, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, @@ -4744,12 +4812,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-09-30T21:35:09.993846\n", + " 2024-10-02T12:33:25.618635\n", " image/svg+xml\n", " \n", " \n", @@ -4765,18 +4833,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -4784,17 +4852,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4926,12 +4994,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4983,12 +5051,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4998,12 +5066,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5013,12 +5081,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5028,12 +5096,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5046,51 +5114,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5098,15 +5132,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5114,15 +5148,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5130,15 +5164,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5146,15 +5180,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5162,7 +5196,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5365,263 +5399,247 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -5924,7 +5942,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -5933,7 +5951,7 @@ "(0.0, 1.1)" ] }, - "execution_count": 109, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, @@ -5948,7 +5966,7 @@ " \n", " \n", " \n", - " 2024-09-30T21:35:10.171121\n", + " 2024-10-02T12:33:25.818288\n", " image/svg+xml\n", " \n", " \n", @@ -5985,7 +6003,7 @@ "L 87.638264 95.39285 \n", "L 61.135852 95.39285 \n", "z\n", - "\" clip-path=\"url(#p9b33c2a307)\" style=\"fill: #1f77b4\"/>\n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe74349b358)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6107,7 +6125,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6141,7 +6159,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6186,7 +6204,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6240,7 +6258,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6611,12 +6629,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6640,7 +6658,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6655,7 +6673,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6670,7 +6688,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6685,7 +6703,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6700,7 +6718,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6982,7 +7000,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7014,7 +7032,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -7023,7 +7041,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -7032,7 +7050,7 @@ "Text(0.5, 1.0, 'Schmidt mode 1')" ] }, - "execution_count": 111, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, @@ -7042,12 +7060,12 @@ "\n", "\n", - "\n", + "\n", " \n", " \n", " \n", " \n", - " 2024-09-30T21:35:10.442715\n", + " 2024-10-02T12:33:26.098871\n", " image/svg+xml\n", " \n", " \n", @@ -7063,18 +7081,18 @@ " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", @@ -7082,17 +7100,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7224,12 +7242,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7281,12 +7299,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7296,12 +7314,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7311,12 +7329,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7326,12 +7344,12 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7344,51 +7362,17 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7396,15 +7380,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7412,15 +7396,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7428,15 +7412,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7444,15 +7428,15 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7460,7 +7444,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7663,263 +7647,247 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "\n" @@ -8215,7 +8183,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -8224,7 +8192,7 @@ "(0.0, 1.1)" ] }, - "execution_count": 112, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, @@ -8239,7 +8207,7 @@ " \n", " \n", " \n", - " 2024-09-30T21:35:10.620420\n", + " 2024-10-02T12:33:26.270307\n", " image/svg+xml\n", " \n", " \n", @@ -8276,7 +8244,7 @@ "L 87.638264 95.39285 \n", "L 61.135852 95.39285 \n", "z\n", - "\" clip-path=\"url(#pffd9ac7ee1)\" style=\"fill: #1f77b4\"/>\n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5d38b887a4)\" style=\"fill: #1f77b4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8398,7 +8366,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8432,7 +8400,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8477,7 +8445,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8531,7 +8499,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8902,12 +8870,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8931,7 +8899,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8946,7 +8914,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8961,7 +8929,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8976,7 +8944,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8991,7 +8959,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9273,7 +9241,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n",