{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "8414ba1c-c56d-46e3-a099-d00044905eda", "metadata": {}, "source": [ "# Parallelized Cubic Spline Interpolation" ] }, { "cell_type": "markdown", "id": "8f1b4641", "metadata": {}, "source": [ "We recommend first working through Trajectory_tutorial.ipynb and Amplitude_tutorial.ipynb before reading this tutorial." ] }, { "attachments": {}, "cell_type": "markdown", "id": "1cf56b82-e6a1-405c-ba54-9a31decb1f64", "metadata": {}, "source": [ "A part of the Fast EMRI waveforms package is parallelized cubic spline interpolation. This generally means fitting and evaluating many splines in parallel with the same input x array. This is available for GPUs and CPUs (not parallelized for CPU). The user can perform this operation entirely in Python while leveraging [CuPy](https://cupy.dev/) for GPUs. However, the evaluation will not be as efficient as when it is implemented properly in a customized kernel. The spline class ([CubicSplineInterpolant](https://bhptoolkit.org/FastEMRIWaveforms/user/sum.html#few.summation.interpolatedmodesum.CubicSplineInterpolant)) can provide an 1D flattened array of all spline coefficients for use in a custom CUDA kernel. " ] }, { "cell_type": "code", "execution_count": 1, "id": "3c526d1a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import few\n", "\n", "# tune few configuration\n", "cfg_set = few.get_config_setter(reset=True)\n", "\n", "# Uncomment if you want to force CPU or GPU usage\n", "# Leave commented to let FEW automatically select the best available hardware\n", "# - To force CPU usage:\n", "# cfg_set.enable_backends(\"cpu\")\n", "# - To force GPU usage with CUDA 12.x\n", "# cfg_set.enable_backends(\"cuda12x\", \"cpu\")\n", "# - To force GPU usage with CUDA 11.x\n", "# cfg_set.enable_backends(\"cuda11x\", \"cpu\")\n", "\n", "cfg_set.set_log_level(\"info\");" ] }, { "cell_type": "code", "execution_count": 2, "id": "19ba8ad4", "metadata": {}, "outputs": [], "source": [ "from few.trajectory.inspiral import EMRIInspiral\n", "from few.trajectory.ode import SchwarzEccFlux\n", "from few.amplitude.romannet import RomanAmplitude\n", "\n", "traj = EMRIInspiral(func=SchwarzEccFlux)\n", "amp = RomanAmplitude()\n", "\n", "# parameters\n", "m1 = 1e5\n", "m2 = 1e1\n", "a = 0.0 # Schwarzschild as we are using SchwarzEccFlux here\n", "p0 = 10.0\n", "e0 = 0.7\n", "xI = 1.0 # +1 for prograde, -1 for retrograde inspirals\n", "\n", "# get trajectory\n", "t, p, e, x, Phi_phi, Phi_theta, Phi_r = traj(m1, m2, a, p0, e0, xI)\n", "\n", "# The shape is (nb of data points in parameter space, mode values)\n", "teuk_modes = amp(a, p, e, x)" ] }, { "cell_type": "code", "execution_count": 4, "id": "18b9882f-3e6d-4ca2-8730-c034ae96e649", "metadata": {}, "outputs": [], "source": [ "from few.summation.interpolatedmodesum import CubicSplineInterpolant\n", "\n", "# Let's take the amplitudes from the last step and spline those.\n", "# For the argument of CubicSplineInterpolant, the shape of the input has to be switched.\n", "# We will split real and imaginary components\n", "\n", "# First argument will be the real, then imaginary mode values, and second argument the data points.\n", "interp_in = np.zeros((teuk_modes.shape[1] * 2, teuk_modes.shape[0]))\n", "\n", "interp_in[: teuk_modes.shape[1], :] = teuk_modes.T.real\n", "interp_in[teuk_modes.shape[1] :, :] = teuk_modes.T.imag\n", "\n", "spline_of_interp_in = CubicSplineInterpolant(t, interp_in)" ] }, { "cell_type": "code", "execution_count": 5, "id": "04ebee73-84eb-4e73-945a-8d59eef9795e", "metadata": {}, "outputs": [ { "data": { "image/png": "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qAwVeFy7AnM0K2BrbR7gfPXVV5gzZw4WLlyInTt3onfv3hg7dizy8/PPe/y2bdtwxx13YPr06di1axduvvlmWfbv39/sOBHQ5OTkNJZ//etfbX0pRERE1IJRVGY7yIBp8xq88cYbmDFjBqZNm4Zu3brhgw8+gKurKz799NPzHv/222/L4GXu3LlISEjAiy++iH79+uHdd99tdpxer0dwcHBj8fHxaetLISIiootQzsyDI1YTd+gAp66uDqmpqRgzZsxvT6hWy/tJSUnnfYzY3vR4QbT4nH38pk2bEBgYiLi4ONx///0oKiq6YD0MBgPKy8ubFSIiIrIus9JBWnAKCwvluhRBQUHNtov7ubm5532M2H6p40ULz+eff47169fjlVdewebNm3H99dc3WwOjqUWLFsHLy6uxREREWOX6iIiI6DfKmS4qxQ5acNrlKKpJkyY1/iySkHv16oXOnTvLVp3ExMRzjl+wYIHMA7IQLTgMcoiIiKzLfKahwR4CnDZtwfH395eLbeXl5TXbLu6LvJnzEdsv53ghJiZGPtfx48fPu1/k63h6ejYrREREZF2K2ShvxTBxW2vTGuh0OvTv3192JTXNsBb3hw4det7HiO1NjxfWrVt3weOF06dPyxyckJAQK9aeiIiILkedexhuNTyHB1VPwuG7qETX0JQpUzBgwAAMGjQIb731FqqqquSoKuGee+5BWFiYzJMRHn74YYwaNQqvv/46JkyYgOXLl2PHjh346KOP5P7Kyko8//zzmDhxomzVOXHiBObNm4cuXbrIZGQiIiKyDbPGGTuVrvBV23YdqisS4Nx+++0oKCjAs88+KxOF+/Tpg7Vr1zYmEp86dUqOrLIYNmwYvvzySzz99NN48sknERsbi1WrVqFHjx5yv+jy2rt3L/7+97+jtLQUoaGhuO666+RwctEVRURERLZhWanB1ss0CCpFUX5bOKKDEEnGYjRVWVkZ83GIiIis5OjJk/jqk9ehcvbA08+8DFt+f7fLUVRERERkf9QV2XhG+0/km3wBvGzbutj02YmIiMhxmDvIRH9ERETU8WYyVhx9HhwiIiLqeGtRKY4+Dw4RERF1HMqZYVQOv9gmERERdSCKZakG24cXtq8BEREROdRim2Y76KLiMHEiIiKyigqvOEyuWwB/by+8DdtigENERERWYdR5Yqu5J+K0HrA127chERERkUMt1aCyfY4xW3CIiIjIOrSVWbhTsx4u9WK9yatgS2zBISIiIqtwKT2Kl7Sf4I7ar2BrDHCIiIjIOs7MZGxWaWBrDHCIiIjIKswmyzw4tk/CYYBDREREVqE0rkVl+/DC9jUgIiIix6CcCXDsYBgVAxwiIiKyDstim3YQXti+BkREROQQFEWxm9XEOQ8OERERWUWRb1/MqJuDML9QdIdtMcAhIiIiq6h2DsQ68wAMd/GDrdm+DYmIiIgcgvlMF5WaScZERETkKFwqTuFm9RZ0M+y1dVUY4BAREZF1+BXtwFu69zC+4mvYGgMcIiIisg4zJ/ojIiIiR53JWGX78ML2NSAiIiKHoHCpBiIiInI4SkOAA7bgEBERkaMt1QAOEyciIiJHodhRDg5nMiYiIiKryPQZii/rHkRnnzj0h23ZPsQiIiIih1Di2gnfmYcjw623ravCAIeIiIisw9ywUgNUzMEhIiIiR+FemY6x6u2IMBy1dVUY4BAREZF1xBRswIe6NzG8eCVsjQEOERERWXkenA7SRbV06VJERUXB2dkZgwcPRkpKykWPX7FiBeLj4+XxPXv2xI8//thsv6IoePbZZxESEgIXFxeMGTMGx44da+OrICIiootSLPPgaODwAc5XX32FOXPmYOHChdi5cyd69+6NsWPHIj8//7zHb9u2DXfccQemT5+OXbt24eabb5Zl//79jce8+uqrWLJkCT744AMkJyfDzc1NnrO2tratL4eIiIguxI7mwVEpojmkDYkWm4EDB+Ldd9+V981mMyIiIvDQQw9h/vz55xx/++23o6qqCqtXr27cNmTIEPTp00cGNKK6oaGheOyxx/D444/L/WVlZQgKCsJnn32GSZMmXbJO5eXl8PLyko/z9PS06vUSERF1VNv+9iiGZX2KlICJGPTgp1Y//+V8f7dpiFVXV4fU1FTZhdT4hGq1vJ+UlHTex4jtTY8XROuM5fi0tDTk5uY2O0ZcrAikLnROg8EgX5SmhYiIiKzL0maiOHoXVWFhIUwmk2xdaUrcF0HK+YjtFzvecns551y0aJEMgixFtCARERGRdanO5OCo7KCLyvY1uAIWLFggm7MsJTMz09ZVIiIicjiHvEdhfv2fcdgv0bEDHH9/f2g0GuTl5TXbLu4HBwef9zFi+8WOt9xezjn1er3sq2taiIiIyLpOuyZgueka5Hr2gkMHODqdDv3798f69esbt4kkY3F/6NCh532M2N70eGHdunWNx0dHR8tApukxIqdGjKa60DmJiIio7VmGLantYB6cNl9NXAwRnzJlCgYMGIBBgwbhrbfekqOkpk2bJvffc889CAsLk3kywsMPP4xRo0bh9ddfx4QJE7B8+XLs2LEDH330UeP6Fo888gj+8pe/IDY2VgY8zzzzjBxZJYaTExERkW34VqdhpHoffA3OAOLg0AGOGPZdUFAgJ+YTScBiuPfatWsbk4RPnTolR1ZZDBs2DF9++SWefvppPPnkkzKIWbVqFXr06NF4zLx582SQNHPmTJSWlmLEiBHynGJiQCIiIrKNgQXfYrbu30guuBdAomPPg2OPOA8OERGR9SW9MxVDi1YiJXIGBt272HHnwSEiIqKOQ2W2n5mMbV8DIiIichDmhhtHn+iPiIiIOuBEf2rbj6JigENERERWXWyTLThERETkOJQz45bsIAenzYeJExERUceQ4pGItUWB6Oc3yNZVYYBDRERE1nHQZQDWmMIR490dtmb7NiQiIiJyCOYzXVRi1QFbY4BDREREVhFYm44BqsNwqyuErbGLioiIiKzi5pJleFG/BTvyxWiq/rAltuAQERGRVag4TJyIiIgcj1n+q7KDYeK2rwERERE5BJUlyVht+/DC9jUgIiIih1qqAWp2UREREZGD5eCo2IJDREREjkIFyzw4tm/B4TBxIiIisor1ztfhv1WxGOodD1tjgENERERWsVk/CrtNvdHHJ87WVWEXFREREVmHcmYUldr2KzWwBYeIiIisI9iYCaOqGFqj6KIKgi0xwCEiIiKreKTiTSToj2B/gS+AzrAldlERERGRVagbZzK2/SgqBjhERERk3WHinAeHiIiIHG+iP42tq8IAh4iIiKzcRcUWHCIiInK0Fhw1W3CIiIjI0XJwYActOBwmTkRERFaxSnMdtLWFSPQIh60xwCEiIiKr+Eo9AbnGWozy7ARbs30bEhERETkEs2WpBjuILtiCQ0RERFYRYs6Bq8oAjckAW2OAQ0RERFbxgek5hOgLkVEaD0QEwpbsoBGJiIiIHGkeHDWHiRMREZGjUHOiPyIiInI0astEfxrbZ8AwwCEiIiKr0DSuJm778KJNa1BcXIzJkyfD09MT3t7emD59OiorKy/6mNraWjz44IPw8/ODu7s7Jk6c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kUplZWXjMf/3f/+nREREKOvXr1d27NihDBkyRBk2bFjjfqPRqPTo0UMZM2aMsmvXLvm++vv7KwsWLGg85uTJk4qrq6syZ84c+Rq/88478jVfu3btZf3uXKou7dF3332n/PDDD8rRo0eVI0eOKE8++aT8/In3RODrf+WkpKQoUVFRSq9evZSHH364cTvfg/aNAY6VDBo0SHnwwQcb75tMJiU0NFRZtGiRTetl784OcMxmsxIcHKy89tprjdtKS0sVvV4vgxRB/JEQj9u+fXvjMWvWrFFUKpWSlZUl77/33nuKj4+PYjAYGo954oknlLi4uMb7t912mzJhwoRm9Rk8eLBy3333tbgujiI/P1++pps3b268TvFlu2LFisZjDh06JI9JSkqS98Ufc7VareTm5jYe8/777yuenp6Nr/u8efOU7t27N3uu22+/XQZYLf3daUldHIX4zH788cd8/a+giooKJTY2Vlm3bp0yatSoxgCH70H7xy4qK6irq0Nqaqrsvmi63pW4n5SUZNO6tTdpaWnIzc1t9lqKdUdEk63ltRS3oltqwIABjceI48Vrnpyc3HjMVVddBZ1O13jM2LFjZTdMSUlJ4zFNn8dyjOV5WlIXR1FWViZvfX195a34PNfX1ze7dtGVFxkZ2ex9EN16QUFBzV4/scDggQMHWvQat+R3pyV1ae9MJhOWL1+Oqqoq2VXF1//KEd0+oovp7NeJ70H71yEX27S2wsJC+Qeq6YdcEPcPHz5ss3q1RyKgEM73Wlr2iVvR192Uk5OT/HJuekx0dPQ557Ds8/HxkbeXep5L1cURmM1mmXcwfPhw9OjRQ24T1yeCQxFIXuz1Od9rY9l3sWPEF0BNTY0MNi/1u9OSurRX+/btkwGNyK8QeRUrV65Et27dsHv3br7+V4AIKnfu3Int27efs4+/A+0fAxyiDk78D3b//v3YsmWLravS4cTFxclgRrSgffPNN5gyZQo2b95s62p1CJmZmXj44Yexbt06mdhLjoddVFbg7+8PjUZzTka7uB8cHGyzerVHltfrYq+luM3Pz2+2X4xaECOrmh5zvnM0fY4LHdN0/6Xq0t7NmjULq1evxsaNGxEeHt64XVyfaDovLS296Ovze19jMWpIjEprye9OS+rSXon/lYtRNf3795cj23r37o23336br/8VILp9xN8RMbpJtACLIoLLJUuWyJ9F6wjfg/aNAY6V/kiJP1Dr169v1uwv7ovmZ2o50a0kfmGbvpaiKVfk1lheS3ErftHFHyiLDRs2yNdc5MdYjhHD0UW/tYX4n5r4H7PonrIc0/R5LMdYnqcldWmvRH63CG5El4h47c7uzhOfZ61W2+zaRf6SGBLb9H0QXSxNg03x+ok/3KKbpSWvcUt+d1pSF0chrt1gMPD1vwISExPl6yda0CxF5PWJ6ScsP/M9aOdsneXsKMQwPzG65rPPPpOjfGbOnCmH+TXNrqffRi2IIZWiiI/gG2+8IX/OyMhoHJotXrv//Oc/yt69e5WbbrrpvMPE+/btqyQnJytbtmyRoyCaDhMXow7EMPG7775bDrsV748Yqnn2MHEnJydl8eLFckTCwoULzztM/FJ1aY/uv/9+Ofx906ZNSk5OTmOprq5uNixVDB3fsGGDHJY6dOhQWc4eInvdddfJoeZi2GtAQMB5h8jOnTtXvsZLly497xDZS/3uXKou7dH8+fPlqLW0tDT52RL3xUjAn376Se7n63/lNR1FJfA9aN8Y4FiRmN9AfADFfAZi2J+Yo4XOtXHjRhnYnF2mTJnSODz7mWeekQGK+KVPTEyU84Q0VVRUJAMad3d3OSRz2rRpMnBqSsxbM2LECHmOsLAwGayc7euvv1a6du0q3zMxlFPMS9JUS+rSHp3v9RdFzI1jIYK4Bx54QA5dFn+gb7nlFhkENZWenq5cf/31co4hMf/HY489ptTX15/zfvfp00e+xjExMc2eo6W/Oy2pS3tz7733Kp06dZLXLL4UxWfLEtwIfP1tH+DwPWjfVOIfW7ciEREREVkTc3CIiIjI4TDAISIiIofDAIeIiIgcDgMcIiIicjgMcIiIiMjhMMAhIiIih8MAh4iIiBwOAxwiIiJyOAxwiIiIyOEwwCEiIiKHwwCHiIiIHA4DHCIiIoKj+X/+N21HAyF4mwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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CgoKahxERERkfxUaPYyKHhZn3U08LS0NISEhNc7p9XoEBATI6853G4PBIINRdaGhobbbiLAyfPhwvPXWWzL41MW0adPg6+trO6Kjo//x8yIiIqLzG+bxCRKMX6EkoCUaVMCZNGmSHNR7oePAgQP1U1sAkydPRsuWLfGvf/3rkm4jur+sR0pKSr3Vj4iIqDHTaRroSsYTJ07Efffdd8EycXFxCAsLQ0ZGRo3zFRUVcmaVuK424nx5ebkcW1O9FUfMorLeZuXKldi9ezd++OEHeVmp2usiKCgIzz33HF566aVz7tfV1VUeREREVL+q8g0sKiecSw44wcHB8riYHj16yKAixtWIwcLWcCIW/hGDjmsjyrm4uGDFihVyerhw8OBBJCcny/sTfvzxR5SWltpus3nzZtx///34888/0ayZektCExEREfBE2Ry4umTCkDcNQKDzbdUgupEGDhyIBx54AB9++KEcPDx27FjcddddiIiIkGVOnz6Nfv36ycHCXbt2leNjxNTvCRMmyLE6Yv2cxx57TIab7t27y9ucHWKysrJsj3f22B0iIiK6sjqZdyJCdwa7jOquT1eve1F9++23MtSIECNmO4lWmZkzZ9quF6FHtNCUlPy9X8W7775rKysGFA8YMAAffPBBfVaTiIiI7L0OjsrTxDWKdRBLIyKmiYvWIjHgWLQSERERkX2kvNwa0ZZT2N7vW3S86kao9fnNvaiIiIjIbhRNVbRQeZAxAw4RERHVw1YNTrrQHxERETXeFhzFWfeiIiIiosa8m7hF1Xow4BAREZHdPBs4A83KvkZWSE+oiQGHiIiI7EbRusAMnW0sjloYcIiIiMhutLa9qBrYVg1ERERE53N70TcY7nIEPjnjAVTuXKAGtuAQERGR3bQp24abdRvgWpIGNTHgEBERkf1Yp4mrvFUDAw4RERHZfZo4F/ojIiIi59uqQWELDhERETndXlQWVevBgENERER2ZO2iYsAhIiIiJ6GwBYeIiIiczacRL6Jt2Sc4FjZQ1Xow4BAREZHdmHSeKIQHKjTqriXMgENERER2o63agsps4VYNRERE5CR65/0XPfTb4ZUzAkCcavVgCw4RERHZTULxVtyl/wO+xcegJgYcIiIisvssKk4TJyIiIieilf9qLNyqgYiIiJyEorVu1cCAQ0RERE5C0egqv+FCf0REROR0AUdhCw4RERE53W7iZlXrwYBDREREdvN71Fh0LZuNrWHDoCYGHCIiIrKbchdfZMAfRq0H1MSAQ0RERHbfqsHCrRqIiIjIWSTk/YkX9CvgldMXQEvV6sGAQ0RERHYTXbQT3fTLsL4wCGpiFxURERHZT9U0cY1SATUx4BAREZHdp4lruBcVEREROQ1t5egXjcrr4HAMDhEREdlNil9XrDlWgGDvbugG9TDgEBERkd1Etu+HE17tERnlBzUx4BAREZHd9GweJA+1cQwOEREROR0GHCIiInI6DDhERETkdBhwiIiIyOkw4BAREZHTYcAhIiIip1NvAScnJwcjRoyAj48P/Pz8MHr0aBQVFV3wNmVlZXj00UcRGBgILy8v3HbbbUhPTz+n3BdffIF27drBzc0NISEh8jZERERE9R5wRLjZu3cvli9fjsWLF2PNmjUYM2bMBW/zxBNPYNGiRViwYAFWr16N1NRUDB06tEaZd955B8899xwmTZok7//333/HgAED6utpEBERUQOkURRFsfed7t+/H61atcLmzZvRuXNneW7p0qUYNGgQTp06hYiIiHNuk5+fj+DgYMydOxe33367PHfgwAG0bNkSGzZsQPfu3ZGbm4vIyEgZgvr16/eP61dQUABfX1/5mKKFiYiIiBzfpXx+10sLjggkolvKGm6E/v37Q6vVYuPGjbXeZuvWrTCZTLKcVWJiImJiYuT9CaI1yGKx4PTp0zL4REVFYdiwYUhJSblgfYxGo3xRqh9ERETkvOol4KSlpcmxMdXp9XoEBATI6853G4PBIINRdaGhobbbHDt2TAac1157De+99x5++OEHOdbnuuuuQ3l5+XnrM23aNJn4rEd0dLRdnicRERE5QcAR4140Gs0FD9GtVF9EuBGtPDNnzpTjbkS31XfffYfDhw9j1apV573d5MmTZXOW9bhYiw8RERE1bJe02ebEiRNx3333XbBMXFwcwsLCkJGRUeN8RUWFbG0R19VGnBetMHl5eTVaccQsKuttwsPD5VcxvsdKjNsJCgpCcnLyeevk6uoqDyIiImocLingiDAhjovp0aOHDCpiXE1SUpI8t3LlStkC061bt1pvI8q5uLhgxYoVcnq4cPDgQRlcxP0JvXr1sp0X428EEZqysrIQGxtb5+dhHVfNsThEREQNh/Vzu07zo5R6MnDgQKVjx47Kxo0blbVr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Get new values\n", "t_new = np.linspace(t[0], t[-1], 1000)\n", "\n", "# Notice the output has the same shape as the inital input to the spline.\n", "new_teuk_modes = spline_of_interp_in(t_new)\n", "\n", "# To get back the original shape (with now data points at t_new), add the real and imaginary values back together and transpose\n", "new_teuk_modes = new_teuk_modes[:teuk_modes.shape[1],:] + 1j * new_teuk_modes[teuk_modes.shape[1]:,:]; new_teuk_modes = new_teuk_modes.T\n", "\n", "# Check the original and interpolated values for the (2,2,0) mode\n", "ind = amp.special_index_map[(2, 2, 0)]\n", "\n", "plt.plot(t_new, new_teuk_modes[:,ind].real, label=\"interpolated\")\n", "plt.plot(t, teuk_modes[:, ind].real, \"--\", label=\"original\")\n", "plt.legend()\n", "plt.show()\n", "\n", "plt.plot(t_new, new_teuk_modes[:,ind].imag, label=\"interpolated\")\n", "plt.plot(t, teuk_modes[:, ind].imag, \"--\", label=\"original\")\n", "plt.legend()\n", "plt.show()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "88352b10-edac-456c-a390-111716f38fee", "metadata": {}, "source": [ "To get the array of interp coefficients for CUDA implementations, do the following. The underlying shape of the array is (4, length, ninterps). It is flattened though for entry into GPU kernel. " ] }, { "cell_type": "code", "execution_count": 6, "id": "cc04fd9e-60ee-4d0f-b90b-e45d08b2cb26", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 6.23856751e-06, 3.56609646e-06, -1.26237401e-06, ...,\n", " 1.24433368e-11, 1.36363437e-11, 7.04123293e-12])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spline_of_interp_in.interp_array" ] }, { "cell_type": "markdown", "id": "2f1b29b9", "metadata": {}, "source": [ "For convenience, the coefficients array can be returned to its original form via the `reshape_shape` attribute:\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "20c13975", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7686, 44)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spline_of_interp_in.interp_array.reshape(spline_of_interp_in.reshape_shape)[0].T.shape" ] }, { "cell_type": "code", "execution_count": 8, "id": "2a6c7f0c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check\n", "interp_in_recovered = spline_of_interp_in.interp_array.reshape(spline_of_interp_in.reshape_shape)[0].T\n", "np.allclose(\n", " interp_in_recovered, \n", " interp_in\n", " )" ] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 5 }