commit 63e9a48296e8cae98f806162f54ac96e5a8fb104
parent 33e2e1e8523d81df8ac6fbe798cd0aaa313210f4
Author: miksa <milutin@popovic.xyz>
Date: Fri, 25 Jun 2021 08:33:54 +0200
sehs6
Diffstat:
6 files changed, 1440 insertions(+), 0 deletions(-)
diff --git a/sesh5/calc/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/sesh5/calc/.ipynb_checkpoints/Untitled-checkpoint.ipynb
@@ -0,0 +1,6 @@
+{
+ "cells": [],
+ "metadata": {},
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/sesh5/calc/.ipynb_checkpoints/task4-checkpoint.ipynb b/sesh5/calc/.ipynb_checkpoints/task4-checkpoint.ipynb
@@ -0,0 +1,500 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "import sympy as sp\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "x, y = sp.symbols(\"x y\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Task1\n",
+ "def DA(x, y):\n",
+ " return sp.sqrt(1 - ( sp.cos(x/2)*sp.sin(x/2)*sp.exp(sp.I*y) + sp.cos(x/2)*sp.sin(x/2)*sp.exp(-1*sp.I*y))**2 )\n",
+ "\n",
+ "def DB(x, y):\n",
+ " return sp.sqrt(1 - ( -1*sp.I*sp.cos(x/2)*sp.sin(x/2)*sp.exp(sp.I*y) + sp.I*sp.cos(x/2)*sp.sin(x/2)*sp.exp(-1*sp.I*y))**2 )\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sympy.physics.quantum import TensorProduct as TeP\n",
+ "\n",
+ "def alice(d, m, state): \n",
+ "\n",
+ " w, p, q = sp.symbols(\"w, p, q\")\n",
+ "\n",
+ " ##########################################\n",
+ " if d==2:\n",
+ " B1 = [sp.Matrix([1, 0]), sp.Matrix([0, 1])]\n",
+ " B2 = [1/sp.sqrt(2)*sp.Matrix([1, 1]), 1/sp.sqrt(2)*sp.Matrix([1, -1])]\n",
+ " B3 = [1/sp.sqrt(2)* sp.Matrix([1, sp.I]), 1/sp.sqrt(2)*sp.Matrix([1, - sp.I])]\n",
+ "\n",
+ " Blist = [B1, B2, B3]\n",
+ " elif d==3:\n",
+ " B1 = [sp.Matrix([1, 0, 0]), sp.Matrix([0, 1, 0]), sp.Matrix([0,0,1 ]) ]\n",
+ " B2 = [1/sp.sqrt(3) * sp.Matrix([1, 1, 1]), 1/sp.sqrt(3) *sp.Matrix([1, w, w**2]), 1/sp.sqrt(3) * sp.Matrix([1 , w**2 ,w ]) ]\n",
+ " B3 = [1/sp.sqrt(3) * sp.Matrix([1, w, w]), 1/sp.sqrt(3) * sp.Matrix([1, w**2, 1 ]) , 1/sp.sqrt(3) *sp.Matrix([1, 1, w**2])]\n",
+ " B4 = [1/sp.sqrt(3) * sp.Matrix([1, w**2, w**2]), 1/sp.sqrt(3) * sp.Matrix([1, w, 1 ]) , 1/sp.sqrt(3) *sp.Matrix([1, 1, w])]\n",
+ "\n",
+ " Blist = [B1, B2, B3, B4]\n",
+ "\n",
+ " ##########################################\n",
+ " Mat = []\n",
+ " Matconj = []\n",
+ " B = []\n",
+ " for base in range(m):\n",
+ " B += Blist[base]\n",
+ "\n",
+ " for vector in B:\n",
+ " M = vector @ vector.H\n",
+ " M2 = TeP(M, M)\n",
+ " Mat.append(M2)\n",
+ "\n",
+ " for vector in B:\n",
+ " M = vector @ vector.H\n",
+ " M2 = TeP(M, sp.conjugate(M))\n",
+ " Matconj.append(M2)\n",
+ "\n",
+ "\n",
+ " \n",
+ "\n",
+ " if state == \"Bell\":\n",
+ " #aufgabe 3\n",
+ " if d == 2:\n",
+ " #here should be the bell state\n",
+ " phiplus = 1/(sp.sqrt(2))*sp.Matrix([1, 0, 0, 1])\n",
+ " rho_bell = phiplus @ phiplus.H\n",
+ " rho = rho_bell\n",
+ " #aufgabe 3\n",
+ " elif d == 3:\n",
+ "\n",
+ " ket0 = sp.Matrix([1, 0 ,0])\n",
+ " ket1 = sp.Matrix([0, 1 ,0])\n",
+ " ket2 = sp.Matrix([0, 0 ,1])\n",
+ "\n",
+ " bellvec = 1/sp.sqrt(3)* (TeP(ket0, ket0) + TeP(ket1, ket1) + TeP(ket2, ket2))\n",
+ " bell = bellvec @ bellvec.H\n",
+ "\n",
+ " rho_bell = sp.Identity(d**2) * 1/d**2*(1-p) + p* bell\n",
+ " rho = rho_bell\n",
+ "\n",
+ " elif state == \"Werner\":\n",
+ " P = sp.zeros(d**2, d**2) \n",
+ " for i in range(d):\n",
+ " for j in range(d):\n",
+ " b_1 = B1[j]\n",
+ " b_2 = B1[i]\n",
+ " P += TeP(b_1, b_2) @ TeP(b_2, b_1).H\n",
+ "\n",
+ " P_sym = sp.Identity(d**2) + P\n",
+ " P_asym = sp.Identity(d**2) - P\n",
+ " rho_wern = q * P_sym/(d*(d+1)) + (1- q)*(P_asym)/(d*(d-1))\n",
+ " rho = rho_wern\n",
+ "\n",
+ " \n",
+ " trace = 0\n",
+ " for matrix in Mat:\n",
+ " M = matrix @ rho\n",
+ " for i in range(d**2):\n",
+ " trace += M[i,i]\n",
+ " Unconj = trace.subs({w:sp.exp( 2 *sp.pi/d * sp.I )})\n",
+ "\n",
+ " traceconj = 0\n",
+ " for matrix in Matconj:\n",
+ " M = matrix @ rho\n",
+ " for i in range(d**2):\n",
+ " traceconj += M[i,i]\n",
+ " Conj = traceconj.subs({w: sp.exp( 2 *sp.pi/d * sp.I ) })\n",
+ "\n",
+ " return Unconj, Conj\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ " w, p, q = sp.symbols(\"w, p, q\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Aufgabe 3\n",
+ "state = \"Bell\"\n",
+ "d = 2\n",
+ "m = 2\n",
+ "Unconj, Conj = alice(d, m, state) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2$"
+ ],
+ "text/plain": [
+ "2"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Unconj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2$"
+ ],
+ "text/plain": [
+ "2"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Conj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "d = 2 , m = 2 , State: Bell\n",
+ "For p = 0.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.25\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.5\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.75\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 1.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n"
+ ]
+ }
+ ],
+ "source": [
+ "i = 0.0\n",
+ "print(\"d = \", d, \", m = \", m, \", State: \", state)\n",
+ "while i <= 1.0:\n",
+ " valun = sp.re(Unconj.subs({p:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " valcon = sp.re(Conj.subs({ p:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " print(\"For p = \", i)\n",
+ " print(\"Unconjugated = \", valun)\n",
+ " print(\"Conjugated = \", valcon)\n",
+ " i+=0.25"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "state = \"Werner\"\n",
+ "d = 2\n",
+ "m = 3\n",
+ "Unconj, Conj = alice(d, m, state) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2 q$"
+ ],
+ "text/plain": [
+ "2*q"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Unconj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle \\frac{2 q}{3} + 1$"
+ ],
+ "text/plain": [
+ "2*q/3 + 1"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Conj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "d = 2 , m = 3 , State: Werner\n",
+ "For p = 0.0\n",
+ "Unconjugated = 0\n",
+ "Conjugated = 1.00000000000000\n",
+ "For p = 0.25\n",
+ "Unconjugated = 0.500000000000000\n",
+ "Conjugated = 1.16666666666667\n",
+ "For p = 0.5\n",
+ "Unconjugated = 1.00000000000000\n",
+ "Conjugated = 1.33333333333333\n",
+ "For p = 0.75\n",
+ "Unconjugated = 1.50000000000000\n",
+ "Conjugated = 1.50000000000000\n",
+ "For p = 1.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 1.66666666666667\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Aufgabe 4\n",
+ "i = 0.0\n",
+ "print(\"d = \", d, \", m = \", m, \", State: \", state)\n",
+ "while i <= 1.0:\n",
+ " valun = sp.re(Unconj.subs({q:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " valcon = sp.re(Conj.subs({ q:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " print(\"For p = \", i)\n",
+ " print(\"Unconjugated = \", valun)\n",
+ " print(\"Conjugated = \", valcon)\n",
+ " i+=0.25"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "ee36a872144e01c68ec3aa3caf33536f3803d01a906cfaf7250c1aecc58053d7"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.5"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "56478dce9f9bc57d89b9e60ef5c051fa56e4b5d6ab8e261fa1a5710bdfcea7e7"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/sesh5/calc/Untitled.ipynb b/sesh5/calc/Untitled.ipynb
@@ -0,0 +1,237 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "5793ddb1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "from scipy.linalg import hadamard\n",
+ "from sympy import *\n",
+ "from sympy.physics.quantum import TensorProduct\n",
+ "\n",
+ "p = Symbol('p')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 289,
+ "id": "eedef28c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 0.5 p + 0.5$"
+ ],
+ "text/plain": [
+ "0.5*p + 0.5"
+ ]
+ },
+ "execution_count": 289,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# AUFGABE 3\n",
+ "d=2\n",
+ "b_1 = [Matrix([1, 0]), Matrix([0, 1])]\n",
+ "b_3 = [1/sqrt(2)*Matrix([1, 1]), 1/sqrt(2)*Matrix([1, -1])]\n",
+ "b_2 = [1/sqrt(2)*Matrix([1, 1j]), 1/sqrt(2)*Matrix([1, -1j])]\n",
+ "\n",
+ "\n",
+ "basis_2 = [b_1, b_2, b_3]\n",
+ "rho_2 = Matrix(b_1) @ Matrix(b_1).H\n",
+ "rho_iso_2 = (1-p)*1/d**2 * eye(d**2) + p*rho_2\n",
+ "\n",
+ "\n",
+ "simplify(mubs(basis_2, rho_iso_2, d=2, m=2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 253,
+ "id": "ca4202a1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 7.11111111111111 p + 0.888888888888889$"
+ ],
+ "text/plain": [
+ "7.11111111111111*p + 0.888888888888889"
+ ]
+ },
+ "execution_count": 253,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# AUFGABE3\n",
+ "d = 3\n",
+ "w = 1/2 * (-1 + 1j*sqrt(3))\n",
+ "\n",
+ "b1 = [Matrix([1, 0, 0]), Matrix([0, 1, 0]), Matrix([0, 0, 1])]\n",
+ "b2 = [1/sqrt(3) *Matrix([1, 1, 1]),1/sqrt(3) * Matrix([1, w, w**2]), 1/sqrt(3) *Matrix([1, w**2, w])]\n",
+ "b3 = [1/sqrt(3) *Matrix([1, w, w]), 1/sqrt(3) *Matrix([1, w**2, 1]), 1/sqrt(3) *Matrix([1, 1, w**2])]\n",
+ "b4 = [1/sqrt(3) *Matrix([1, w**2, w**2]), 1/sqrt(3) *Matrix([1, w, 1]), 1/sqrt(3) *Matrix([1, 1, w])]\n",
+ "\n",
+ "basis_3 = [b1, b2, b3, b4]\n",
+ "rho_3 = Matrix(b1) @ Matrix(b1).T\n",
+ "rho_iso_3 = (1-p)*1/d**2 * eye(d**2) + p*rho_3\n",
+ "\n",
+ "simplify(mubs(basis_3, rho_iso_3, d=3, m=4))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 302,
+ "id": "d7c7b77f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 1.33333333333333 q$"
+ ],
+ "text/plain": [
+ "1.33333333333333*q"
+ ]
+ },
+ "execution_count": 302,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# AUFGABE4\n",
+ "q = Symbol('q')\n",
+ "\n",
+ "def pp(basis, d):\n",
+ " pp = zeros(d**2)\n",
+ " for i in range(d):\n",
+ " for j in range(d):\n",
+ " pp += TensorProduct(basis[0][j], basis[0][i]) @\\\n",
+ " TensorProduct(basis[0][i], basis[0][j]).H\n",
+ " \n",
+ " p_sym = eye(d**2) + pp\n",
+ " p_asym = eye(d**2) - pp\n",
+ " return p_sym, p_asym\n",
+ "\n",
+ "d = 3\n",
+ "p_sym_3, p_asym_3 = pp(basis_3, d=d)\n",
+ "rho_W_3 = q * p_sym_3/(d*(d+1)) + (1-q)*p_asym_3/(d*(d-1))\n",
+ "simplify(mubs(basis_3, rho_W_3, d=3, m=4))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 298,
+ "id": "fcc5a083",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def mubs(basis, rho, d, m):\n",
+ " I_MUB = 0\n",
+ " for k in range(m):\n",
+ " for i in range(d-1):\n",
+ " I_MUB += (TensorProduct(basis[k][i]@basis[k][i].H, (basis[k][i] @ basis[k][i].H)) @ rho).trace()\n",
+ " \n",
+ " return I_MUB"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 297,
+ "id": "135fbb35",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle \\frac{\\sqrt{2} \\sin{\\left(2 p + \\frac{\\pi}{4} \\right)}}{2} + 1$"
+ ],
+ "text/plain": [
+ "sqrt(2)*sin(2*p + pi/4)/2 + 1"
+ ]
+ },
+ "execution_count": 297,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# AUFGABE 2\n",
+ "psi = Matrix([cos(p), 0, 0, sin(p)])\n",
+ "rho = psi @ psi.T\n",
+ "simplify(mubs(basis_2, rho, d=2, m=3))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "44595f1a",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "57e2b6f5",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5d597e50",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7b34dc5c",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b7008830",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/sesh5/calc/task4.ipynb b/sesh5/calc/task4.ipynb
@@ -0,0 +1,502 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "import sympy as sp\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "x, y = sp.symbols(\"x y\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Task1\n",
+ "def DA(x, y):\n",
+ " return sp.sqrt(1 - ( sp.cos(x/2)*sp.sin(x/2)*sp.exp(sp.I*y) + sp.cos(x/2)*sp.sin(x/2)*sp.exp(-1*sp.I*y))**2 )\n",
+ "\n",
+ "def DB(x, y):\n",
+ " return sp.sqrt(1 - ( -1*sp.I*sp.cos(x/2)*sp.sin(x/2)*sp.exp(sp.I*y) + sp.I*sp.cos(x/2)*sp.sin(x/2)*sp.exp(-1*sp.I*y))**2 )\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sympy.physics.quantum import TensorProduct as TeP\n",
+ "\n",
+ "def alice(d, m, state): \n",
+ "\n",
+ " w, p, q = sp.symbols(\"w, p, q\")\n",
+ "\n",
+ " ##########################################\n",
+ " if d==2:\n",
+ " B1 = [sp.Matrix([1, 0]), sp.Matrix([0, 1])]\n",
+ " B2 = [1/sp.sqrt(2)*sp.Matrix([1, 1]), 1/sp.sqrt(2)*sp.Matrix([1, -1])]\n",
+ " B3 = [1/sp.sqrt(2)* sp.Matrix([1, sp.I]), 1/sp.sqrt(2)*sp.Matrix([1, - sp.I])]\n",
+ "\n",
+ " Blist = [B1, B2, B3]\n",
+ " elif d==3:\n",
+ " B1 = [sp.Matrix([1, 0, 0]), sp.Matrix([0, 1, 0]), sp.Matrix([0,0,1 ]) ]\n",
+ " B2 = [1/sp.sqrt(3) * sp.Matrix([1, 1, 1]), 1/sp.sqrt(3) *sp.Matrix([1, w, w**2]), 1/sp.sqrt(3) * sp.Matrix([1 , w**2 ,w ]) ]\n",
+ " B3 = [1/sp.sqrt(3) * sp.Matrix([1, w, w]), 1/sp.sqrt(3) * sp.Matrix([1, w**2, 1 ]) , 1/sp.sqrt(3) *sp.Matrix([1, 1, w**2])]\n",
+ " B4 = [1/sp.sqrt(3) * sp.Matrix([1, w**2, w**2]), 1/sp.sqrt(3) * sp.Matrix([1, w, 1 ]) , 1/sp.sqrt(3) *sp.Matrix([1, 1, w])]\n",
+ "\n",
+ " Blist = [B1, B2, B3, B4]\n",
+ "\n",
+ " ##########################################\n",
+ " Mat = []\n",
+ " Matconj = []\n",
+ " B = []\n",
+ " for base in range(m):\n",
+ " B += Blist[base]\n",
+ "\n",
+ " for vector in B:\n",
+ " M = vector @ vector.H\n",
+ " M2 = TeP(M, M)\n",
+ " Mat.append(M2)\n",
+ "\n",
+ " for vector in B:\n",
+ " M = vector @ vector.H\n",
+ " M2 = TeP(M, sp.conjugate(M))\n",
+ " Matconj.append(M2)\n",
+ "\n",
+ "\n",
+ " \n",
+ "\n",
+ " if state == \"Bell\":\n",
+ " #aufgabe 3\n",
+ " if d == 2:\n",
+ " #here should be the bell state\n",
+ " phiplus = 1/(sp.sqrt(2))*sp.Matrix([1, 0, 0, 1])\n",
+ " \n",
+ " \n",
+ " rho_bell = phiplus @ phiplus.H\n",
+ " rho = rho_bell\n",
+ " #aufgabe 3\n",
+ " elif d == 3:\n",
+ "\n",
+ " ket0 = sp.Matrix([1, 0 ,0])\n",
+ " ket1 = sp.Matrix([0, 1 ,0])\n",
+ " ket2 = sp.Matrix([0, 0 ,1])\n",
+ "\n",
+ " bellvec = 1/sp.sqrt(3)* (TeP(ket0, ket0) + TeP(ket1, ket1) + TeP(ket2, ket2))\n",
+ " bell = bellvec @ bellvec.H\n",
+ "\n",
+ " rho_bell = sp.Identity(d**2) * 1/d**2*(1-p) + p* bell\n",
+ " rho = rho_bell\n",
+ "\n",
+ " elif state == \"Werner\":\n",
+ " P = sp.zeros(d**2, d**2) \n",
+ " for i in range(d):\n",
+ " for j in range(d):\n",
+ " b_1 = B1[j]\n",
+ " b_2 = B1[i]\n",
+ " P += TeP(b_1, b_2) @ TeP(b_2, b_1).H\n",
+ "\n",
+ " P_sym = sp.Identity(d**2) + P\n",
+ " P_asym = sp.Identity(d**2) - P\n",
+ " rho_wern = q * P_sym/(d*(d+1)) + (1- q)*(P_asym)/(d*(d-1))\n",
+ " rho = rho_wern\n",
+ "\n",
+ " \n",
+ " trace = 0\n",
+ " for matrix in Mat:\n",
+ " M = matrix @ rho\n",
+ " for i in range(d**2):\n",
+ " trace += M[i,i]\n",
+ " Unconj = trace.subs({w:sp.exp( 2 *sp.pi/d * sp.I )})\n",
+ "\n",
+ " traceconj = 0\n",
+ " for matrix in Matconj:\n",
+ " M = matrix @ rho\n",
+ " for i in range(d**2):\n",
+ " traceconj += M[i,i]\n",
+ " Conj = traceconj.subs({w: sp.exp( 2 *sp.pi/d * sp.I ) })\n",
+ "\n",
+ " return Unconj, Conj\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ " w, p, q = sp.symbols(\"w, p, q\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Aufgabe 3\n",
+ "state = \"Bell\"\n",
+ "d = 2\n",
+ "m = 2\n",
+ "Unconj, Conj = alice(d, m, state) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2$"
+ ],
+ "text/plain": [
+ "2"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Unconj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2$"
+ ],
+ "text/plain": [
+ "2"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Conj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "d = 2 , m = 2 , State: Bell\n",
+ "For p = 0.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.25\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.5\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 0.75\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n",
+ "For p = 1.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 2.00000000000000\n"
+ ]
+ }
+ ],
+ "source": [
+ "i = 0.0\n",
+ "print(\"d = \", d, \", m = \", m, \", State: \", state)\n",
+ "while i <= 1.0:\n",
+ " valun = sp.re(Unconj.subs({p:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " valcon = sp.re(Conj.subs({ p:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " print(\"For p = \", i)\n",
+ " print(\"Unconjugated = \", valun)\n",
+ " print(\"Conjugated = \", valcon)\n",
+ " i+=0.25"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "state = \"Werner\"\n",
+ "d = 2\n",
+ "m = 3\n",
+ "Unconj, Conj = alice(d, m, state) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle 2 q$"
+ ],
+ "text/plain": [
+ "2*q"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Unconj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$\\displaystyle \\frac{2 q}{3} + 1$"
+ ],
+ "text/plain": [
+ "2*q/3 + 1"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Conj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "d = 2 , m = 3 , State: Werner\n",
+ "For p = 0.0\n",
+ "Unconjugated = 0\n",
+ "Conjugated = 1.00000000000000\n",
+ "For p = 0.25\n",
+ "Unconjugated = 0.500000000000000\n",
+ "Conjugated = 1.16666666666667\n",
+ "For p = 0.5\n",
+ "Unconjugated = 1.00000000000000\n",
+ "Conjugated = 1.33333333333333\n",
+ "For p = 0.75\n",
+ "Unconjugated = 1.50000000000000\n",
+ "Conjugated = 1.50000000000000\n",
+ "For p = 1.0\n",
+ "Unconjugated = 2.00000000000000\n",
+ "Conjugated = 1.66666666666667\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Aufgabe 4\n",
+ "i = 0.0\n",
+ "print(\"d = \", d, \", m = \", m, \", State: \", state)\n",
+ "while i <= 1.0:\n",
+ " valun = sp.re(Unconj.subs({q:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " valcon = sp.re(Conj.subs({ q:i, w:sp.exp(sp.I*2*sp.pi/d)}).evalf())\n",
+ " print(\"For p = \", i)\n",
+ " print(\"Unconjugated = \", valun)\n",
+ " print(\"Conjugated = \", valcon)\n",
+ " i+=0.25"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "ee36a872144e01c68ec3aa3caf33536f3803d01a906cfaf7250c1aecc58053d7"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.5"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "56478dce9f9bc57d89b9e60ef5c051fa56e4b5d6ab8e261fa1a5710bdfcea7e7"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/sesh6/calc/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/sesh6/calc/.ipynb_checkpoints/Untitled-checkpoint.ipynb
@@ -0,0 +1,6 @@
+{
+ "cells": [],
+ "metadata": {},
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/sesh6/calc/Untitled.ipynb b/sesh6/calc/Untitled.ipynb
@@ -0,0 +1,189 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "id": "72f8e84d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from sympy import *\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 221,
+ "id": "bb9b1221",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "w_00 = 2\n",
+ "gamma = w_00/20\n",
+ "G_np = lambda w: 1/(-w**2 - 1j*gamma*w + w_00**2)\n",
+ "w_np = np.linspace(w_00-2*gamma, w_00+2*gamma, 200)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0829358d",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 222,
+ "id": "27652162",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "w = Symbol('w', real=True)\n",
+ "z = Symbol('z')\n",
+ "g = Symbol('g', real=True)\n",
+ "w_0 = Symbol('w_0', real=True)\n",
+ "\n",
+ "G = 1/(-w**2 - 1j*g*w + w_0**2)\n",
+ "\n",
+ "#equation for half maximum solve for w\n",
+ "solutions = solve(Eq(1/2*1/(g*w_0)**2, re(G)**2 + im(G)**2), w)\n",
+ "\n",
+ "\n",
+ "a_1 = solutions[1].subs([(w_0, w_00), (g, gamma)])\n",
+ "f_1 = abs(G.subs([(w, a_1), (g, gamma), (w_0, w_00)]))**2\n",
+ "\n",
+ "a_2 = solutions[3].subs([(w_0, w_00), (g, gamma)])\n",
+ "f_2 = abs(G.subs([(w, a_2), (g, gamma), (w_0, w_00)]))**2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 230,
+ "id": "a02f8ad6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[<matplotlib.lines.Line2D at 0x7f728d3cdbb0>]"
+ ]
+ },
+ "execution_count": 230,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 720x504 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure(figsize=[10,7])\n",
+ "plt.plot(w_np/w_00, np.abs(G_np(w_np))**2)\n",
+ "\n",
+ "plt.plot(w_np/w_00, np.pi*np.angle(G_np(w_np)))\n",
+ "\n",
+ "plt.scatter(1, 1/(gamma*w_00)**2, c='r')\n",
+ "plt.scatter(a_1/w_00, f_1, c='r')\n",
+ "plt.scatter(a_2/w_00, f_2, c='r')\n",
+ "plt.plot(np.linspace(w_00-gamma/2, w_00+gamma/2, 20)/w_00, f_1*np.ones(20))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a2d94145",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "04bd8956",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f6550847",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "143b3c10",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a522a03a",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "388772b7",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "af0ee465",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7fcf0bd2",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "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.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}