{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 6.1: Transmisión por una fibra óptica"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$\n",
    "Considere un fotón con polarización lineal modelado por el estado $\\rho=\\ket{\\theta}\\bra{\\theta}$,\n",
    "donde $\\ket{\\theta} = \\bigl[\\begin{smallmatrix}\\cos(\\theta)\\\\\\sin(\\theta)\\end{smallmatrix}\\bigr]$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def foton(theta): # Matriz de densidad de probabilidad de un foton polarizado\n",
    "    ket_theta = np.array([np.cos(theta), np.sin(theta)])\n",
    "    rho = np.outer(ket_theta, ket_theta)\n",
    "    return rho"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7625c52a",
   "metadata": {},
   "source": [
    "\n",
    "Este fotón se transmite por una fibra óptica cuyo efecto se modela con la transformación \n",
    "\\begin{align*}\n",
    "U_{\\alpha} = \\left[\\begin{matrix} \\cos(\\alpha)& -\\sin(\\alpha)\\\\\\sin(\\alpha)& \\cos(\\alpha) \\end{matrix}\\right].\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "746f0b09",
   "metadata": {},
   "outputs": [],
   "source": [
    "def fibra(alpha): # Transformación unitaria de una fibra optica\n",
    "    U = np.array([[np.cos(alpha), -np.sin(alpha)], [np.sin(alpha), np.cos(alpha)]])\n",
    "    return U"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4f8ed66",
   "metadata": {},
   "source": [
    "Esta transformación es una operación unitaria, dado que \n",
    "$U_{\\alpha}U_{\\alpha}^H = U_{\\alpha}^H U_{\\alpha} = \\boldsymbol{I}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5376f641",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Comprobamos que se trata de una matriz unitaria para un parámetro dado:\n",
      "\n",
      "U =\n",
      " [[ 0.98006658 -0.19866933]\n",
      " [ 0.19866933  0.98006658]] \n",
      "\n",
      "[[ 1.00000000e+00 -1.23079293e-17]\n",
      " [-1.23079293e-17  1.00000000e+00]]\n",
      "[[1.00000000e+00 1.23079293e-17]\n",
      " [1.23079293e-17 1.00000000e+00]]\n"
     ]
    }
   ],
   "source": [
    "print(\"Comprobamos que se trata de una matriz unitaria para un parámetro dado:\\n\")\n",
    "alpha = 0.2;\n",
    "U = fibra(alpha)\n",
    "print(\"U =\\n\", str(U), \"\\n\")\n",
    "\n",
    "print(U @ U.conj().T)\n",
    "print(U.conj().T @ U)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c724f473",
   "metadata": {},
   "source": [
    "\n",
    "La matriz de densidad de probabilidad del fotón a la salida de la fibra está dada por \n",
    "\\begin{align*}\n",
    "\\sigma &= U_{\\alpha} \\rho U_{\\alpha}^H.\n",
    "\\end{align*}\n",
    "\n",
    "Por ejemplo, para un fotón con $\\theta=0$ (polarización horizontal) y una fibra óptica con parámetro $\\alpha=\\pi/4$, se tiene que\n",
    "\\begin{align*}\n",
    "  \\sigma\n",
    "    &= \\left[\\begin{matrix} \\cos(\\pi/4)& -\\sin(\\pi/4)\\\\\\sin(\\pi/4)& \\cos(\\pi/4) \\end{matrix}\\right]\n",
    "    \\left[\\begin{matrix} 1&0\\\\0&0 \\end{matrix}\\right]\n",
    "    \\left[\\begin{matrix} \\cos(\\pi/4)& \\sin(\\pi/4)\\\\-\\sin(\\pi/4)& \\cos(\\pi/4) \\end{matrix}\\right]\n",
    "    = \\frac{1}{2}\\left[\\begin{matrix} 1&1\\\\1&1 \\end{matrix}\\right].\n",
    "\\end{align*}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5c7f4474",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rho =\n",
      " [[1. 0.]\n",
      " [0. 0.]] \n",
      "sigma =\n",
      " [[0.5 0.5]\n",
      " [0.5 0.5]]\n"
     ]
    }
   ],
   "source": [
    "rho = foton(0)\n",
    "U = fibra(np.pi/4)\n",
    "sigma = U @ rho @ U.conj().T\n",
    "print(\"rho =\\n\", str(rho), \"\\nsigma =\\n\", str(sigma))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a83229a1",
   "metadata": {},
   "source": [
    "Este estado se corresponde a una fotón $\\sigma =\\ket{\\phi}\\bra{\\phi}$ con $\\phi=\\pi/4$.\n",
    "En general, se puede comprobar que la transformación $U_{\\alpha}$ definida en este ejemplo introduce una rotación de la polarización lineal del fotón de entrada por un ángulo $\\alpha$:\n",
    "\n",
    "<img src=\"figs/transmission-fiber.svg\" alt=\"transmission-fiber\" style=\"width: 280px;\"/>"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
