{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Julia Package `QuantumAlgebra`: https://github.com/jfeist/QuantumAlgebra.jl\n", "```julia\n", "using Pkg\n", "Pkg.add(\"QuantumAlgebra\")\n", "```\n", "\n", "Allows to write (somewhat) arbitrary expressions of quantum operators and perform commutator algebra etc with them.\n", "\n", "Possible operators (for now): Bosonic ($a$, $a^\\dagger$) and two-level systems (Pauli matrices) $\\sigma_{x,y,z}$.\n", "\n", "Documentation at https://jfeist.github.io/QuantumAlgebra.jl/stable/" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:20:57.405000+01:00", "start_time": "2019-10-29T19:20:57.127Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "using QuantumAlgebra" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:20:58.647000+01:00", "start_time": "2019-10-29T19:20:57.860Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$a^\\dagger a$" ], "text/plain": [ "QuantumAlgebra.OpProd(adag{Tuple{}}(()), a{Tuple{}}(()))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adag()*a()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "All expressions are reduced to a \"canonical\" form (normal ordering + some extra rules)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:20:59.296000+01:00", "start_time": "2019-10-29T19:20:58.880Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1 + a^\\dagger a$" ], "text/plain": [ "QuantumAlgebra.OpSum(scal{Int64}(1), QuantumAlgebra.OpProd(adag{Tuple{}}(()), a{Tuple{}}(())))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a()*adag()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:00.306000+01:00", "start_time": "2019-10-29T19:20:59.675Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$1i \\sigma_{z}$" ], "text/plain": [ "QuantumAlgebra.OpProd(scal{Complex{Rational{Int64}}}(0//1 + 1//1*im), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.z, ()))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "σx()*σy()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:00.595000+01:00", "start_time": "2019-10-29T19:21:00.379Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1i \\sigma_{x}$" ], "text/plain": [ "QuantumAlgebra.OpProd(scal{Complex{Rational{Int64}}}(0//1 + 1//1*im), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.x, ()))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "σy()*σz()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:01.366000+01:00", "start_time": "2019-10-29T19:21:01.066Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1$" ], "text/plain": [ "scal{Int64}(1)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "σy()*σy()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Operators can have indices." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:02.118000+01:00", "start_time": "2019-10-29T19:21:01.925Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1 + a_{k}^\\dagger a_{k}$" ], "text/plain": [ "QuantumAlgebra.OpSum(scal{Int64}(1), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:k,)), a{Tuple{Symbol}}((:k,))))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:k)*adag(:k)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Symbolic indices can be equal" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:02.410000+01:00", "start_time": "2019-10-29T19:21:02.408Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$δ_{jk} + a_{j}^\\dagger a_{k}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.δ((:j, :k)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), a{Tuple{Symbol}}((:k,))))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:k)*adag(:j)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Sums**: Can represent analytic sums over indices" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:04.052000+01:00", "start_time": "2019-10-29T19:21:04.050Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\sum_{i}a_{i}^\\dagger$" ], "text/plain": [ "OpSumAnalytic(:i, adag{Tuple{Symbol}}((:i,)))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = ∑(:i,adag(:i))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:04.795000+01:00", "start_time": "2019-10-29T19:21:04.380Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$\\sum_{i}a_{i}^\\dagger a_{j}$" ], "text/plain": [ "OpSumAnalytic(:i, QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), a{Tuple{Symbol}}((:j,))))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s*a(:j)" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:03:50.460000+01:00", "start_time": "2019-10-29T19:03:50.117Z" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Sum indices are assumed to run over **all** possible values. \n", "Summing over $\\delta_{i,j}$ removes the sum." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:05.522000+01:00", "start_time": "2019-10-29T19:21:05.472Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1 + \\sum_{i}a_{i}^\\dagger a_{j}$" ], "text/plain": [ "QuantumAlgebra.OpSum(scal{Int64}(1), OpSumAnalytic(:i, QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), a{Tuple{Symbol}}((:j,)))))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:j)*s" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:05.522000+01:00", "start_time": "2019-10-29T19:21:05.472Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1 + \\sum_{i}a_{i}^\\dagger a_{k}$" ], "text/plain": [ "QuantumAlgebra.OpSum(scal{Int64}(1), OpSumAnalytic(:i, QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), a{Tuple{Symbol}}((:k,)))))" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:k)*s" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$2 a_{k}^\\dagger + \\sum_{i}a_{i}^\\dagger a_{i}^\\dagger a_{k}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Int64}(2), adag{Tuple{Symbol}}((:k,))), OpSumAnalytic(:i, QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), a{Tuple{Symbol}}((:k,))))))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:k)*∑(:i,adag(:i)*adag(:i))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Multiple indices, nested sums, etc...**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$δ_{im} δ_{jn} + a_{mnμ}^\\dagger a_{ijμ}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(QuantumAlgebra.δ((:i, :m)), QuantumAlgebra.δ((:j, :n))), QuantumAlgebra.OpProd(adag{Tuple{Symbol,Symbol,Symbol}}((:m, :n, :μ)), a{Tuple{Symbol,Symbol,Symbol}}((:i, :j, :μ))))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:i,:j,:μ) * adag(:m,:n,:μ)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:07.553000+01:00", "start_time": "2019-10-29T19:21:06.847Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$1 + \\sum_{i}\\sum_{j}a_{mnμ}^\\dagger a_{ijμ}$" ], "text/plain": [ "QuantumAlgebra.OpSum(scal{Int64}(1), OpSumAnalytic(:i, OpSumAnalytic(:j, QuantumAlgebra.OpProd(adag{Tuple{Symbol,Symbol,Symbol}}((:m, :n, :μ)), a{Tuple{Symbol,Symbol,Symbol}}((:i, :j, :μ))))))" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "∑(:j, ∑(:i,a(:i,:j,:μ))) * adag(:m,:n,:μ)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:07.613000+01:00", "start_time": "2019-10-29T19:21:07.309Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\sum_{i}1 + \\sum_{i}\\sum_{k}a_{k}^\\dagger a_{i}$" ], "text/plain": [ "QuantumAlgebra.OpSum(OpSumAnalytic(:i, scal{Int64}(1)), OpSumAnalytic(:i, OpSumAnalytic(:k, QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:k,)), a{Tuple{Symbol}}((:i,))))))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "∑(:i,a(:i)) * ∑(:k,adag(:k))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Caution: implementation of analytic sums not fully finished (especially for nested sums)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Parameters**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:10.443000+01:00", "start_time": "2019-10-29T19:21:10.234Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\sum_{j}ω_{j} a_{j}^\\dagger$" ], "text/plain": [ "OpSumAnalytic(:j, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:ω, 'n', (:j,)), adag{Tuple{Symbol}}((:j,))))" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = ∑(:j,param(:ω,:j)*adag(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "string-based input form:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:10.443000+01:00", "start_time": "2019-10-29T19:21:10.234Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\sum_{j}ω_{j} a_{j}^\\dagger$" ], "text/plain": [ "OpSumAnalytic(:j, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:ω, 'r', (:j,)), adag{Tuple{Symbol}}((:j,))))" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = ∑(:j,Pr\"ω_j\"*adag(:j))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:11.223000+01:00", "start_time": "2019-10-29T19:21:10.940Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$ω_{i} + \\sum_{j}ω_{j} a_{j}^\\dagger a_{i}$" ], "text/plain": [ "QuantumAlgebra.OpSum(param{Tuple{Symbol}}(:ω, 'r', (:i,)), OpSumAnalytic(:j, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:ω, 'r', (:j,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), a{Tuple{Symbol}}((:i,))))))" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a(:i)*s" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Back to the original motivation:\n", "**Emitter + many-mode Hamiltonian**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:13.121000+01:00", "start_time": "2019-10-29T19:21:12.528Z" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$E(t) \\sigma_{x} + \\frac{1}{2} Ω \\sigma_{z} + \\sum_{i}ω_{i} a_{i}^\\dagger a_{i} + \\sum_{i}g_{i} a_{i}^\\dagger \\sigma_{x} + \\sum_{i}g_{i} a_{i} \\sigma_{x}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(param{Tuple{}}(Symbol(\"E(t)\"), 'r', ()), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.x, ())), QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Rational{Int64}}(1//2), QuantumAlgebra.OpProd(param{Tuple{}}(:Ω, 'r', ()), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.z, ()))), QuantumAlgebra.OpSum(OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:ω, 'r', (:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), a{Tuple{Symbol}}((:i,))))), QuantumAlgebra.OpSum(OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.x, ())))), OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(a{Tuple{Symbol}}((:i,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.x, ()))))))))" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H = 1//2*Pr\"Ω\"*σz() + Pr\"E(t)\"*σx() + ∑(:i,Pr\"ω_i\"*adag(:i)*a(:i)) + ∑(:i,Pr\"g_i\"*(adag(:i)+a(:i))*σx())" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:13.925000+01:00", "start_time": "2019-10-29T19:21:13.249Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$2i E(t) \\sigma_{y} + 2i \\sum_{i}g_{i} a_{i}^\\dagger \\sigma_{y} + 2i \\sum_{i}g_{i} a_{i} \\sigma_{y}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), QuantumAlgebra.OpProd(param{Tuple{}}(Symbol(\"E(t)\"), 'r', ()), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ()))), QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ()))))), QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(a{Tuple{Symbol}}((:i,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ())))))))" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comm(σz(),H)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2019-10-29T20:21:14.471000+01:00", "start_time": "2019-10-29T19:21:13.847Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/latex": [ "$1i g_{j} \\sigma_{y} + 2i E(t) a_{j}^\\dagger \\sigma_{y} + -1 ω_{j} a_{j}^\\dagger \\sigma_{z} + 2i \\sum_{i}g_{i} a_{i}^\\dagger a_{j}^\\dagger \\sigma_{y} + 2i \\sum_{i}g_{i} a_{j}^\\dagger a_{i} \\sigma_{y}$" ], "text/plain": [ "QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Complex{Rational{Int64}}}(0//1 + 1//1*im), QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:j,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ()))), QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), QuantumAlgebra.OpProd(param{Tuple{}}(Symbol(\"E(t)\"), 'r', ()), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ())))), QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Int64}(-1), QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:ω, 'r', (:j,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.z, ())))), QuantumAlgebra.OpSum(QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ())))))), QuantumAlgebra.OpProd(scal{Complex{Int64}}(0 + 2im), OpSumAnalytic(:i, QuantumAlgebra.OpProd(param{Tuple{Symbol}}(:g, 'r', (:i,)), QuantumAlgebra.OpProd(adag{Tuple{Symbol}}((:j,)), QuantumAlgebra.OpProd(a{Tuple{Symbol}}((:i,)), QuantumAlgebra.σ{Tuple{}}(QuantumAlgebra.y, ()))))))))))" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comm(adag(:j)*σz(),H)" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "hide_input": false, "kernelspec": { "display_name": "Julia 1.2.0", "language": "julia", "name": "julia-1.2" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.2.0" }, "rise": { "scroll": true, "theme": "white" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }