{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Tutorial: Rapid Teukolsky mode amplitudes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Waveforms are constructed from simulated trajectories by computing Teukolsky mode amplitudes $A_{\\ell m k n}$ at the trajectory points $(p, e, x_I)$, conditioning on the MBH spin $a$. As the $A_{\\ell m k n}$ are expensive to compute directly, in FEW we perform interpolation over pre-computed datasets in order to obtain mode amplitudes on a timescale of milliseconds.\n", "\n", "In this short tutorial, we will review the tools provided in FEW for generating waveform mode amplitudes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Spline interpolation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "FEW provides spline interpolation routines that are valid over a fixed domain of Kerr eccentric equatorial orbits, i.e. for varying $(a, p, e)$ and $|x_I|=1$. As mode amplitudes do not vary strongly with respect to $a$, we perform bicubic interpolation with respect to $(p,e)$ and linearly interpolate with respect to $a$. Mode indices $(\\ell, m, n)$ in the set $\\ell \\in [2, 10]$, $m \\in [-\\ell, \\ell]$, $n \\in [-55, 55]$ are supported. A notable restriction is that currently only a single input (i.e., a float) for $a$ is supported.\n", "\n", "For ease of waveform construction, we interpolate mode amplitudes that have been projected from the spin-weighted spheroidal harmonic basis to the spin-weighted _spherical_ harmonic basis (see e.g. [2102.02713](https://arxiv.org/abs/2102.02713), [2310.19706](https://arxiv.org/abs/2310.19706) and references therein). This basis admits the symmetry \n", "\n", "$$ A_{\\ell -m -n} = (-1)^\\ell A_{\\ell m n}^*,$$\n", "\n", "which we exploit in waveform generation in order to reduce the number of mode amplitude evaluations required. \n", "\n", "Once amplitude classes are instantiated, the necessary data files for interpolation are downloaded automatically. These can be reasonably large (a few GB), so ensure you are on a reasonably fast internet connection for your first run." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:53.449036Z", "iopub.status.busy": "2026-07-11T10:46:53.448769Z", "iopub.status.idle": "2026-07-11T10:46:57.868882Z", "shell.execute_reply": "2026-07-11T10:46:57.868270Z" } }, "outputs": [], "source": [ "from few.amplitude.ampinterp2d import AmpInterpKerrEccEq\n", "import numpy as np\n", "\n", "kerr_amp_spline = AmpInterpKerrEccEq()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specific modes can be selected by providing a list of tuples of $(\\ell, m, n)$ values as the `specific_modes` kwarg.\n", "\n", "Notice this returns a dictionary with keys as the mode tuple and values as the mode values." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:57.870085Z", "iopub.status.busy": "2026-07-11T10:46:57.870013Z", "iopub.status.idle": "2026-07-11T10:46:58.956950Z", "shell.execute_reply": "2026-07-11T10:46:58.956548Z" } }, "outputs": [ { "data": { "text/plain": [ "({(2, 2, 0): array([0.21239204-0.06664877j]),\n", " (7, -3, 1): array([1.38197053e-06-1.77646921e-06j])},\n", " array([0.21239204-0.06664877j]))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get mode amplitudes at an example point\n", "a = 0.87\n", "p = 7.0\n", "e = 0.4\n", "xI = 1.0\n", "specific_modes = [(2,2,0),(7,-3,1)]\n", "specific_amplitudes = kerr_amp_spline(a, p, e, xI, specific_modes=specific_modes)\n", "specific_amplitudes, specific_amplitudes[(2,2,0)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you call `kerr_amp_spline` without the key `specific_modes`, it will output all the modes:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:58.969690Z", "iopub.status.busy": "2026-07-11T10:46:58.969606Z", "iopub.status.idle": "2026-07-11T10:46:58.999633Z", "shell.execute_reply": "2026-07-11T10:46:58.999195Z" } }, "outputs": [], "source": [ "all_amplitudes = kerr_amp_spline(a, p, e, xI)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can easily retrieve a specific mode via the use of `special_index_map`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:59.000789Z", "iopub.status.busy": "2026-07-11T10:46:59.000734Z", "iopub.status.idle": "2026-07-11T10:46:59.002770Z", "shell.execute_reply": "2026-07-11T10:46:59.002464Z" } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extracting the (2,2,0) mode\n", "mode_location = kerr_amp_spline.special_index_map[(2,2,0)]\n", "np.allclose(\n", " specific_amplitudes[(2,2,0)], \n", " all_amplitudes[0,mode_location]\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The arguments of `kerr_amp_spline` can also be arrays (with the exception of the spin, which must always be a float).\n", "\n", "The data grids cannot generally be rectilinear in $(a, p, e)$ space, (for example to avoid computing the modes inside the separatrix). Instead, we start from a data points on a rectilinear grids $(u, w, y, z)$ all with ranges $[0, 1]$, and then map into space via the `apex_of_uwyz` utility:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:59.003699Z", "iopub.status.busy": "2026-07-11T10:46:59.003649Z", "iopub.status.idle": "2026-07-11T10:46:59.379298Z", "shell.execute_reply": "2026-07-11T10:46:59.378901Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total trajectory points: 10201\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "from few.utils.mappings.kerrecceq import apex_of_uwyz, z_of_a, y_of_x\n", "\n", "# A rectilinear grid\n", "uv = np.linspace(1e-5, 1 - 1e-5, 101)\n", "wv = np.linspace(1e-5, 1 - 1e-5, 101)\n", "\n", "a = 0.84\n", "z = z_of_a(a)\n", "y = y_of_x(1)\n", "\n", "# For a given rectilinear grid, compute the associated (a,p,e,x) grid\n", "u_grid, w_grid = np.asarray(np.meshgrid(uv, wv, indexing=\"ij\")).reshape(2, -1)\n", "a_grid, p_grid, e_grid, xI_grid = apex_of_uwyz(\n", " u_grid, w_grid, np.ones_like(u_grid) * y, np.ones_like(u_grid) * z\n", ")\n", "\n", "print(\"Total trajectory points:\", w_grid.shape[0])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:46:59.380517Z", "iopub.status.busy": "2026-07-11T10:46:59.380413Z", "iopub.status.idle": "2026-07-11T10:47:11.043926Z", "shell.execute_reply": "2026-07-11T10:47:11.043478Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Indices of interest: [1165 3495]\n", "True\n", "False\n" ] } ], "source": [ "# All the mode amplitudes for the given (a,p,e,x) data points.\n", "teuk_all_amps = kerr_amp_spline(a, p_grid, e_grid, xI_grid).reshape(\n", " uv.size, wv.size, -1\n", ")\n", "\n", "# Specific mode amplitudes for the given (a,p,e,x) data points.\n", "specific_modes = [(2, 2, 0), (7, -3, 1)]\n", "teuk_specific_amps = kerr_amp_spline(a, p_grid, e_grid, xI_grid, specific_modes=specific_modes)\n", "\n", "# We can find the index to these modes to check\n", "inds = np.array([kerr_amp_spline.special_index_map[lmn] for lmn in specific_modes])\n", "print(\"Indices of interest:\", inds)\n", "\n", "# Making sure they are the same\n", "print(\n", " np.allclose(\n", " teuk_specific_amps[(2, 2, 0)].reshape(uv.size, wv.size),\n", " teuk_all_amps[:, :, inds[0]],\n", " )\n", ")\n", "\n", "# to check -m modes we need to take the conjugate\n", "print(\n", " np.allclose(\n", " teuk_specific_amps[(7, -3, 1)].reshape(uv.size, wv.size),\n", " np.conj(teuk_all_amps[:, :, inds[1]]),\n", " )\n", ")\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:47:11.044910Z", "iopub.status.busy": "2026-07-11T10:47:11.044848Z", "iopub.status.idle": "2026-07-11T10:47:11.124204Z", "shell.execute_reply": "2026-07-11T10:47:11.123787Z" } }, "outputs": [ { "data": { "image/png": "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o/4OxQGXp93Yu3cvDR06VOxgfF8dts/t/PnzojEYPnw4ySyc7RszZgz95S9/EXMBfv755/TWW29Rjx49SJdt3L17t3jvsrKyxMFq7dq19PHHH1N2dnbU1x30c+ONN4qpiNzLgQMHAt6WT2F61113ic8sf3afeOIJmjFjhghIMuL9xHPb3BPk/+xnP2vwftyOeN6vW7duJINLly6JL7qvvPKK378/88wzlJeXJ/7O285fVvj4xqesDeSvf/2rmKpq/Pjx9Le//U38y23qRx99RDJt37fffkuffPIJ/ed//qf4l4tThw8fpnvuuafRx+Xilef7WVpaGpUzlUmNpwkDtdxyyy2uKVOmeF3Xo0cP1+zZs4N+jBtuuME1f/58l07bN3bsWNdvf/tb19y5c129e/d2ySrU7XvvvfdcycnJrnPnzrlUEeo2Pvvss65rr73W67qXXnrJ1aFDB1vXE/QXanvw+OOPi8+qp8mTJ7v69+/vUsHDDz/s6tq1q6u2ttbv3z/44AOeGtT1j3/8wyU7Xs+333677jJvU9u2bV2///3v6667fPmyaB9fffXVgI8zZswY17/92795XTdy5EjXz3/+c5dM2+fP//3f/4nbffXVVwFvs3LlSvEagDdUcBVTVVUlqrDp6ele1/PloqKioB6jtrZWfNtt2bIl6bJ9K1eupKNHj4rJsGUWzva9++674hSFXLm45pprqHv37uKMLt999x3pso18ysaTJ0+KXxm43T979iytW7eORo0aFaW1Bp0dOXJE/NzLXWZ+/vOf07Fjxxqs9tX/7I4cOZKKi4vFT8gy433vjTfeoEmTJomfqBvSt29f0RWIf/H64IMPSAVcXT9z5ozX+8NdDu64444Gjw+B3tNgj5lO4l8m+b286qqrGrzdxYsXRRe2Dh060N133y3tL7TRhICrmPLycqqpqaE2bdp4Xc+XeccPxvPPPy9+JuGfaHTYPj54zZ49W/Th5P63Mgtn+/hgzD/h//3vfxf9xvLz80X4C9THTsVt5IDL7x//jMjnLuefHblBf/nll6O01qCrW2+9lVavXi3GHfzhD38Qn0H+vAXq381/9/fZra6uFp9tmXF/zn/+8580YcKEgLfhULts2TLR5YJ/Ar/++utFyOWubLJztx+hHv8CvafBHjOdwn1o+dg2btw40QUhEO6uxv1wuRjC3de4a8KgQYPEsdFkcqcBCKj+t3OuejX2jZ3xh5876L/zzjvUunVr5bePgxTv/PPnzxeVTR3fP6648984ACYnJ4vruA/aAw88IE5jyAMtVN/GgwcPin6OTz75pKiscP+xWbNmiXOSc79jgHBx3283HrzDg2x5kOYf//hHca77YD+7/q6XDe8rvL1crQ6EAy0vbvx6lJSU0HPPPUe333476Xr8C/eY6RT+tYB/beD2nwfsNqR///5iceNwe/PNN4sCAZ/i1lQIuIpJSUmhJk2a+HzzLCsr8/mG6m/gDw/i4QE8I0aMIB22j7ta8E+H/HPMtGnTxHXcIHDjxdXcrVu30rBhw0jl948rLtw1wR1uWc+ePcU28s/6sgwOiWQbFy1aJBplDrXspptuEqOIeaDPwoULxWsAYAX+XHHQDVTd4l8P/H12uT25+uqrpX0TvvrqK/rf//1fUZUNFYcj7togO/fsF/z+eLYJjR3/Ar2njR0znQy3/Asrd8l4//33G6ze+hMbG0s/+clPjK/goouCYvjnW56+xj1S1o0v889uDVVu+WerN998U+p+jaFuH+/4PCJ6//79dQtX/bhCwf/PP0+q/v5x8ONpYriPlRuPrOVGjPtbySacbeTRw7w9njgke1bPAKzAU+4dOnQo4JcmrmjW/+zyF2XuB3/FFVdI+ybwOAT+VS6c9p0LBCp8ieQ+1BxWPd8f7nfM07o1dPwL9J42dB+nwy1/AeMvLOF8qeI2c//+/Uq8p7aqN+gMFPDf//3friuuuMK1YsUK18GDB10zZ850NWvWzPXll1+Kv/NI9fHjx9fd/s0333TFxcW5Fi9e7CotLa1b/vnPf7p02L76ZJ9FIdTtu3DhgphN4IEHHnB9+umnrh07dri6devmys7OdumyjTwKmD+jBQUFrqNHj7p2797tSktLE7MxAETi0UcfdW3fvt117Ngx14cffui6++67XS1atAj4WeTbXXnlla5HHnlEfHb5M8yf5XXr1kn7RtTU1Lg6duzo+s1vfuPzt/rb98ILL4iR+4cPH3b9/e9/F3/nKLB+/XqXDLi927dvn1h4vfLy8sT/u2cR4BkUeMaADRs2uA4cOOD6xS9+4WrXrp2roqKi7jF4ez1nbNmzZ4+rSZMm4r6HDh0S/3J7w58Hmbbv+++/d91zzz2ivd+/f7/X8bqysjLg9s2bN8+1efNm0XbyY02cOFFs30cffeQyGQKuojisdurUyRUfH++6+eabRehxe/DBB1133HFH3WX+f96R6i98Ox22T7WAG872caM8YsQIV9OmTUXjl5OT4/r2229dOm0jTwvG09fxNvIB65e//KXr5MmTDqw56ISnD+TPE4fU9u3bu/793/9dfFFs6LPIgbhv377is9u5c2fXkiVLXDLbsmWLaNM///xzn7/V376nn35aTCOWmJjo+tGPfuS67bbbXH/+859dsnBPYxboeMVThXEbz9OFJSQkuG6//XYRdD3x9tY/vq1du9Z1/fXXi88BTwPnVKBvaPuOHz/u92+88P0CbR8XEPgLDn9eW7Vq5UpPT3cVFRW5TBfD/3G6igwAAAAAYBX0wQUAAAAArSDgAgAAAIBWEHABAAAAQCsIuAAAAACgFQRcAAAAANAKAi4AAAAAaAUBFwAAAAC0goALAAAAAFpBwAUAAAAArSDgAgAAAIBWEHABAAAAQCsIuAABdO7cmfLz872u69OnD82bNw+vGQAoaciQITRt2jSxXHXVVXT11VfTb3/7W3K5XE6vGoClEHABAAAM8sc//pHi4uLoo48+opdeeoleeOEFWr58udOrBWCpOGsfDgAAAGSWmpoqQm1MTAxdf/31dODAAXH5V7/6ldOrBmAZVHABAAAM0r9/fxFu3QYMGEBHjhyhmpoaR9cLwEoIuACBdo7YWJ9+ad9//z1eLwAAAMkh4AIE0KpVKyotLa27XFFRQcePH8frBQBK+/DDD30ud+vWjZo0aeLYOgFYDQEXIIBhw4bR66+/Trt27aK///3v9OCDD+IAAADKKykpoZycHPr888/prbfeopdffpkefvhhp1cLwFIYZAYQQG5uLh07dozuvvtuSk5Opt/97neo4AKA8jIzM+m7776jW265RXxpnz59Ov361792erUALBXjwuR3AAAAxsyDy/N515/jG0A36KIAAAAAAFpBwAUAAAAAraCLAgAAAABoBRVcAAAAANAKAi4AAAAAaAUBFwAAAAC0goALAAAAAFpBwAUAAAAArSDgAgAAAIBWEHABAAAAQCsIuAAAAABAOvl/3uOerdLw4KIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Look at the contours of the (2,2,0) mode using teuk_all_amps\n", "plt.figure(figsize=(8, 4))\n", "plt.subplot(121)\n", "cb = plt.contourf(\n", " u_grid.reshape(uv.size, wv.size),\n", " w_grid.reshape(uv.size, wv.size),\n", " np.abs(teuk_all_amps[:, :, kerr_amp_spline.special_index_map[(2, 2, 0)]]),\n", ")\n", "plt.xlabel(\"u\")\n", "plt.ylabel(\"w\")\n", "plt.subplot(122)\n", "cb = plt.contourf(\n", " p_grid.reshape(uv.size, wv.size),\n", " e_grid.reshape(uv.size, wv.size),\n", " np.abs(teuk_all_amps[:, :, kerr_amp_spline.special_index_map[(2, 2, 0)]]),\n", ")\n", "plt.colorbar(cb)\n", "plt.xlabel(\"p\")\n", "plt.ylabel(\"e\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:47:11.125182Z", "iopub.status.busy": "2026-07-11T10:47:11.125122Z", "iopub.status.idle": "2026-07-11T10:47:11.221261Z", "shell.execute_reply": "2026-07-11T10:47:11.220936Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Look at the contours of the (7,-3, 1) mode using teuk_specific_amps\n", "plt.figure(figsize=(8, 4))\n", "plt.subplot(121)\n", "cb = plt.contourf(\n", " u_grid.reshape(uv.size, wv.size),\n", " w_grid.reshape(uv.size, wv.size),\n", " np.abs(teuk_specific_amps[(7, -3, 1)].reshape(uv.size, wv.size)),\n", ")\n", "plt.xlabel(\"u\")\n", "plt.ylabel(\"w\")\n", "plt.subplot(122)\n", "cb = plt.contourf(\n", " p_grid.reshape(uv.size, wv.size),\n", " e_grid.reshape(uv.size, wv.size),\n", " np.abs(teuk_specific_amps[(7, -3, 1)].reshape(uv.size, wv.size)),\n", ")\n", "plt.colorbar(cb)\n", "plt.xlabel(\"p\")\n", "plt.ylabel(\"e\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ROMAN amplitude generation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ROMAN uses a reduced order model representing the mode amplitude space. It then trains a neural network on this reduced model. The neural network is evaluated and the resulting matrix is transformed from the reduced basis back to the full mode space. \n", "\n", "This approach for amplitude interpolation was the primary method used for the original Schwarzschild eccentric waveforms. It is retained for compatibility (both backwards and, perhaps, future). The interface is very similar to that of the spline interpolation classes." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:47:11.222544Z", "iopub.status.busy": "2026-07-11T10:47:11.222475Z", "iopub.status.idle": "2026-07-11T10:47:11.292233Z", "shell.execute_reply": "2026-07-11T10:47:11.291873Z" } }, "outputs": [], "source": [ "from few.amplitude.romannet import RomanAmplitude\n", "\n", "# initialize ROMAN class\n", "amp = RomanAmplitude(buffer_length=5000) # buffer_length creates memory buffers" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-07-11T10:47:11.293410Z", "iopub.status.busy": "2026-07-11T10:47:11.293342Z", "iopub.status.idle": "2026-07-11T10:47:13.292130Z", "shell.execute_reply": "2026-07-11T10:47:13.291709Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total trajectory points: 2500\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p = np.linspace(10.0, 14.0)\n", "e = np.linspace(0.1, 0.7)\n", "\n", "p_all, e_all = np.asarray([temp.ravel() for temp in np.meshgrid(p, e)])\n", "\n", "print(\"Total trajectory points:\", p_all.shape[0])\n", "teuk_modes = amp(0.0, p_all, e_all, np.ones_like(p_all)) # a, p, e, xI\n", "\n", "# look at the contours of the (2,2,0) mode\n", "cb = plt.contourf(\n", " p,\n", " e,\n", " np.abs(teuk_modes[:, amp.special_index_map[(2, 2, 0)]].reshape(len(p), len(e))),\n", ")\n", "plt.colorbar(cb)\n", "plt.xlabel(\"p\")\n", "plt.ylabel(\"e\")\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "few2.0rc1", "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.12.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0cf150824a0f48f99a6b1fe92e59a18b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0f679184972f45efae76052b67475e4e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_ceef80eb9d1746c6a21b4434204c6ec7", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading 'ZNAmps_l10_m10_n55_DS2Outer.h5'... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:03:21\n
\n", "text/plain": "Downloading 'ZNAmps_l10_m10_n55_DS2Outer.h5'... \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[33m0:03:21\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "3aeafb2372f544ec8ae3d5a57a3371dd": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_0cf150824a0f48f99a6b1fe92e59a18b", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading 'SchwarzschildEccentricInput.hdf5'... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\n
\n", "text/plain": "Downloading 'SchwarzschildEccentricInput.hdf5'... \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[33m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "a3f2318e559d4fc195be3f07380a6975": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ae4bfac370a04bb0ba8e150ff5a27819": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_a3f2318e559d4fc195be3f07380a6975", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading 'AmplitudeVectorNorm.dat'... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\n
\n", "text/plain": "Downloading 'AmplitudeVectorNorm.dat'... \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[33m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "ceef80eb9d1746c6a21b4434204c6ec7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 2 }