{ "cells": [ { "cell_type": "markdown", "id": "ccdbded0-ea49-43c2-8455-633a25914ed7", "metadata": {}, "source": [ "# Generating waveforms\n", "\n", "Training data for Dingo consist of pairs of parameters $\\theta$ and corresponding simulated strain data sets $d_I$, where $I$ runs over the GW interferometers (L1, H1, V1, etc.). Additionally, when conditioning on detector noise properties, data also include noise context (the PSD $S_{\\text{n},I}$). Strain data sets are of the form\n", "\n", "$$\n", "d_I = h_I(\\theta) + n_I,\n", "$$\n", "\n", "where $h_I(\\theta)$ is a *signal waveform* (provided by a waveform model) and $n_I$ is a *noise realization* (stationary and Gaussian, consistent with $S_{\\text{n}, I}$).\n", "\n", "## Data domain\n", "\n", "At present, Dingo works entirely with frequency domain data. Although NPE is very flexible and could in principle learn to interpret data in any representation, FD data are especially convenient because (1) stationary Gaussian noise is independent in each frequency bin, so noise generation is straightforward, (2) time shifts take a simple form, enabling improved data augmentation, and (3) the noise context is already in FD. Other domains could be useful in the future, however, so the code is written in a way that the domain could be adapted.\n", "\n", "The domain is specified by instantiating a `UniformFrequencyDomain`," ] }, { "cell_type": "code", "id": "91234432780cc9ea", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:48.278718Z", "start_time": "2025-03-06T12:24:47.980889Z" } }, "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\", \"Wswiglal-redir-stdio\")\n", "import lal" ], "outputs": [], "execution_count": 1 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.083580Z", "start_time": "2025-03-06T12:24:48.326163Z" } }, "cell_type": "code", "source": [ "from dingo.gw.domains import UniformFrequencyDomain\n", "domain = UniformFrequencyDomain(f_min=20.0, f_max=1024.0, delta_f=0.125)" ], "id": "cbd89771-00c8-40f0-8348-0f1f6f065ec4", "outputs": [], "execution_count": 2 }, { "cell_type": "markdown", "id": "c6e07d0b-eaec-436a-9f94-f8da922e5c19", "metadata": {}, "source": [ "Derived class properties include, e.g., the frequency grid. Frequency arrays run from 0 to `f_max`, as is standard for GW data analysis software." ] }, { "cell_type": "code", "id": "76fb4264-6387-43be-bfb4-098d07a4400f", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.372954Z", "start_time": "2025-03-06T12:24:51.356194Z" } }, "source": [ "domain.sample_frequencies" ], "outputs": [ { "data": { "text/plain": [ "array([0.000000e+00, 1.250000e-01, 2.500000e-01, ..., 1.023750e+03,\n", " 1.023875e+03, 1.024000e+03], dtype=float32)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 3 }, { "cell_type": "markdown", "id": "223b7c48-314e-41c0-a351-2c1ac906cd90", "metadata": { "tags": [] }, "source": "```{note}\nThe standard deviation of white noise in each frequency bin is stored in `domain.noise_std`. In frequency domain, this is given by $\\sqrt{1/4\\delta f}$. See [data conditioning](ref:window-factor) for details.\n```\n\nVarious class methods also act on data, to perform operations such as zeroing below `f_min`, truncating above `f_max`, or applying a time shift:\n\n```{eval-rst}\n.. autoclass:: dingo.gw.domains.UniformFrequencyDomain\n :members:\n```" }, { "attachments": {}, "cell_type": "markdown", "id": "8e3be82f-5213-402a-8c4b-e2b3c568cbad", "metadata": {}, "source": [ "## Waveform generator\n", "\n", "Waveforms are generated using the `WaveformGenerator` class (or its subclass `NewInterfaceWaveformGenerator`, for employing the new LIGO waveform interface, needed for some approximants). This depends on a `Domain` as well as a waveform approximant and a reference frequency `f_ref`. In the backend, the `WaveformGenerator` class calls [LALSimulation](https://lscsoft.docs.ligo.org/lalsuite/lalsimulation/) functions (typically `SimInspiralFD`) via the SWIG-Python interface. For time domain waveforms, `SimInspiralFD` takes care of FFTing to frequency domain. The `NewInterfaceWaveformGenerator` class calls the [gwsignal]() module, a Python interface recently implemented in LALSimulation, which is needed for employing some of the latest waveform approximants, as the `SEOBNRv5HM` and `SEOBNRv5PHM`. " ] }, { "cell_type": "code", "id": "c11d621d-a2e8-4cb5-bc1c-88188f53e41c", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.713645Z", "start_time": "2025-03-06T12:24:51.451886Z" } }, "source": [ "from dingo.gw.waveform_generator import WaveformGenerator #, NewInterfaceWaveformGenerator\n", "\n", "wfg = WaveformGenerator(approximant='IMRPhenomXPHM', domain=domain, f_ref=20.0)\n", "# wfg = NewInterfaceWaveformGenerator(approximant='SEOBNRv5PHM', domain=domain, f_ref=20.0)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setting spin_conversion_phase = None. Using phase parameter for conversion to cartesian spins.\n" ] } ], "execution_count": 4 }, { "cell_type": "markdown", "id": "1e93275f-2176-436c-8729-da183b27efbf", "metadata": {}, "source": [ "To generate a waveform we first need to choose parameters. Here we sample parameters from a `bilby.core.prior.PriorDict`. We use the default Dingo intrinsic prior." ] }, { "cell_type": "code", "id": "b794fe91-d36f-4a11-ac8b-731084ededfe", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.787364Z", "start_time": "2025-03-06T12:24:51.774632Z" } }, "source": [ "from bilby.core.prior import PriorDict\n", "from dingo.gw.prior import default_intrinsic_dict\n", "\n", "prior = PriorDict(default_intrinsic_dict)\n", "prior" ], "outputs": [ { "data": { "text/plain": [ "{'mass_1': Constraint(minimum=10.0, maximum=80.0, name=None, latex_label=None, unit=None),\n", " 'mass_2': Constraint(minimum=10.0, maximum=80.0, name=None, latex_label=None, unit=None),\n", " 'mass_ratio': bilby.gw.prior.UniformInComponentsMassRatio(minimum=0.125, maximum=1.0, name='mass_ratio', latex_label='$q$', unit=None, boundary=None, equal_mass=False),\n", " 'chirp_mass': bilby.gw.prior.UniformInComponentsChirpMass(minimum=25.0, maximum=100.0, name='chirp_mass', latex_label='$\\\\mathcal{M}$', unit=None, boundary=None),\n", " 'luminosity_distance': DeltaFunction(peak=1000.0, name=None, latex_label=None, unit=None),\n", " 'theta_jn': Sine(minimum=0.0, maximum=3.141592653589793, name=None, latex_label=None, unit=None, boundary=None),\n", " 'phase': Uniform(minimum=0.0, maximum=6.283185307179586, name=None, latex_label=None, unit=None, boundary='periodic'),\n", " 'a_1': Uniform(minimum=0.0, maximum=0.99, name=None, latex_label=None, unit=None, boundary=None),\n", " 'a_2': Uniform(minimum=0.0, maximum=0.99, name=None, latex_label=None, unit=None, boundary=None),\n", " 'tilt_1': Sine(minimum=0.0, maximum=3.141592653589793, name=None, latex_label=None, unit=None, boundary=None),\n", " 'tilt_2': Sine(minimum=0.0, maximum=3.141592653589793, name=None, latex_label=None, unit=None, boundary=None),\n", " 'phi_12': Uniform(minimum=0.0, maximum=6.283185307179586, name=None, latex_label=None, unit=None, boundary='periodic'),\n", " 'phi_jl': Uniform(minimum=0.0, maximum=6.283185307179586, name=None, latex_label=None, unit=None, boundary='periodic'),\n", " 'geocent_time': DeltaFunction(peak=0.0, name=None, latex_label=None, unit=None)}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 5 }, { "cell_type": "code", "id": "3da1792f-4459-41fd-b582-ec460ca87337", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.821933Z", "start_time": "2025-03-06T12:24:51.816387Z" } }, "source": [ "p = prior.sample()\n", "p" ], "outputs": [ { "data": { "text/plain": [ "{'mass_ratio': 0.134488607823063,\n", " 'chirp_mass': 72.68826723349574,\n", " 'luminosity_distance': 1000.0,\n", " 'theta_jn': 2.115774264754338,\n", " 'phase': 6.277423673741555,\n", " 'a_1': 0.05488692077019725,\n", " 'a_2': 0.17569595065281166,\n", " 'tilt_1': 1.2836247952488415,\n", " 'tilt_2': 2.8253930297013174,\n", " 'phi_12': 5.380242374015733,\n", " 'phi_jl': 6.228059574343675,\n", " 'geocent_time': 0.0}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 6 }, { "cell_type": "markdown", "id": "55d0f7d6-b256-438d-bca3-31fb777f08bb", "metadata": {}, "source": [ "Finally, we generate the waveform. This is returned as a dictionary, with entries for each polarization. This way of representing a sample is used throughout Dingo, and will be very convenient when applying transforms (to apply extrinsic parameters, add noise, etc.)." ] }, { "cell_type": "code", "id": "7260cc7a-5695-483c-b93f-fced55d0ae2f", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:51.995079Z", "start_time": "2025-03-06T12:24:51.968546Z" } }, "source": [ "h = wfg.generate_hplus_hcross(p)\n", "h" ], "outputs": [ { "data": { "text/plain": [ "{'h_plus': array([0.+0.j, 0.+0.j, 0.+0.j, ..., 0.+0.j, 0.+0.j, 0.+0.j]),\n", " 'h_cross': array([0.+0.j, 0.+0.j, 0.+0.j, ..., 0.+0.j, 0.+0.j, 0.+0.j])}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 7 }, { "cell_type": "code", "id": "2981b324-87cb-434c-ac53-105515b373a1", "metadata": { "ExecuteTime": { "end_time": "2025-03-06T12:24:52.629257Z", "start_time": "2025-03-06T12:24:52.009487Z" } }, "source": [ "import matplotlib.pyplot as plt\n", "plt.plot(domain.sample_frequencies, h['h_plus'].real, label='real')\n", "plt.plot(domain.sample_frequencies, h['h_plus'].imag, label='imag')\n", "plt.xlim((10,1024))\n", "plt.xscale('log')\n", "plt.legend()\n", "plt.xlabel('f')\n", "plt.ylabel(r'$h_+$')\n", "plt.show()" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAHECAYAAAD2/RSNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY/xJREFUeJzt3Xd4m+XZ/vGvtrcdx45H4uxNJgkJCQkNkJKwoUBLWwjQAi0v0B8NLaMjLS0lLy9ltaWl0FKgLaO0QKGshkAYIUBIMAGyp7PsDMd7SJb0++ORZEmWbUmWPJLzcxw+LEuPpDsOxmeu+3qux+T1er2IiIiISNTMPb0AERERkb5GAUpEREQkRgpQIiIiIjFSgBIRERGJkQKUiIiISIwUoERERERipAAlIiIiEiMFKBEREZEYKUCJiIiIxEgBSkRERCRGClBxeueddzjnnHMoLi7GZDLxwgsvJPX9li5dygknnEBmZiYDBgzg/PPPZ9OmTYHHKysrueGGGxgzZgypqakMHjyY733ve1RXVyd1XSIiIsciBag41dfXM3nyZB588MFueb+3336b6667jg8++IBly5bhcrk4/fTTqa+vB2Dfvn3s27ePX//613z++ec89thjvPbaa3z729/ulvWJiIgcS0y6mHDXmUwmnn/+ec4///zAfc3Nzfz4xz/mqaeeoqqqigkTJnDXXXcxb968hLznwYMHGTBgAG+//TYnn3xyxGOeffZZLr30Uurr67FarQl5XxEREVEFKmmuv/56Vq1axdNPP826deu4+OKLWbhwIVu2bEnI6/u35nJzczs8JisrS+FJREQkwVSBSoDwClRZWRnDhw+nrKyM4uLiwHHz589nxowZ3HnnnV16P4/Hw7nnnktVVRXvvfdexGMOHTrEtGnTuPTSS/nVr37VpfcTERGRUKpAJcFnn32G2+1m9OjRZGRkBD7efvtttm3bBsDGjRsxmUwdftx6660RX/+6667j888/5+mnn474eE1NDWeddRbjx4/n5z//ebL+mCIiIscs7e0kQV1dHRaLhTVr1mCxWEIey8jIAGD48OFs2LChw9fp379/m/uuv/56/vOf//DOO+8waNCgNo/X1taycOFCMjMzef7557HZbF34k4iIiEgkClBJMHXqVNxuNwcOHGDu3LkRj7Hb7YwdOzbq1/R6vdxwww08//zzrFixgmHDhrU5pqamhgULFuBwOHjxxRdJSUmJ+88gIiIi7VOAilNdXR1bt24NfL1jxw5KS0vJzc1l9OjRfPOb32TRokXcc889TJ06lYMHD7J8+XImTZrEWWedFfP7XXfddTz55JP8+9//JjMzk/LycgCys7NJTU2lpqaG008/nYaGBv72t79RU1NDTU0NAPn5+W0qYSIiIhI/NZHHacWKFZxyyilt7r/88st57LHHcLlc3HHHHTzxxBPs3buXvLw8TjzxRG6//XYmTpwY8/uZTKaI9//lL3/hiiuuaHc9YIS7oUOHxvyeIiIiEpkClIiIiEiMdBaeiIiISIwUoERERERipCbyGHg8Hvbt20dmZma7PUkiIiLSu3i9XmpraykuLsZsTkztSAEqBvv27aOkpKSnlyEiIiJx2L17d8QZivFQgIpBZmYmYPwFZGVl9fBqREREJBo1NTWUlJQEfo8nggJUDPzbdllZWQpQIiIifUwi22/URC4iIiISIwUoERERkRhpC09ERKQHud1uXC5XTy+jz7Pb7Qk7wy4aClAiIiI9wOv1Ul5eTlVVVU8v5ahgNpsZNmwYdru9W95PAUpERKQH+MPTgAEDSEtL03zBLvDPady/fz+DBw/ulu+lApSIiEg3c7vdgfDUv3//nl7OUSE/P599+/bR0tKCzWZL+vupiVxERKSb+Xue0tLSenglRw//1p3b7e6W91OAEhER6SHatkuc7v5eKkCJiIiIxEgBSkRERCRGClAiIiLSo3bu3InJZKK0tLSnlxI1BSgRERGRGClAiYiISNycTmdPL6FHKECJiIj0Al6vlwZnS498eL3eqNc5b948rr/+em688Uby8vJYsGABn3/+OWeccQYZGRkUFBRw2WWXcejQocBzXnvtNebMmUNOTg79+/fn7LPPZtu2bcn4NnYbDdIUERHpBRpdbsYveb1H3nv9LxaQZo8+Ejz++ONce+21rFy5kqqqKk499VSuuuoq7rvvPhobG7nlllv46le/yptvvglAfX09ixcvZtKkSdTV1bFkyRIuuOACSktLu/X6dYmkACUiIiIxGTVqFP/3f/8HwB133MHUqVO58847A48/+uijlJSUsHnzZkaPHs2FF14Y8vxHH32U/Px81q9fz4QJE7p17YmiACUiItILpNosrP/Fgh5771hMmzYtcPvTTz/lrbfeIiMjo81x27ZtY/To0WzZsoUlS5bw4YcfcujQITweDwBlZWUKUCIiIhI/k8kU0zZaT0pPTw/crqur45xzzuGuu+5qc1xRUREA55xzDkOGDOGRRx6huLgYj8fDhAkT+nQDet/4mxIREZFe6fjjj+df//oXQ4cOxWptGysOHz7Mpk2beOSRR5g7dy4A7733XncvM+H6ZueWiIiI9ArXXXcdlZWVfP3rX2f16tVs27aN119/nSuvvBK3202/fv3o378/Dz/8MFu3buXNN99k8eLFPb3sLlOAEhERkbgVFxezcuVK3G43p59+OhMnTuTGG28kJycHs9mM2Wzm6aefZs2aNUyYMIHvf//73H333T297C4zeWMZ/nCMq6mpITs7m+rqarKysnp6OSIi0kc1NTWxY8cOhg0bRkpKSk8v56jQ0fc0Gb+/VYESERERiZEClIiIiEiMFKBEREREYqQAJSIiIhIjBSgRERGRGClAiYiIiMRIAUpEREQkRgpQIiIiIjFSgBIRERGJkQJUVx3YAH+/GPau7emViIiIJN28efO48cYbe3oZPa7tZZMlNp//C7b8F/oNhYHH9/RqREREkuq5557DZrP19DJ6nAJUV7U0G5+dDT27DhERkW6Qm5vb00voFbSF11WeFuOzSwFKRES6wOsFZ33PfHi9US8zeAtv6NCh3HHHHSxatIiMjAyGDBnCiy++yMGDBznvvPPIyMhg0qRJfPzxx4HnHz58mK9//esMHDiQtLQ0Jk6cyFNPPRXyHrW1tXzzm98kPT2doqIi7rvvvl63dagKVFe5XcbnlqaeXYeIiPRtrga4s7hn3vtH+8CeHtdT77vvPu68805++tOfct9993HZZZcxe/ZsvvWtb3H33Xdzyy23sGjRIr744gtMJhNNTU1MmzaNW265haysLF5++WUuu+wyRowYwYwZMwBYvHgxK1eu5MUXX6SgoIAlS5awdu1apkyZksA/dNcoQHWVKlAiInIMO/PMM/nOd74DwJIlS/jDH/7ACSecwMUXXwzALbfcwqxZs6ioqKCwsJCBAwfygx/8IPD8G264gddff51//OMfzJgxg9raWh5//HGefPJJTjvtNAD+8pe/UFzcQ+GyHQpQXeXxVaBcqkCJiEgX2NKMSlBPvXecJk2aFLhdUFAAwMSJE9vcd+DAAQoLC3G73dx555384x//YO/evTidTpqb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IiJyVFCASqKoz8ILbiK3apCmiIhIb6cAlUR2S9gcqGiayD0tSVyRiIiIJIICVBJFXYEK3rZraU7iikRERCQRFKCSqG0TeQff7kmXQL9hMPK0JK9KREREusra0ws4mgVXoDJTrJTkdjDj6St/BK8XTKZuWJmIiIh0hSpQSRQcoL4xczAp7V0Lz0/hSUREpE9QgEqizJTWAt/ls4b23EJEREQkofpkgPrVr37F7NmzSUtLIycnJ6rneL1elixZQlFREampqcyfP58tW7YkdZ0DMlP4v4sm8cii6RTnaL6TiIjI0aJPBiin08nFF1/MtddeG/Vz/u///o/f/OY3PPTQQ3z44Yekp6ezYMECmpqakrhS+Or0Er48viCp7yEiIiLdy+T1er09vYh4PfbYY9x4441UVVV1eJzX66W4uJibbrqJH/zgBwBUV1dTUFDAY489xiWXXBLV+9XU1JCdnU11dTVZWVldXb6IiIh0g2T8/u6TFahY7dixg/LycubPnx+4Lzs7m5kzZ7Jq1ap2n9fc3ExNTU3Ih4iIiMgxEaDKy8sBKCgI3UorKCgIPBbJ0qVLyc7ODnyUlJQkdZ0iIiLSN/SaAHXrrbdiMpk6/Ni4cWO3rum2226juro68LF79+5ufX8RERHpnXrNIM2bbrqJK664osNjhg8fHtdrFxYWAlBRUUFRUVHg/oqKCqZMmdLu8xwOBw6HI673FBERkaNXrwlQ+fn55OfnJ+W1hw0bRmFhIcuXLw8EppqaGj788MOYzuQTERERgV60hReLsrIySktLKSsrw+12U1paSmlpKXV1dYFjxo4dy/PPPw+AyWTixhtv5I477uDFF1/ks88+Y9GiRRQXF3P++ef30J9CRERE+qpeU4GKxZIlS3j88ccDX0+dOhWAt956i3nz5gGwadMmqqurA8fcfPPN1NfXc80111BVVcWcOXN47bXXSElJ6da1i4iISN/Xp+dAdTfNgRIREel7NAdKREREpBdQgBIRERGJkQKUiIiISIwUoERERERipAAlIiIiEiMFKBEREZEYKUCJiIiIxEgBSkRERCRGClAiIiIiMVKAEhEREYmRApSIiIhIjBSgRERERGKkACUiIiISIwUoERERkRgpQImIiIjESAFKREREJEYKUCIiIiIxUoASERERiZEClIiIiEiMFKBEREREYqQAJSIiIhIjBSgR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t9uZNm0ay5cvD9zn8XhYvnw5s2bN6sGViUhX6Gdb5OjTXT/X2sLzqaurY+vWrYGvd+zYQWlpKbm5uQwePJjFixdz+eWXM336dGbMmMH9999PfX09V155ZQ+uWkQ6o59tkaNPr/i5jvV0waPVW2+95QXafFx++eWBY3772996Bw8e7LXb7d4ZM2Z4P/jgg55bsIhERT/bIkef3vBzrWvhiYiIiMRIPVAiIiIiMVKAEhEREYmRApSIiIhIjBSgRERERGKkACUiIiISIwUoERERkRgpQImIiIjESAFKREREJEYKUCIiIiIxUoASEQG8Xi/XXHMNubm5mEwmSktLe3pJItKL6VIuIiLAq6++ynnnnceKFSsYPnw4eXl5WK263rqIRKb/O4iIANu2baOoqIjZs2f39FJEpA9QgBKRY94VV1zB448/DoDJZGLIkCHs3LmzZxclIr2aApSIHPMeeOABRowYwcMPP8zq1auxWCw9vSQR6eUUoETkmJednU1mZiYWi4XCwsKeXo6I9AE6C09EREQkRgpQIiIiIjFSgBIRERGJkQKUiIiISIwUoERERERipEnkIiIiIjFSBUpEREQkRgpQIiIiIjFSgBIRERGJkQKUiIiISIwUoERERERipAAlIiIiEiMFKBEREZEYKUCJiIiIxEgBSkRERCRGClAiIiIiMVKAEhEREYnR/we1/knTflylZQAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 8 }, { "cell_type": "markdown", "id": "238b3c86-3578-4637-825c-ed2d76e29a87", "metadata": {}, "source": [ "Note that the waveform is nonzero slightly below `f_min`. This simply arises from the model implementation in `LALSimulation`. When training networks, input data will be truncated below `f_min`.\n", "\n", "The complete specification of the `WaveformGenerator` class is given as\n", "```{eval-rst}\n", ".. autoclass:: dingo.gw.waveform_generator.WaveformGenerator\n", " :members:\n", "```" ] }, { "cell_type": "markdown", "id": "75321235-acc1-4641-b083-dab542445d28", "metadata": {}, "source": [ "### Waveform modes\n", "\n", "Add later." ] }, { "cell_type": "markdown", "id": "6e785d60-961f-4987-a5f8-eb46f873aff1", "metadata": { "tags": [] }, "source": [ "\n" ] } ], "metadata": { "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.9.4" } }, "nbformat": 4, "nbformat_minor": 5 }