From 8b16061de4f794a5e65b1059002940170717f73b Mon Sep 17 00:00:00 2001 From: Shoumik Chowdhury Date: Sun, 25 Feb 2024 19:52:59 -0500 Subject: [PATCH 1/9] removing the complex to real isomorphism. still has old versions, but we can remove later --- jaxquantum/quantum/solvers.py | 156 ++++++++++++++++++++++++++++++++-- 1 file changed, 151 insertions(+), 5 deletions(-) diff --git a/jaxquantum/quantum/solvers.py b/jaxquantum/quantum/solvers.py index b2529ec..02969b4 100644 --- a/jaxquantum/quantum/solvers.py +++ b/jaxquantum/quantum/solvers.py @@ -24,6 +24,21 @@ def spre(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: """Superoperator generator. + Args: + op: operator to be turned into a superoperator + + Returns: + superoperator function + """ + op_dag = op.conj().T + return lambda rho: 0.5 * ( + 2 * op @ rho @ op_dag - rho @ op_dag @ op - op_dag @ op @ rho + ) + + +def spre_old(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: + """Superoperator generator. + Args: op: operator to be turned into a superoperator @@ -41,7 +56,77 @@ def spre(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: static_argnums=(4,), ) def mesolve( - p: jnp.ndarray, + ρ0: jnp.ndarray, + t_list: jnp.ndarray, + c_ops: Optional[List[jnp.ndarray]] = jnp.array([]), + H0: Optional[jnp.ndarray] = None, + Ht: Optional[Callable[[float], jnp.ndarray]] = None, +): + """Quantum Master Equation solver. + + Args: + ρ0: initial state, must be a density matrix. For statevector evolution, please use sesolve. + t_list: time list + c_ops: list of collapse operators + H0: time independent Hamiltonian. If H0 is not None, it will override Ht. + Ht: time dependent Hamiltonian function. + + Returns: + list of states + """ + + ρ0 = ρ0 + 0.0j + c_ops = c_ops + 0.0j + H0 = None if H0 is None else H0 + 0.0j + + def f( + t: float, + rho: jnp.ndarray, + args: jnp.ndarray, + ): + H0_val = args[0] + c_ops_val = args[1] + + if H0_val is not None: + H = H0_val # use H0 if given + else: + H = Ht(t) # type: ignore + H = H + 0.0j + + rho_dot = -1j * (H @ rho - rho @ H) + + for op in c_ops_val: + rho_dot += spre(op)(rho) + + return rho_dot + + term = ODETerm(f) + solver = Dopri5() + saveat = SaveAt(ts=t_list) + stepsize_controller = PIDController(rtol=1e-6, atol=1e-6) + + sol = diffeqsolve( + term, + solver, + t0=t_list[0], + t1=t_list[-1], + dt0=t_list[1] - t_list[0], + y0=ρ0, + saveat=saveat, + stepsize_controller=stepsize_controller, + args=[H0, c_ops], + max_steps=16**5, + ) + + return sol.ys + + +@partial( + jit, + static_argnums=(4,), +) +def mesolve_old( + ρ0: jnp.ndarray, t_list: jnp.ndarray, c_ops: Optional[List[jnp.ndarray]] = jnp.array([]), H0: Optional[jnp.ndarray] = None, @@ -50,7 +135,7 @@ def mesolve( """Quantum Master Equation solver. Args: - p: initial state, must be a density matrix. For statevector evolution, please use sesolve. + ρ0: initial state, must be a density matrix. For statevector evolution, please use sesolve. t_list: time list c_ops: list of collapse operators H0: time independent Hamiltonian. If H0 is not None, it will override Ht. @@ -60,7 +145,7 @@ def mesolve( list of states """ - p = complex_to_real_iso_matrix(p + 0.0j) + ρ0 = complex_to_real_iso_matrix(ρ0 + 0.0j) c_ops = vmap(complex_to_real_iso_matrix)(c_ops + 0.0j) H0 = None if H0 is None else complex_to_real_iso_matrix(H0 + 0.0j) @@ -96,7 +181,7 @@ def f( t0=t_list[0], t1=t_list[-1], dt0=t_list[1] - t_list[0], - y0=p, + y0=ρ0, saveat=saveat, stepsize_controller=stepsize_controller, args=[H0, c_ops], @@ -116,7 +201,68 @@ def sesolve( H0: Optional[jnp.ndarray] = None, Ht: Optional[Callable[[float], jnp.ndarray]] = None, ): - """Schroedinger Equation solver. + """Schrödinger Equation solver. + + Args: + ψ: initial statevector + t_list: time list + H0: time independent Hamiltonian. If H0 is not None, it will override Ht. + Ht: time dependent Hamiltonian function. + + Returns: + list of states + """ + ψ = ψ + 0.0j + H0 = None if H0 is None else H0 + 0.0j + + def f( + t: float, + ψₜ: jnp.ndarray, + args: jnp.ndarray, + ): + H0_val = args[0] + + if H0_val is not None: + H = H0_val # use H0 if given + else: + H = Ht(t) # type: ignore + # print("H", H.shape) + # print("psit", ψₜ.shape) + ψₜ_dot = -1j * (H @ ψₜ) + + return ψₜ_dot + + term = ODETerm(f) + solver = Dopri5() + saveat = SaveAt(ts=t_list) + stepsize_controller = PIDController(rtol=1e-6, atol=1e-6) + + sol = diffeqsolve( + term, + solver, + t0=t_list[0], + t1=t_list[-1], + dt0=t_list[1] - t_list[0], + y0=ψ, + saveat=saveat, + stepsize_controller=stepsize_controller, + args=[H0], + ) + + return sol.ys + + +@partial( + jit, + static_argnums=(3,), +) +def sesolve_old( + ψ: jnp.ndarray, + t_list: jnp.ndarray, + H0: Optional[jnp.ndarray] = None, + Ht: Optional[Callable[[float], jnp.ndarray]] = None, +): + """Schrödinger Equation solver. Args: ψ: initial statevector From c540de1119ac757f5f16fd15b555e7bf15bc67ee Mon Sep 17 00:00:00 2001 From: Shoumik Chowdhury Date: Sun, 25 Feb 2024 20:41:07 -0500 Subject: [PATCH 2/9] test runtimes on a damped oscillator -> very slow? --- tutorials/testing.ipynb | 267 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 tutorials/testing.ipynb diff --git a/tutorials/testing.ipynb b/tutorials/testing.ipynb new file mode 100644 index 0000000..8a2a5c6 --- /dev/null +++ b/tutorials/testing.ipynb @@ -0,0 +1,267 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import dynamiqs as dq\n", + "import jaxquantum as jqt\n", + "import jax.numpy as jnp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dynamiqs " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters\n", + "n = 128 # Hilbert space dimension\n", + "omega = 1.0 # frequency\n", + "kappa = 0.1 # decay rate\n", + "alpha = 1.0 # initial coherent state amplitude\n", + "\n", + "# initialize operators, initial state and saving times\n", + "a = dq.destroy(n)\n", + "H = omega * dq.dag(a) @ a\n", + "jump_ops = [jnp.sqrt(kappa) * a]\n", + "psi0 = dq.coherent(n, alpha)\n", + "tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + "# run simulation\n", + "# result = dq.mesolve(H, jump_ops, psi0, tsave, exp_ops=[dq.dag(a) @ a], solver=dq.solver.Dopri5())\n", + "# print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit -n1 -r1 result = dq.mesolve(H, jump_ops, psi0, tsave)\n", + "%timeit result = dq.mesolve(H, jump_ops, psi0, tsave)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def map_kappa(kappa):\n", + " # parameters\n", + " n = 128 # Hilbert space dimension\n", + " omega = 1.0 # frequency\n", + " # kappa = 0.1 # decay rate\n", + " alpha = 1.0 # initial coherent state amplitude\n", + "\n", + " # initialize operators, initial state and saving times\n", + " a = dq.destroy(n)\n", + " H = omega * dq.dag(a) @ a\n", + " jump_ops = [jnp.sqrt(kappa) * a]\n", + " psi0 = dq.coherent(n, alpha)\n", + " tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + " # run simulation\n", + " return dq.mesolve(H, jump_ops, psi0, tsave, exp_ops=[dq.dag(a) @ a], solver=dq.solver.Dopri5())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from jax import jit, vmap" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jit(vmap(map_kappa))(jnp.linspace(0.1, 0.6, 6))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(result.tsave, result.Esave[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result.ysave[0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dq.plot_wigner(result.ysave[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## jaxquantum " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters\n", + "n = 128 # Hilbert space dimension\n", + "omega = 1.0 # frequency\n", + "kappa = 0.1 # decay rate\n", + "alpha = 1.0 # initial coherent state amplitude\n", + "\n", + "# initialize operators, initial state and saving times\n", + "a = jqt.destroy(n)\n", + "H = omega * jqt.dag(a) @ a\n", + "jump_ops = jnp.array([jnp.sqrt(kappa) * a])\n", + "psi0 = jqt.coherent(n, alpha)\n", + "tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + "# run simulation\n", + "# result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", + "\n", + "# print(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/shoumikdc/crostini/miniforge3/envs/gkp/lib/python3.9/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", + " out = fun(*args, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.22686290740966797\n" + ] + } + ], + "source": [ + "result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit -n1 -r1 result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", + "%timeit result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jqt.mesolve_old" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def map_kappa(kappa):\n", + "\n", + " # parameters\n", + " n = 128 # Hilbert space dimension\n", + " omega = 1.0 # frequency\n", + " # kappa = 0.1 # decay rate\n", + " alpha = 1.0 # initial coherent state amplitude\n", + "\n", + " # initialize operators, initial state and saving times\n", + " a = jqt.destroy(n)\n", + " H = omega * jqt.dag(a) @ a\n", + " jump_ops = jnp.array([jnp.sqrt(kappa) * a])\n", + " psi0 = jqt.coherent(n, alpha)\n", + " tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + " # run simulation\n", + " return jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jit(vmap(map_kappa))(jnp.linspace(0.1, 0.6, 6))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gkp", + "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.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 851b935f2e5405bd2b68237bfa3440692e065a60 Mon Sep 17 00:00:00 2001 From: Phionx Date: Mon, 26 Feb 2024 03:27:38 -0500 Subject: [PATCH 3/9] added new testing notebook --- tutorials/testing-shantanu.ipynb | 1735 ++++++++++++++++++++++++++++++ 1 file changed, 1735 insertions(+) create mode 100644 tutorials/testing-shantanu.ipynb diff --git a/tutorials/testing-shantanu.ipynb b/tutorials/testing-shantanu.ipynb new file mode 100644 index 0000000..4c52f00 --- /dev/null +++ b/tutorials/testing-shantanu.ipynb @@ -0,0 +1,1735 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/qutip/__init__.py:66: UserWarning: The new version of Cython, (>= 3.0.0) is not supported.\n", + " warnings.warn(\n", + "/var/folders/8l/p0d82y553g145f5xw3p4l60h0000gn/T/ipykernel_24453/1948815620.py:10: DeprecationWarning: Accessing jax.config via the jax.config submodule is deprecated.\n", + " from jax.config import config\n" + ] + } + ], + "source": [ + "import dynamiqs as dq\n", + "import jaxquantum as jqt\n", + "import jax.numpy as jnp\n", + "\n", + "from jax import jit, vmap\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "from jax.config import config\n", + "config.update(\"jax_enable_x64\", True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dynamiqs " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7.09 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", + "5.9 s ± 197 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "# parameters\n", + "n = 128 # Hilbert space dimension\n", + "omega = 1.0 # frequency\n", + "kappa = 0.1 # decay rate\n", + "alpha = 1.0 # initial coherent state amplitude\n", + "\n", + "# initialize operators, initial state and saving times\n", + "a = dq.destroy(n)\n", + "H = omega * dq.dag(a) @ a\n", + "jump_ops = [jnp.sqrt(kappa) * a]\n", + "psi0 = dq.coherent(n, alpha)\n", + "tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + "%timeit -n1 -r1 result = dq.mesolve(H, jump_ops, psi0, tsave)\n", + "%timeit result = dq.mesolve(H, jump_ops, psi0, tsave)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Other" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def map_kappa(kappa):\n", + " # parameters\n", + " n = 128 # Hilbert space dimension\n", + " omega = 1.0 # frequency\n", + " # kappa = 0.1 # decay rate\n", + " alpha = 1.0 # initial coherent state amplitude\n", + "\n", + " # initialize operators, initial state and saving times\n", + " a = dq.destroy(n)\n", + " H = omega * dq.dag(a) @ a\n", + " jump_ops = [jnp.sqrt(kappa) * a]\n", + " psi0 = dq.coherent(n, alpha)\n", + " tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + " # run simulation\n", + " return dq.mesolve(H, jump_ops, psi0, tsave, exp_ops=[dq.dag(a) @ a], solver=dq.solver.Dopri5())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from jax import jit, vmap" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jit(vmap(map_kappa))(jnp.linspace(0.1, 0.6, 6))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(result.tsave, result.Esave[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result.ysave[0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dq.plot_wigner(result.ysave[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## jaxquantum " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", + " out = fun(*args, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.65 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", + "2.06 s ± 84.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "# parameters\n", + "n = 128 # Hilbert space dimension\n", + "omega = 1.0 # frequency\n", + "kappa = 0.1 # decay rate\n", + "alpha = 1.0 # initial coherent state amplitude\n", + "\n", + "# initialize operators, initial state and saving times\n", + "a = jqt.destroy(n)\n", + "H = omega * jqt.dag(a) @ a\n", + "jump_ops = jnp.array([jnp.sqrt(kappa) * a])\n", + "psi0 = jqt.coherent(n, alpha)\n", + "tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + "%timeit -n1 -r1 result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", + "%timeit result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", + " out = fun(*args, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.48 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", + "2.11 s ± 195 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%timeit -n1 -r1 result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", + "%timeit result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", + "ns = jnp.real(jqt.calc_expect(jqt.dag(a) @ a, result))\n", + "\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, dpi=200, figsize=(4,3))\n", + "ax.plot(tsave, ns)\n", + "ax.set_xlabel(\"Time (ns)\")\n", + "ax.set_ylabel(\"\")\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Other" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def map_kappa(kappa):\n", + "\n", + " # parameters\n", + " n = 128 # Hilbert space dimension\n", + " omega = 1.0 # frequency\n", + " # kappa = 0.1 # decay rate\n", + " alpha = 1.0 # initial coherent state amplitude\n", + "\n", + " # initialize operators, initial state and saving times\n", + " a = jqt.destroy(n)\n", + " H = omega * jqt.dag(a) @ a\n", + " jump_ops = jnp.array([jnp.sqrt(kappa) * a])\n", + " psi0 = jqt.coherent(n, alpha)\n", + " tsave = jnp.linspace(0, 20.0, 101)\n", + "\n", + " # run simulation\n", + " return jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Array([[[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.75236542e-01+0.00000000e+00j,\n", + " 3.64097545e-01+7.38062309e-02j,\n", + " 2.39547732e-01+1.01279376e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.64097545e-01-7.38062309e-02j,\n", + " 3.67806361e-01+0.00000000e+00j,\n", + " 2.52357875e-01+5.11554741e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.39547732e-01-1.01279376e-01j,\n", + " 2.52357875e-01-5.11554741e-02j,\n", + " 1.80261653e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.82590735e-01+0.00000000e+00j,\n", + " 3.45411608e-01+1.46037697e-01j,\n", + " 1.81090597e-01+1.86458555e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.45411608e-01-1.46037697e-01j,\n", + " 3.67589137e-01+0.00000000e+00j,\n", + " 2.34665989e-01+9.92151899e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.81090597e-01-1.86458555e-01j,\n", + " 2.34665989e-01-9.92151899e-02j,\n", + " 1.76587881e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 8.68612280e-01+0.00000000e+00j,\n", + " 2.38431673e-01+2.22319972e-01j,\n", + " 6.04255856e-03+8.63027882e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.38431673e-01-2.22319972e-01j,\n", + " 1.22351354e-01+0.00000000e+00j,\n", + " 2.37482621e-02+2.21434979e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 6.04255856e-03-8.63027882e-02j,\n", + " 2.37482621e-02-2.21434979e-02j,\n", + " 8.61710927e-03+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 8.71038381e-01+0.00000000e+00j,\n", + " 1.88149141e-01+2.63351592e-01j,\n", + " -2.75638166e-02+8.04466754e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.88149141e-01-2.63351592e-01j,\n", + " 1.20263605e-01+0.00000000e+00j,\n", + " 1.83689475e-02+2.57109325e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-2.75638166e-02-8.04466754e-02j,\n", + " 1.83689475e-02-2.57109325e-02j,\n", + " 8.30235211e-03+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 8.73423018e-01+0.00000000e+00j,\n", + " 1.31122589e-01+2.93342356e-01j,\n", + " -5.57445154e-02+6.22778113e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.31122589e-01-2.93342356e-01j,\n", + " 1.18204952e-01+0.00000000e+00j,\n", + " 1.25479771e-02+2.80718339e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-5.57445154e-02-6.22778113e-02j,\n", + " 1.25479771e-02-2.80718339e-02j,\n", + " 7.99865030e-03+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]],\n", + "\n", + "\n", + " [[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.82590735e-01+0.00000000e+00j,\n", + " 3.67539590e-01+7.45039712e-02j,\n", + " 2.39406219e-01+1.01219570e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67539590e-01-7.45039712e-02j,\n", + " 3.67589137e-01+0.00000000e+00j,\n", + " 2.49699313e-01+5.06165545e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.39406219e-01-1.01219570e-01j,\n", + " 2.49699313e-01-5.06165545e-02j,\n", + " 1.76587881e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.97279051e-01+0.00000000e+00j,\n", + " 3.51570355e-01+1.48641581e-01j,\n", + " 1.80669632e-01+1.86025155e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.51570355e-01-1.48641581e-01j,\n", + " 3.66734786e-01+0.00000000e+00j,\n", + " 2.29484677e-01+9.70245602e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.80669632e-01-1.86025155e-01j,\n", + " 2.29484677e-01-9.70245602e-02j,\n", + " 1.69269438e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 9.80354444e-01+0.00000000e+00j,\n", + " 1.00997946e-01+9.41731244e-02j,\n", + " 9.60719712e-04+1.37202725e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.00997946e-01-9.41731244e-02j,\n", + " 1.94513054e-02+0.00000000e+00j,\n", + " 1.41697897e-03+1.32122737e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 9.60719712e-04-1.37202725e-02j,\n", + " 1.41697897e-03-1.32122737e-03j,\n", + " 1.92967597e-04+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.81117438e-01+0.00000000e+00j,\n", + " 7.87470796e-02+1.10221944e-01j,\n", + " -4.28657482e-03+1.25108761e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 7.87470796e-02-1.10221944e-01j,\n", + " 1.87031538e-02+0.00000000e+00j,\n", + " 1.06148438e-03+1.48575404e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-4.28657482e-03-1.25108761e-02j,\n", + " 1.06148438e-03-1.48575404e-03j,\n", + " 1.78270180e-04+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.81851073e-01+0.00000000e+00j,\n", + " 5.42255683e-02+1.21311296e-01j,\n", + " -8.48065212e-03+9.47470870e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 5.42255683e-02-1.21311296e-01j,\n", + " 1.79832297e-02+0.00000000e+00j,\n", + " 7.02282109e-04+1.57111639e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-8.48065212e-03-9.47470870e-03j,\n", + " 7.02282109e-04-1.57111639e-03j,\n", + " 1.64687171e-04+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]],\n", + "\n", + "\n", + " [[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.89939167e-01+0.00000000e+00j,\n", + " 3.70871609e-01+7.51794098e-02j,\n", + " 2.39172820e-01+1.01120928e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.70871609e-01-7.51794098e-02j,\n", + " 3.67230878e-01+0.00000000e+00j,\n", + " 2.46973820e-01+5.00640643e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.39172820e-01-1.01120928e-01j,\n", + " 2.46973820e-01-5.00640643e-02j,\n", + " 1.72922508e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.11922342e-01+0.00000000e+00j,\n", + " 3.57310705e-01+1.51068571e-01j,\n", + " 1.79983533e-01+1.85318774e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.57310705e-01-1.51068571e-01j,\n", + " 3.65342344e-01+0.00000000e+00j,\n", + " 2.24086505e-01+9.47422364e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.79983533e-01-1.85318774e-01j,\n", + " 2.24086505e-01-9.47422364e-02j,\n", + " 1.62014796e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 9.97209117e-01+0.00000000e+00j,\n", + " 3.85573439e-02+3.59518668e-02j,\n", + " 1.37666379e-04+1.96583485e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.85573439e-02-3.59518668e-02j,\n", + " 2.78698536e-03+0.00000000e+00j,\n", + " 7.61975464e-05+7.10485220e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.37666379e-04-1.96583485e-03j,\n", + " 7.61975464e-05-7.10485220e-05j,\n", + " 3.89451288e-06+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.97371431e-01+0.00000000e+00j,\n", + " 2.97453390e-02+4.16344101e-02j,\n", + " -6.01633392e-04+1.75598333e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.97453390e-02-4.16344101e-02j,\n", + " 2.62511118e-03+0.00000000e+00j,\n", + " 5.53598871e-05+7.74869216e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-6.01633392e-04-1.75598333e-03j,\n", + " 5.53598871e-05-7.74869216e-05j,\n", + " 3.45468529e-06+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.97524317e-01+0.00000000e+00j,\n", + " 2.02669137e-02+4.53403227e-02j,\n", + " -1.16603897e-03+1.30273595e-03j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.02669137e-02-4.53403227e-02j,\n", + " 2.47261557e-03+0.00000000e+00j,\n", + " 3.55227299e-05+7.94699549e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-1.16603897e-03-1.30273595e-03j,\n", + " 3.55227299e-05-7.94699549e-05j,\n", + " 3.06450067e-06+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]],\n", + "\n", + "\n", + " [[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 3.97279051e-01+0.00000000e+00j,\n", + " 3.74092875e-01+7.58324004e-02j,\n", + " 2.38849613e-01+1.00984328e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.74092875e-01-7.58324004e-02j,\n", + " 3.66734786e-01+0.00000000e+00j,\n", + " 2.44186067e-01+4.94989475e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.38849613e-01-1.00984328e-01j,\n", + " 2.44186067e-01-4.94989475e-02j,\n", + " 1.69269439e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.26499625e-01+0.00000000e+00j,\n", + " 3.62629741e-01+1.53317436e-01j,\n", + " 1.79045703e-01+1.84353190e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.62629741e-01-1.53317436e-01j,\n", + " 3.63439008e-01+0.00000000e+00j,\n", + " 2.18504981e-01+9.23823802e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.79045703e-01-1.84353190e-01j,\n", + " 2.18504981e-01-9.23823802e-02j,\n", + " 1.54851148e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 9.99606408e-01+0.00000000e+00j,\n", + " 1.45057895e-02+1.35255707e-02j,\n", + " 1.94406329e-05+2.77569627e-04j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.45057895e-02-1.35255707e-02j,\n", + " 3.93514096e-04+0.00000000e+00j,\n", + " 4.03792428e-06+3.76506502e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.94406329e-05-2.77569627e-04j,\n", + " 4.03792428e-06-3.76506502e-06j,\n", + " 7.74571671e-08+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99636664e-01+0.00000000e+00j,\n", + " 1.10777799e-02+1.55055117e-02j,\n", + " -8.32533608e-05+2.42998499e-04j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.10777799e-02-1.55055117e-02j,\n", + " 3.63270290e-04+0.00000000e+00j,\n", + " 2.84659669e-06+3.98436789e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-8.32533608e-05-2.42998499e-04j,\n", + " 2.84659669e-06-3.98436789e-06j,\n", + " 6.60066420e-08+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99664594e-01+0.00000000e+00j,\n", + " 7.47178034e-03+1.67155601e-02j,\n", + " -1.58142988e-04+1.76685760e-04j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 7.47178034e-03-1.67155601e-02j,\n", + " 3.35350112e-04+0.00000000e+00j,\n", + " 1.77236718e-06+3.96506844e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-1.58142988e-04-1.76685760e-04j,\n", + " 1.77236718e-06-3.96506844e-06j,\n", + " 5.62487216e-08+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]],\n", + "\n", + "\n", + " [[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.04607661e-01+0.00000000e+00j,\n", + " 3.77202802e-01+7.64628250e-02j,\n", + " 2.38438732e-01+1.00810670e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.77202802e-01-7.64628250e-02j,\n", + " 3.66104152e-01+0.00000000e+00j,\n", + " 2.41340648e-01+4.89221299e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.38438732e-01-1.00810670e-01j,\n", + " 2.41340648e-01-4.89221299e-02j,\n", + " 1.65632372e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.40991024e-01+0.00000000e+00j,\n", + " 3.67526440e-01+1.55387741e-01j,\n", + " 1.77870016e-01+1.83142662e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67526440e-01-1.55387741e-01j,\n", + " 3.61052917e-01+0.00000000e+00j,\n", + " 2.12772154e-01+8.99585349e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.77870016e-01-1.83142662e-01j,\n", + " 2.12772154e-01-8.99585349e-02j,\n", + " 1.47802568e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 9.99944550e-01+0.00000000e+00j,\n", + " 5.44602661e-03+5.07801364e-03j,\n", + " 2.73973987e-06+3.91113115e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 5.44602661e-03-5.07801364e-03j,\n", + " 5.54485250e-05+0.00000000e+00j,\n", + " 2.13539959e-07+1.99110577e-07j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.73973987e-06-3.91113115e-05j,\n", + " 2.13539959e-07-1.99110577e-07j,\n", + " 1.53735548e-09+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99949827e-01+0.00000000e+00j,\n", + " 4.11753528e-03+5.76329156e-03j,\n", + " -1.14980099e-05+3.35613104e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 4.11753528e-03-5.76329156e-03j,\n", + " 5.01721649e-05+0.00000000e+00j,\n", + " 1.46085483e-07+2.04475562e-07j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-1.14980099e-05-3.35613104e-05j,\n", + " 1.46085483e-07-2.04475562e-07j,\n", + " 1.25868684e-09+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99954601e-01+0.00000000e+00j,\n", + " 2.74951282e-03+6.15109495e-03j,\n", + " -2.14083258e-05+2.39190386e-05j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.74951282e-03-6.15109495e-03j,\n", + " 4.53978690e-05+0.00000000e+00j,\n", + " 8.82664259e-08+1.97466615e-07j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-2.14083258e-05-2.39190386e-05j,\n", + " 8.82664259e-08-1.97466615e-07j,\n", + " 1.03053056e-09+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]],\n", + "\n", + "\n", + " [[[ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.67879441e-01+0.00000000e+00j,\n", + " 3.67879441e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.60130048e-01+0.00000000e+00j,\n", + " 2.60130048e-01+0.00000000e+00j,\n", + " 1.83939721e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.11922339e-01+0.00000000e+00j,\n", + " 3.80200933e-01+7.70705924e-02j,\n", + " 2.37942355e-01+1.00600873e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.80200933e-01-7.70705924e-02j,\n", + " 3.65342345e-01+0.00000000e+00j,\n", + " 2.38442067e-01+4.83345173e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.37942355e-01-1.00600873e-01j,\n", + " 2.38442067e-01-4.83345173e-02j,\n", + " 1.62014807e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 4.55377801e-01+0.00000000e+00j,\n", + " 3.72001550e-01+1.57279800e-01j,\n", + " 1.76470656e-01+1.81701782e-01j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.72001550e-01-1.57279800e-01j,\n", + " 3.58212877e-01+0.00000000e+00j,\n", + " 2.06918484e-01+8.74835700e-02j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.76470656e-01-1.81701782e-01j,\n", + " 2.06918484e-01-8.74835700e-02j,\n", + " 1.40890127e-01+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " ...,\n", + "\n", + " [[ 9.99992189e-01+0.00000000e+00j,\n", + " 2.04405202e-03+1.90592579e-03j,\n", + " 3.85981336e-07+5.50946131e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 2.04405202e-03-1.90592579e-03j,\n", + " 7.81076389e-06+0.00000000e+00j,\n", + " 1.12894655e-08+1.05266452e-08j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 3.85981336e-07-5.50946131e-06j,\n", + " 1.12894655e-08-1.05266452e-08j,\n", + " 3.05043014e-11+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99993072e-01+0.00000000e+00j,\n", + " 1.53004667e-03+2.14159759e-03j,\n", + " -1.58756444e-06+4.63403532e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.53004667e-03-2.14159759e-03j,\n", + " 6.92753223e-06+0.00000000e+00j,\n", + " 7.49497564e-09+1.04907389e-08j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-1.58756444e-06-4.63403532e-06j,\n", + " 7.49497564e-09-1.04907389e-08j,\n", + " 2.39955539e-11+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]],\n", + "\n", + " [[ 9.99993856e-01+0.00000000e+00j,\n", + " 1.01152925e-03+2.26295045e-03j,\n", + " -2.89741332e-06+3.23726724e-06j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 1.01152925e-03-2.26295045e-03j,\n", + " 6.14417473e-06+0.00000000e+00j,\n", + " 4.39468248e-09+9.83167652e-09j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [-2.89741332e-06-3.23726724e-06j,\n", + " 4.39468248e-09-9.83167652e-09j,\n", + " 1.88755870e-11+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " ...,\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j],\n", + " [ 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j, ...,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j,\n", + " 0.00000000e+00+0.00000000e+00j]]]], dtype=complex128)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jit(vmap(map_kappa))(jnp.linspace(0.1, 0.6, 6))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gkp", + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 853872c3e3164f0df0b4f5e756298bd881a22f37 Mon Sep 17 00:00:00 2001 From: Shantanu Jha Date: Tue, 27 Feb 2024 14:25:15 -0500 Subject: [PATCH 4/9] jax config change --- README.md | 22 +++++++++++ jaxquantum/quantum/base.py | 2 +- jaxquantum/utils/utils.py | 2 +- tutorials/testing-shantanu.ipynb | 64 ++++++++------------------------ 4 files changed, 40 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 82b130b..33d5224 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,28 @@ Please use `pip install -e '.[dev, docs]'` if you are a `zsh` user. Installing the package in the usual non-editable mode would require a developer to upgrade their pip installation (i.e. run `pip install --upgrade .`) every time they update the package source code. +#### Install with GPU support (Linux) + +For linux users who wish to enable Nvidia GPU support, here are some steps ([ref](https://jax.readthedocs.io/en/latest/installation.html#nvidia-gpu)): + +1. Make sure you NVIDIA drivers by running: + `cat /proc/driver/nvidia/version` or `sudo ubuntu-drivers list` +2. If your driver version is >= 525.60.13 then run: + `pip install --upgrade "jax[cuda12_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html` otherwise, use `cuda11_pip` +3. Test that GPU support is enabled: +4. Enjoy! + +***Notes:*** +If you receive this error: +``` +2024-02-27 14:10:45.052355: W external/xla/xla/service/gpu/nvptx_compiler.cc:742] The NVIDIA driver's CUDA version is 12.0 which is older than the ptxas CUDA version (12.3.107). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages. +``` + +Then, you should update your NVIDIA driver by running: +``` +conda install cuda -c nvidia +``` + ## Documentation Documentation should be viewable here: [https://github.com/pages/EQuS/jaxquantum/](https://github.com/pages/EQuS/jaxquantum/) diff --git a/jaxquantum/quantum/base.py b/jaxquantum/quantum/base.py index a0254c6..b53347a 100644 --- a/jaxquantum/quantum/base.py +++ b/jaxquantum/quantum/base.py @@ -2,7 +2,7 @@ Common jax <-> qutip-inspired functions """ -from jax.config import config +from jax import config from jax.nn import one_hot import jax.numpy as jnp diff --git a/jaxquantum/utils/utils.py b/jaxquantum/utils/utils.py index bbd69ca..9da056a 100644 --- a/jaxquantum/utils/utils.py +++ b/jaxquantum/utils/utils.py @@ -7,7 +7,7 @@ from jax import lax, jit from jax import device_put -from jax.config import config +from jax import config from jax._src.scipy.special import gammaln import jax.numpy as jnp import numpy as np diff --git a/tutorials/testing-shantanu.ipynb b/tutorials/testing-shantanu.ipynb index 4c52f00..13b32f8 100644 --- a/tutorials/testing-shantanu.ipynb +++ b/tutorials/testing-shantanu.ipynb @@ -14,20 +14,8 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/qutip/__init__.py:66: UserWarning: The new version of Cython, (>= 3.0.0) is not supported.\n", - " warnings.warn(\n", - "/var/folders/8l/p0d82y553g145f5xw3p4l60h0000gn/T/ipykernel_24453/1948815620.py:10: DeprecationWarning: Accessing jax.config via the jax.config submodule is deprecated.\n", - " from jax.config import config\n" - ] - } - ], + "outputs": [], "source": [ - "import dynamiqs as dq\n", "import jaxquantum as jqt\n", "import jax.numpy as jnp\n", "\n", @@ -36,10 +24,19 @@ "import matplotlib.pyplot as plt\n", "\n", "\n", - "from jax.config import config\n", + "from jax import config\n", "config.update(\"jax_enable_x64\", True)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import dynamiqs as dq" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -172,7 +169,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", + "/home/shanj/miniconda3/envs/jax-framework/lib/python3.12/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", " out = fun(*args, **kwargs)\n" ] }, @@ -180,8 +177,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "2.65 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", - "2.06 s ± 84.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + "937 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", + "459 ms ± 725 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], @@ -205,34 +202,7 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/jax-framework/lib/python3.9/site-packages/equinox/_jit.py:49: UserWarning: Complex dtype support is work in progress, please read https://github.com/patrick-kidger/diffrax/pull/197 and proceed carefully.\n", - " out = fun(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.48 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", - "2.11 s ± 195 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "%timeit -n1 -r1 result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", - "%timeit result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -250,8 +220,6 @@ "result = jqt.mesolve(jqt.ket2dm(psi0), tsave, c_ops=jump_ops, H0=H)\n", "ns = jnp.real(jqt.calc_expect(jqt.dag(a) @ a, result))\n", "\n", - "\n", - "\n", "fig, ax = plt.subplots(1, dpi=200, figsize=(4,3))\n", "ax.plot(tsave, ns)\n", "ax.set_xlabel(\"Time (ns)\")\n", @@ -1727,7 +1695,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.12.1" } }, "nbformat": 4, From c0f70f31d6a02812d712f973a7c12d0836144a57 Mon Sep 17 00:00:00 2001 From: Shantanu Jha Date: Thu, 29 Feb 2024 16:53:26 -0500 Subject: [PATCH 5/9] added ket tooling --- jaxquantum/quantum/base.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/jaxquantum/quantum/base.py b/jaxquantum/quantum/base.py index b53347a..aa89915 100644 --- a/jaxquantum/quantum/base.py +++ b/jaxquantum/quantum/base.py @@ -2,7 +2,7 @@ Common jax <-> qutip-inspired functions """ -from jax import config +from jax import config, Array from jax.nn import one_hot import jax.numpy as jnp @@ -69,6 +69,17 @@ def unit(rho: jnp.ndarray, use_density_matrix=False): return rho / jnp.linalg.norm(rho) +def ket(vec: Array) -> Array: + """Turns a vector array into a ket. + + Args: + vec: vector + + Returns: + ket + """ + return vec.reshape(vec.shape[0], 1) + def dag(op: jnp.ndarray) -> jnp.ndarray: """Conjugate transpose. @@ -78,6 +89,7 @@ def dag(op: jnp.ndarray) -> jnp.ndarray: Returns: conjugate transpose of op """ + op = op.reshape(op.shape[0],-1) # adds dimension to 1D array if needed return jnp.conj(op).T def batch_dag(op: jnp.ndarray) -> jnp.ndarray: From 059bd053f464cf16a1d5f10cc5f16fb78c10035e Mon Sep 17 00:00:00 2001 From: Shoumik Chowdhury Date: Fri, 1 Mar 2024 17:06:51 -0500 Subject: [PATCH 6/9] Update displace and coherent state to construct matrices without qutip. Removing qutip dependency in base! --- jaxquantum/quantum/base.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/jaxquantum/quantum/base.py b/jaxquantum/quantum/base.py index aa89915..5919e8e 100644 --- a/jaxquantum/quantum/base.py +++ b/jaxquantum/quantum/base.py @@ -8,7 +8,7 @@ import jax.numpy as jnp import jax.scipy as jsp import numpy as np -import qutip as qt +from qutip import Qobj from jaxquantum.utils.utils import is_1d @@ -42,11 +42,11 @@ def jax2qt(jax_obj, dims=None): Returns: QuTiP state. """ - if isinstance(jax_obj, qt.Qobj) or jax_obj is None: + if isinstance(jax_obj, Qobj) or jax_obj is None: return jax_obj if dims is not None: dims = np.array(dims).astype(int).tolist() - return qt.Qobj(np.array(jax_obj), dims=dims) + return Qobj(np.array(jax_obj), dims=dims) # QuTiP alternatives in JAX (some are a WIP) @@ -80,6 +80,7 @@ def ket(vec: Array) -> Array: """ return vec.reshape(vec.shape[0], 1) + def dag(op: jnp.ndarray) -> jnp.ndarray: """Conjugate transpose. @@ -89,9 +90,10 @@ def dag(op: jnp.ndarray) -> jnp.ndarray: Returns: conjugate transpose of op """ - op = op.reshape(op.shape[0],-1) # adds dimension to 1D array if needed + op = op.reshape(op.shape[0], -1) # adds dimension to 1D array if needed return jnp.conj(op).T + def batch_dag(op: jnp.ndarray) -> jnp.ndarray: """Conjugate transpose. @@ -101,7 +103,9 @@ def batch_dag(op: jnp.ndarray) -> jnp.ndarray: Returns: conjugate of op, and transposes last two axes """ - return jnp.moveaxis(jnp.conj(op), -1, -2) # transposes last two axes, good for batching + return jnp.moveaxis( + jnp.conj(op), -1, -2 + ) # transposes last two axes, good for batching def ket2dm(ket: jnp.ndarray) -> jnp.ndarray: @@ -211,18 +215,17 @@ def num(N) -> jnp.ndarray: return jnp.diag(jnp.arange(N)) -def coherent(N, alpha) -> jnp.ndarray: +def coherent(N, α) -> jnp.ndarray: """Coherent state. Args: - N: Hilbert Space Size - alpha: coherent state amplitude + N: Hilbert Space Size. + α: coherent state amplitude. Return: - coherent state |alpha> + Coherent state |α⟩. """ - # TODO: replace with JAX implementation - return qt2jax(qt.coherent(int(N), complex(alpha))) + return displace(N, α) @ basis(N, 0) def identity(*args, **kwargs) -> jnp.ndarray: @@ -235,17 +238,17 @@ def identity(*args, **kwargs) -> jnp.ndarray: def displace(N, α) -> jnp.ndarray: - """Displace operator + """Displacement operator Args: N: Hilbert Space Size - α: displacement + α: Phase space displacement Returns: Displace operator D(α) """ - # TODO: replace with JAX implementation - return qt2jax(qt.displace(int(N), float(α))) + a = destroy(N) + return expm(α * dag(a) - jnp.conj(α) * a) def ptrace(rho, indx, dims): From 018fe740e6330fc470bade24e6c218dbf179984a Mon Sep 17 00:00:00 2001 From: Shoumik Chowdhury Date: Fri, 1 Mar 2024 17:15:58 -0500 Subject: [PATCH 7/9] Ensure inputs to diffeq are complex jnp arrays --- jaxquantum/quantum/solvers.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jaxquantum/quantum/solvers.py b/jaxquantum/quantum/solvers.py index 02969b4..243be8b 100644 --- a/jaxquantum/quantum/solvers.py +++ b/jaxquantum/quantum/solvers.py @@ -75,9 +75,9 @@ def mesolve( list of states """ - ρ0 = ρ0 + 0.0j - c_ops = c_ops + 0.0j - H0 = None if H0 is None else H0 + 0.0j + ρ0 = jnp.asarray(ρ0) + 0.0j + c_ops = jnp.asarray(c_ops) + 0.0j + H0 = jnp.asarray(H0) + 0.0j if H0 is not None else H0 def f( t: float, @@ -145,9 +145,9 @@ def mesolve_old( list of states """ - ρ0 = complex_to_real_iso_matrix(ρ0 + 0.0j) - c_ops = vmap(complex_to_real_iso_matrix)(c_ops + 0.0j) - H0 = None if H0 is None else complex_to_real_iso_matrix(H0 + 0.0j) + ρ0 = complex_to_real_iso_matrix(jnp.asarray(ρ0) + 0.0j) + c_ops = vmap(complex_to_real_iso_matrix)(jnp.asarray(c_ops) + 0.0j) + H0 = None if H0 is None else complex_to_real_iso_matrix(jnp.asarray(H0) + 0.0j) def f( t: float, @@ -212,8 +212,8 @@ def sesolve( Returns: list of states """ - ψ = ψ + 0.0j - H0 = None if H0 is None else H0 + 0.0j + ψ = jnp.asarray(ψ) + 0.0j + H0 = None if H0 is None else jnp.asarray(H0) + 0.0j def f( t: float, @@ -273,8 +273,8 @@ def sesolve_old( Returns: list of states """ - ψ = complex_to_real_iso_vector(ψ + 0.0j) - H0 = None if H0 is None else complex_to_real_iso_matrix(H0 + 0.0j) + ψ = complex_to_real_iso_vector(jnp.asarray(ψ) + 0.0j) + H0 = None if H0 is None else complex_to_real_iso_matrix(jnp.asarray(H0) + 0.0j) def f( t: float, From 214c0d2199f2e301b2b3f36a06d7176dd7421fce Mon Sep 17 00:00:00 2001 From: Shantanu Jha Date: Fri, 1 Mar 2024 18:28:12 -0500 Subject: [PATCH 8/9] added note --- jaxquantum/quantum/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jaxquantum/quantum/base.py b/jaxquantum/quantum/base.py index 5919e8e..f47afa1 100644 --- a/jaxquantum/quantum/base.py +++ b/jaxquantum/quantum/base.py @@ -218,6 +218,8 @@ def num(N) -> jnp.ndarray: def coherent(N, α) -> jnp.ndarray: """Coherent state. + TODO: add trimming! + Args: N: Hilbert Space Size. α: coherent state amplitude. From 2b8ff505ac281b24cb8a5906f1b44ef8427fb6ac Mon Sep 17 00:00:00 2001 From: Shantanu Jha Date: Fri, 1 Mar 2024 18:35:32 -0500 Subject: [PATCH 9/9] _old to _iso --- jaxquantum/quantum/solvers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jaxquantum/quantum/solvers.py b/jaxquantum/quantum/solvers.py index 243be8b..560cd4e 100644 --- a/jaxquantum/quantum/solvers.py +++ b/jaxquantum/quantum/solvers.py @@ -36,7 +36,7 @@ def spre(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: ) -def spre_old(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: +def spre_iso(op: jnp.ndarray) -> Callable[[jnp.ndarray], jnp.ndarray]: """Superoperator generator. Args: @@ -125,7 +125,7 @@ def f( jit, static_argnums=(4,), ) -def mesolve_old( +def mesolve_iso( ρ0: jnp.ndarray, t_list: jnp.ndarray, c_ops: Optional[List[jnp.ndarray]] = jnp.array([]), @@ -256,7 +256,7 @@ def f( jit, static_argnums=(3,), ) -def sesolve_old( +def sesolve_iso( ψ: jnp.ndarray, t_list: jnp.ndarray, H0: Optional[jnp.ndarray] = None,