{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A Brief Introduction to Photontorch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import torch\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import photontorch as pt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Networks and Circuits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Networks are the core of Photontorch. Custom networks can easily be created by subclassing `pt.Network`. First, all network subcomponents are defined as attributes of the network, after which the ports of the subcomponents can be linked together with the `link` method of `pt.Network`.\n", "\n", "The `link` method takes an arbitrary number of string arguments. Each argument contains the component name together with a port number in front of and a port number behind the name (e.g. `\"0:wg:1\"`). The port number behind the name will connect to the port number in front of the next name. The first component does not need a port number in front of it, while the last component does not need a port number behind.\n", "\n", "Let's start by creating an all-pass filter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([0, 1])\n" ] } ], "source": [ "class AllPass(pt.Network):\n", " def __init__(self, length=1e-5, neff=2.34, ng=3.4, loss=1000):\n", " super(AllPass, self).__init__() # always initialize first\n", " self.wg1 = pt.Waveguide(length=length, neff=neff, ng=ng, loss=loss, trainable=True)\n", " self.dc1 = pt.DirectionalCoupler(coupling=0.3, trainable=True)\n", " self.link(\"dc1:2\", \"0:wg1:1\", \"3:dc1\")\n", " \n", "# see if the network is terminated\n", "print(torch.where(AllPass().free_ports_at)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here a link was created where port 2 of the directional coupler was connected with port 0 of the waveguide and port 1 of the waveguide was connected with port 3 of the directional coupler. The port order of each component can be found in its docstring." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "During the definition of the subcomponents, the `trainable` flag was set to `True` for the directional coupler and the waveguide. This is a flag that makes the parameters of the waveguide and the directional coupler optimizable with gradient descent and has no effect on the simulation itself." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A network is called *terminated* if no open ports are left. The network defined above is not terminated as it has two free indices left: `0` and `1`, which are respectively port 0 and port 1 of the directional coupler. A source and a detector (each components with a single port) can for example be added to terminate the network and form a closed circuit:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([], dtype=torch.int64)\n" ] } ], "source": [ "class Circuit(pt.Network):\n", " def __init__(self, length=1e-5, neff=2.34, ng=3.4, loss=1000):\n", " super(Circuit, self).__init__()\n", " self.allpass = AllPass(length, neff, ng, loss)\n", " self.source = pt.Source()\n", " self.detector = pt.Detector()\n", " \n", " # note that you link with the allpass circuit as if it was\n", " # a single component. You do not link with the subcomponents\n", " # of the allpass component!\n", " self.link(\"source:0\", \"0:allpass:1\", \"0:detector\")\n", "\n", "# see if the network is terminated\n", "print(torch.where(Circuit().free_ports_at)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To start doing simulations, one first has to create an instance of the ciruit to simulate:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "circuit = Circuit(length=1.2e-5, neff=2.84, ng=3.2, loss=3e4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Photontorch supports time and frequency domain simulations. All the simulation parameters, i.e. the simulation environment, are set with a context-manager (`with`-block). Below an example on how to do a frequency-domain simulation on the Allpass filter defined above:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create simulation environment\n", "freq_env = pt.Environment(\n", " wl=1e-6*np.linspace(1.45, 1.65, 1000),\n", " freqdomain=True\n", ")\n", "\n", "with freq_env:\n", " # perform simulation\n", " detected = circuit(source=1) # constant source with amplitude 1\n", " \n", " # plot detected power\n", " circuit.plot(detected);\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Time domain simulations are just as easily done:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create simulation environment\n", "env = pt.Environment(dt=1e-15, t1=2.5e-12, wl=1.55e-6)\n", "\n", "# create time-dependent source\n", "single_source = torch.tensor(np.sin(env.time*5e13), dtype=torch.float32, names=[\"t\"]) # lower dimensional source should have named dimensions.\n", "\n", "with env:\n", " # perform simulation\n", " detected = circuit(source=single_source)\n", "\n", " # plot detected power\n", " circuit.plot(detected);\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two independent simulations can also be batched together. Each different source function which will then propagate through the circuit in parallel (but independent of each other). This is a very efficient way of doing multiple simulations at once. It can also be used in the optimization phase for more stable training." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create time-dependent source\n", "double_source = torch.tensor(np.stack([\n", " np.cos(env.time*2.5e13),\n", " np.sin(env.time*5e13),\n", "], -1), dtype=torch.float32, names=[\"t\", \"b\"]) # t: time dimension; b: batch dimension.\n", "\n", "with env:\n", " detected = circuit(source=double_source)\n", " circuit.plot(detected);\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can also simulate multiple wavelengths at the same time, just by changing the simulation environment a little bit." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "with env.copy(wl=[1.545e-6, 1.55e-6, 1.56e-6]):\n", " detected = circuit(source=1) # constant source with amplitude 1\n", " circuit.plot(detected);\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization and Training" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The optimizable parameters of a network can be printed out (just like in PyTorch):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameter containing:\n", "tensor(0., dtype=torch.float64, requires_grad=True)\n", "BoundedParameter in [0.00, 1.00] representing:\n", "tensor(0.3000)\n" ] } ], "source": [ "for p in circuit.parameters():\n", " print(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, the circuit has two parameters corresponding to an additional phase factor in the ring and the coupling coefficient of the directional coupler respectively. These two parameters can be optimized to make the network approximate a particular target. For this, native [PyTorch optimizers](https://pytorch.org/docs/stable/optim.html) can be used. \n", "\n", "Let's try to shift the resonance in the ring from 1550nm to 1525 nm while simulataneously making the transmission as low as possible by just optimizing these two parameters:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Parameter containing:\n", "tensor(-2.4749, dtype=torch.float64, requires_grad=True)\n", "BoundedParameter in [0.00, 1.00] representing:\n", "tensor(0.0649)\n" ] } ], "source": [ "# define simualation environment\n", "train_env = pt.Environment(\n", " wl=1525e-9, # we want minimal transmission at this wavelength\n", " freqdomain=True, # we will do frequency domain simulations\n", " grad=True, # gradient need to be tracked in order to use gradient descent.\n", ")\n", "\n", "# define target for the simulation, lets take 0 (ideally no transmission at resonance)\n", "target = 0\n", "\n", "# let's define an optimizer.\n", "# The Adam optimizer is generally considered to be the best\n", "# gradient descent optimizer out there:\n", "optimizer = torch.optim.Adam(circuit.parameters(), lr=0.1)\n", "\n", "# do the training\n", "with train_env:\n", " for epoch in range(100):\n", " optimizer.zero_grad() # reset the optimizer and gradients\n", " detected = circuit(source=1) # simulate\n", " loss = ((detected-target)**2).mean() # calculate mse loss\n", " loss.backward() # calculate the gradients on the parameters\n", " optimizer.step() # update the parameters according to the gradients\n", " \n", "# view result\n", "with freq_env:\n", " detected = circuit(source=1) # constant source with amplitude 1\n", " circuit.plot(detected);\n", " plt.show()\n", "\n", "# print parameters\n", "for p in circuit.parameters():\n", " print(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A shift in resonance can be seen while the transmission at resonance is also clearly lower (approaching zero) than before." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Defining custom components" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Components are the building blocks of Photontorch. Photontorch has a growing number of default components available, it is however reasonably easy to define your own components.\n", "\n", "Below an example on how one can define a directional coupler. A component with 4 ports and two parameters: $\\tau$ the transmission and $\\kappa$ the coupling between the arms." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from torch.nn import Parameter\n", "from photontorch import Component\n", "\n", "class DirectionalCoupler(Component):\n", " num_ports = 4 # this class variable always needs to be defined\n", " def __init__(self, tau=np.sqrt(0.5), kappa=np.sqrt(0.5)):\n", " super(DirectionalCoupler, self).__init__()\n", " self.tau = Parameter(torch.tensor(tau))\n", " self.kappa = Parameter(torch.tensor(kappa))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This was reasonably easy. However, the S-matrix still has to be defined. A directional coupler with the following port order\n", "```\n", "3 2\n", " \\__/\n", " /‾‾\\\n", "0 1\n", "```\n", "has an [S-matrix]( https://en.wikipedia.org/wiki/Power_dividers_and_directional_couplers#S-parameters) that looks as follows:\n", "\\begin{align*}\n", "S &= \\begin{pmatrix}\n", "0 & \\tau & i\\kappa & 0 \\\\\n", "\\tau & 0 & 0 & i\\kappa \\\\\n", "i\\kappa & 0 & 0 & \\tau \\\\\n", "0 & i\\kappa & \\tau & 0\n", "\\end{pmatrix}.\n", "\\end{align*}\n", "\n", "This S-matrix thus essentially links ports (0,1) and ports (2,3) with a transmission $\\tau$, while the links (0,2) and (1,3) are characterized with a coupling $\\kappa$.\n", "\n", "The S-matrix can be defined by defining the method `set_S` of the `DirectionalCoupler` component. This method takes one argument: the empty (all-zero) S-matrix `S` which needs to be filled with elements by that method. The method itself does not return anything.\n", "\n", "However, there is a catch. One cannot just put these S-matrix elements into the `S`-tensor. First of all, the S-matrix needs to be defined for all wavelengths of the simulation. Therefore, the S-matrix has an extra dimension to fill different `S`-elements for different wavelengths. The wavelength information can be obtained for the simulation environment, which is saved in the component as `self.env`. \n", "Secondly, PyTorch does not support complex tensors, therefore the `S` tensor to fill with elements is split into a real and imaginary part, such that the total shape of `S` is:\n", "```\n", " (2, # wavelengths, # ports, # ports)\n", "```\n", "the `set_S` method can thus be written as follows:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "class DirectionalCoupler(Component):\n", " # ... [initialization]\n", " def set_S(self, S):\n", " # this won't be used here, but this is how to get the\n", " # wavelengths (and if necessary other information)\n", " # from the simulation environment to be able to calculate\n", " # the appropriate S-matrix elements.\n", " wls = self.env.wavelength\n", " \n", " # real part scattering matrix (transmission):\n", " # (same transmission for all wavelengths)\n", " S[0, :, 0, 1] = S[0, :, 1, 0] = self.tau\n", " S[0, :, 2, 3] = S[0, :, 3, 2] = self.tau\n", "\n", " # imag part scattering matrix (coupling):\n", " # (same transmission for all wavelengths)\n", " S[1, :, 0, 2] = S[1, :, 2, 0] = self.kappa\n", " S[1, :, 1, 3] = S[1, :, 3, 1] = self.kappa" ] } ], "metadata": { "kernelspec": { "display_name": "ptdev", "language": "python", "name": "ptdev" }, "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }