{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "*In this notebook we will prove how using **numba** we can achieve almost native performance using solely the Python programming language. We will implement an algorithm to solve Kepler's problem running a standard Newton-Raphson iteration on the Kepler's equation, hence following the approach of Bate & Mueller and Vallado. We will run benchmarks against the Vallado Fortran version, available on the Internet and wrapped in poliastro 0.2.*\n", "\n", "**Author**: Juan Luis Cano Rodríguez (LinkedIn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
For executing this notebook you will need to use the branch `idea-numba` of the poliastro repository: https://github.com/Pybonacci/poliastro/tree/idea-numba
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fortran version" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "import numpy as np\n", "from astropy import units as u\n", "\n", "from poliastro.bodies import Earth\n", "from poliastro.twobody import State, propagation" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "k = Earth.k\n", "r0 = [1131.340, -2282.343, 6672.423] * u.km\n", "v0 = [-5.64305, 4.30333, 2.42879] * u.km / u.s\n", "tof = 40 * u.min" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[1131.34,~-2282.343,~6672.423] \\; \\mathrm{km}$" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r0" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[-5.64305,~4.30333,~2.42879] \\; \\mathrm{\\frac{km}{s}}$" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v0" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$398600 \\; \\mathrm{\\frac{km^{3}}{s^{2}}}$" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$40 \\; \\mathrm{min}$" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tof" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "r, v = propagation.kepler(k.to(u.km**3 / u.s**2).value,\n", " r0.to(u.km).value,\n", " v0.to(u.km / u.s).value,\n", " tof.to(u.s).value)\n", "r *= u.km\n", "v *= u.km / u.s" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[-4219.7762,~4363.0457,~-3958.7497] \\; \\mathrm{km}$" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[3.6898377,~-1.9167093,~-6.1125185] \\; \\mathrm{\\frac{km}{s}}$" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Prepare the inputs to measure performance:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "k_ = k.to(u.km**3 / u.s**2).value\n", "r0_ = r0.to(u.km).value\n", "v0_ = v0.to(u.km / u.s).value\n", "tof_ = tof.to(u.s).value" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 9.87 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 10.5 µs per loop\n" ] } ], "source": [ "%timeit propagation.kepler(k_, r0_, v0_, tof_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pure Python version\n", "\n", "Now we write our own implementation in pure Python. We will use numbified $c_2$ and $c_3$ functions for the moment." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from poliastro.stumpff import c2, c3\n", "\n", "def kepler_py(k, r0, v0, tof):\n", " # Prepare input\n", " r0 = np.asarray(r0).astype(np.float)\n", " v0 = np.asarray(v0).astype(np.float)\n", " tof = float(tof)\n", " assert r0.shape == (3,)\n", " assert v0.shape == (3,)\n", "\n", " # Cache some results\n", " dot_r0v0 = np.dot(r0, v0)\n", " norm_r0 = np.linalg.norm(r0)\n", " sqrt_mu = np.sqrt(k)\n", " alpha = -np.dot(v0, v0) / k + 2 / norm_r0\n", "\n", " # Newton-Raphson iteration on the Kepler equation\n", " # Conservative initial guess\n", " xi = sqrt_mu * tof / norm_r0\n", " numiter = 50\n", " count = 0\n", " while count < numiter:\n", " psi = xi**2 * alpha\n", " norm_r = xi**2 * c2(psi) + dot_r0v0 / sqrt_mu * xi * (1 - psi * c3(psi)) + norm_r0 * (1 - psi * c2(psi))\n", " xi_new = xi + (sqrt_mu * tof - xi**3 * c3(psi) - dot_r0v0 / sqrt_mu * xi**2 * c2(psi) -\n", " norm_r0 * xi * (1 - psi * c3(psi))) / norm_r\n", " err = np.abs((xi_new - xi) / xi_new)\n", " if err < 1e-10:\n", " break\n", " else:\n", " xi = xi_new\n", " count += 1\n", " else:\n", " print(\"No convergence\")\n", " return\n", "\n", " # Compute Lagrange coefficients\n", " f = 1 - xi**2 / norm_r0 * c2(psi)\n", " g = tof - xi**3 / sqrt_mu * c3(psi)\n", "\n", " gdot = 1 - xi**2 / norm_r * c2(psi)\n", " fdot = sqrt_mu / (norm_r * norm_r0) * xi * (psi * c3(psi) - 1)\n", "\n", " # Return position and velocity vectors\n", " r = f * r0 + g * v0\n", " v = fdot * r0 + gdot * v0\n", "\n", " assert np.abs(f * gdot - fdot * g - 1) < 1e-6\n", "\n", " return r, v" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "r_py, v_py = kepler_py(k_, r0_, v0_, tof_)\n", "r_py *= u.km\n", "v_py *= u.km / u.s" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.testing.assert_array_almost_equal(r_py.value, r.value)\n", "np.testing.assert_array_almost_equal(v_py.value, v.value)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[-4219.7762,~4363.0457,~-3958.7497] \\; \\mathrm{km}$" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_py" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 7.80 times longer than the fastest. This could mean that an intermediate result is being cached \n", "10000 loops, best of 3: 69.9 µs per loop\n" ] } ], "source": [ "%timeit kepler_py(k_, r0_, v0_, tof_)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 11 µs per loop\n" ] } ], "source": [ "%timeit propagation.kepler(k_, r0_, v0_, tof_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our pure Python, non optimized version **is not *that* bad**! It stays in the same order of magnitude as the Fortran version for elliptic orbits at least. Let us see how can we improve the results." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%load_ext line_profiler" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%lprun -f kepler_py kepler_py(k_, r0_, v0_, tof_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to line_profiler, 13 % of the time is spent in the two `asarray` calls and 14.5 % in the single `norm` computation." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 13.55 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 7.96 µs per loop\n" ] } ], "source": [ "%timeit np.linalg.norm(r0_)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 14.04 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 2.23 µs per loop\n" ] } ], "source": [ "%timeit np.sqrt(np.dot(r0_, r0_))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can try and replace `linalg.norm` with the square root of the dot product. We can go further and assume the input are float arrays to save some more microseconds." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def kepler_py2(k, r0, v0, tof):\n", " # Algorithm parameters\n", " rtol = 1e-10\n", " numiter = 50\n", " \n", " # Cache some results\n", " dot_r0v0 = np.dot(r0, v0)\n", " norm_r0 = np.sqrt(np.dot(r0, r0))\n", " sqrt_mu = np.sqrt(k)\n", " alpha = -np.dot(v0, v0) / k + 2 / norm_r0\n", "\n", " # Newton-Raphson iteration on the Kepler equation\n", " # Conservative initial guess\n", " xi = sqrt_mu * tof / norm_r0\n", " count = 0\n", " while count < numiter:\n", " psi = xi * xi * alpha\n", " c2_psi = c2(psi)\n", " c3_psi = c3(psi)\n", " norm_r = xi * xi * c2_psi + dot_r0v0 / sqrt_mu * xi * (1 - psi * c3_psi) + norm_r0 * (1 - psi * c2_psi)\n", " xi_new = xi + (sqrt_mu * tof - xi * xi * xi * c3_psi - dot_r0v0 / sqrt_mu * xi * xi * c2_psi -\n", " norm_r0 * xi * (1 - psi * c3_psi)) / norm_r\n", " if abs((xi_new - xi) / xi_new) < rtol:\n", " break\n", " else:\n", " xi = xi_new\n", " count += 1\n", " else:\n", " raise RuntimeError(\"Convergence could not be achieved under \"\n", " \"%d iterations\" % numiter)\n", "\n", " # Compute Lagrange coefficients\n", " f = 1 - xi**2 / norm_r0 * c2_psi\n", " g = tof - xi**3 / sqrt_mu * c3_psi\n", "\n", " gdot = 1 - xi**2 / norm_r * c2_psi\n", " fdot = sqrt_mu / (norm_r * norm_r0) * xi * (psi * c3_psi - 1)\n", "\n", " # Return position and velocity vectors\n", " r = f * r0 + g * v0\n", " v = fdot * r0 + gdot * v0\n", "\n", " assert np.abs(f * gdot - fdot * g - 1) < rtol\n", "\n", " return r, v" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "r_py2, v_py2 = kepler_py2(k_, r0_, v0_, tof_)\n", "r_py2 *= u.km\n", "v_py2 *= u.km / u.s" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.testing.assert_array_almost_equal(r_py2.value, r.value)\n", "np.testing.assert_array_almost_equal(v_py2.value, v.value)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000 loops, best of 3: 36.1 µs per loop\n" ] } ], "source": [ "%timeit kepler_py2(k_, r0_, v0_, tof_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimized Python + numba version\n", "\n", "We cut the time in half! We still have another bullet: numba. This will require some work though, because we will have to provide some work arrays from outside to use the functions `np.abs` and `np.dot`, and in particular the latest one is not available. On the other hand, we will have to provide a better initial guess to achieve reasonable speed for hyperbolic orbits too." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numba\n", "\n", "def kepler_numba(k, r0, v0, tof, numiter=35, rtol=1e-10):\n", " \"\"\"Propagates Keplerian orbit.\n", "\n", " Parameters\n", " ----------\n", " k : float\n", " Gravitational constant of main attractor (km^3 / s^2).\n", " r0 : array\n", " Initial position (km).\n", " v0 : array\n", " Initial velocity (km).\n", " tof : float\n", " Time of flight (s).\n", " numiter : int, optional\n", " Maximum number of iterations, default to 35.\n", " rtol : float, optional\n", " Maximum relative error permitted, default to 1e-10.\n", "\n", " Raises\n", " ------\n", " RuntimeError\n", " If the algorithm didn't converge.\n", "\n", " Notes\n", " -----\n", " This algorithm is based on Vallado implementation, and does basic Newton\n", " iteration on the Kepler equation written using universal variables. Battin\n", " claims his algorithm uses the same amount of memory but is between 40 %\n", " and 85 % faster.\n", "\n", " \"\"\"\n", " # Compute Lagrange coefficients\n", " try:\n", " f, g, fdot, gdot = _kepler(k, r0, v0, tof, numiter, rtol)\n", " except RuntimeError:\n", " raise RuntimeError(\"Convergence could not be achieved under \"\n", " \"%d iterations\" % numiter)\n", "\n", " assert np.abs(f * gdot - fdot * g - 1) < 1e-5 # Fixed tolerance\n", "\n", " # Return position and velocity vectors\n", " r = f * r0 + g * v0\n", " v = fdot * r0 + gdot * v0\n", "\n", " return r, v\n", "\n", "@numba.njit('f8(f8[:], f8[:])')\n", "def dot(u, v):\n", " dp = 0.0\n", " for ii in range(u.shape[0]):\n", " dp += u[ii] * v[ii]\n", " return dp\n", "\n", "@numba.njit\n", "def _kepler(k, r0, v0, tof, numiter, rtol):\n", " # Cache some results\n", " dot_r0v0 = dot(r0, v0)\n", " norm_r0 = dot(r0, r0) ** .5\n", " sqrt_mu = k**.5\n", " alpha = -dot(v0, v0) / k + 2 / norm_r0\n", "\n", " # First guess\n", " if alpha > 0:\n", " # Elliptic orbit\n", " xi_new = sqrt_mu * tof * alpha\n", " elif alpha < 0:\n", " # Hyperbolic orbit\n", " xi_new = (np.sign(tof) * (-1 / alpha)**.5 *\n", " np.log((-2 * k * alpha * tof) / (dot_r0v0 + np.sign(tof) * np.sqrt(-k / alpha) * (1 - norm_r0 * alpha))))\n", "\n", " # Newton-Raphson iteration on the Kepler equation\n", " count = 0\n", " while count < numiter:\n", " xi = xi_new\n", " psi = xi * xi * alpha\n", " c2_psi = c2(psi)\n", " c3_psi = c3(psi)\n", " norm_r = xi * xi * c2_psi + dot_r0v0 / sqrt_mu * xi * (1 - psi * c3_psi) + norm_r0 * (1 - psi * c2_psi)\n", " xi_new = xi + (sqrt_mu * tof - xi * xi * xi * c3_psi - dot_r0v0 / sqrt_mu * xi * xi * c2_psi -\n", " norm_r0 * xi * (1 - psi * c3_psi)) / norm_r\n", " if abs((xi_new - xi) / xi_new) < rtol:\n", " break\n", " else:\n", " count += 1\n", " else:\n", " raise RuntimeError\n", "\n", " # Compute Lagrange coefficients\n", " f = 1 - xi**2 / norm_r0 * c2_psi\n", " g = tof - xi**3 / sqrt_mu * c3_psi\n", "\n", " gdot = 1 - xi**2 / norm_r * c2_psi\n", " fdot = sqrt_mu / (norm_r * norm_r0) * xi * (psi * c3_psi - 1)\n", "\n", " return f, g, fdot, gdot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we provide a Python version of the final function for benchmarking too:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def kepler_python_final(k, r0, v0, tof, numiter=35, rtol=1e-10):\n", " # Cache some results\n", " dot_r0v0 = np.dot(r0, v0)\n", " norm_r0 = np.dot(r0, r0) ** .5\n", " sqrt_mu = k**.5\n", " alpha = -np.dot(v0, v0) / k + 2 / norm_r0\n", "\n", " # First guess\n", " if alpha > 0:\n", " # Elliptic orbit\n", " xi_new = sqrt_mu * tof * alpha\n", " elif alpha < 0:\n", " # Hyperbolic orbit\n", " xi_new = (np.sign(tof) * (-1 / alpha)**.5 *\n", " np.log((-2 * k * alpha * tof) / (dot_r0v0 + np.sign(tof) * np.sqrt(-k / alpha) * (1 - norm_r0 * alpha))))\n", "\n", " # Newton-Raphson iteration on the Kepler equation\n", " count = 0\n", " while count < numiter:\n", " xi = xi_new\n", " psi = xi * xi * alpha\n", " c2_psi = c2(psi)\n", " c3_psi = c3(psi)\n", " norm_r = xi * xi * c2_psi + dot_r0v0 / sqrt_mu * xi * (1 - psi * c3_psi) + norm_r0 * (1 - psi * c2_psi)\n", " xi_new = xi + (sqrt_mu * tof - xi * xi * xi * c3_psi - dot_r0v0 / sqrt_mu * xi * xi * c2_psi -\n", " norm_r0 * xi * (1 - psi * c3_psi)) / norm_r\n", " if abs((xi_new - xi) / xi_new) < rtol:\n", " break\n", " else:\n", " count += 1\n", " else:\n", " raise RuntimeError(\"Convergence could not be achieved under \"\n", " \"%d iterations\" % numiter)\n", "\n", " # Compute Lagrange coefficients\n", " f = 1 - xi**2 / norm_r0 * c2_psi\n", " g = tof - xi**3 / sqrt_mu * c3_psi\n", "\n", " gdot = 1 - xi**2 / norm_r * c2_psi\n", " fdot = sqrt_mu / (norm_r * norm_r0) * xi * (psi * c3_psi - 1)\n", "\n", " assert np.abs(f * gdot - fdot * g - 1) < 1e-5 # Fixed tolerance\n", "\n", " # Return position and velocity vectors\n", " r = f * r0 + g * v0\n", " v = fdot * r0 + gdot * v0\n", "\n", " return r, v" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "r_numba, v_numba = kepler_numba(k_, r0_, v0_, tof_)\n", "r_numba *= u.km\n", "v_numba *= u.km / u.s" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.testing.assert_array_almost_equal(r_numba.value, r.value)\n", "np.testing.assert_array_almost_equal(v_numba.value, v.value)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[-4219.7762,~4363.0457,~-3958.7497] \\; \\mathrm{km}$" ], "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_numba" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$[3.6898377,~-1.9167093,~-6.1125185] \\; \\mathrm{\\frac{km}{s}}$" ], "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v_numba" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 11.71 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 11.9 µs per loop\n" ] } ], "source": [ "%timeit kepler_numba(k_, r0_, v0_, tof_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**We achieved a 0.9x factor with the pure Python version**: the results are promising!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Benchmark\n", "\n", "We will cover a range of values of eccentricity to compare both versions, plotting computation time vs time of flight." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from poliastro.twobody import State\n", "from poliastro.plotting import plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Elliptic orbit" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2400. 5531.82615614 8663.65231228 11795.47846841\n", " 14927.30462455 18059.13078069 21190.95693683 24322.78309297]\n" ] }, { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "B6y0fW8N2rdRXWNfU6srLM0wzi3AO+1xPwPum2Kco5jXaAloanG2c34HfN5uh6YY5zWew4PUgPA3\n", "wIuLeMzBY99DjamcGVzDA9Qg9UfUCiUfArf81+s6h5iXWZ8FN7k4qQ/3U8AXVG/HzRON8wXqy9sK\n", "lYC2LCJO/4gqSeri/zoLTpI0cSYgSVIXJiBJUhcmIElSFyYgSVIXJiBJUhcmIElSFyYgSVIXJiCp\n", "k1b06+MoSxGxssFzHY8I39PaNHyxSv08BXyQM1iOJDMvAZ8Aj2w4KmlBTEBSP08A740bI2JHqx+z\n", "r/0yOtdqypyPiHcj4oGIONFKJe8fHPp+O6e0KWzacgzSlEXE9VQp7x1Ukbk7gDcyc22wf3dmfjU6\n", "bhdV0feZzFxpheFuBx4DvqQWtnw8M++OiIepRSEPtsPPUKUKpE3BX0DSfOyh6uqsUe+zw8APg/3b\n", "gYujY26lymA/mZnD8aALmbnauupWqRWKoZbQX7p6p9YNd11E3DjD5yHNjQlImoPMPN0Swl3Ascw8\n", "lpm/ju42riz7M1VO4t5R+6XB9m/A5cH2uBcjmEhlVelaTEDSHETE/lbddndmXoiIcVL5Cbhp1HYZ\n", "eBR4OiL+9VhORGwDrrTEJ02eY0DSfBwAfgRORMRBKuH8ITOvRMTZiNiVmefXm/OXiHgIOBoRF6ni\n", "XuNfNPkX23upAozSpmBBOqmTiHgWuC0zX5vR+V6lys8fmcX5pHkzAUmdRMRWakLB8kb/C9S6347O\n", "4lzSopiAJEldOAlBktSFCUiS1IUJSJLUhQlIktSFCUiS1IUJSJLUhQlIktSFCUiS1MXvyf+Pjf97\n", "OrMAAAAASUVORK5CYII=\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ss = State.from_vectors(Earth, r0, v0)\n", "tof_range = np.linspace(tof.to(u.s).value,\n", " (ss.period * 4).to(u.s).value,\n", " num=8)\n", "print(tof_range)\n", "plot(ss)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 4.69 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 11 µs per loop\n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 33.8 µs per loop\n", "100000 loops, best of 3: 10.8 µs per loop\n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 34 µs per loop\n", "100000 loops, best of 3: 11 µs per loop\n", "100000 loops, best of 3: 12.8 µs per loop\n", "10000 loops, best of 3: 34.9 µs per loop\n", "100000 loops, best of 3: 10.9 µs per loop\n", "The slowest run took 4.11 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 34.1 µs per loop\n", "100000 loops, best of 3: 10.9 µs per loop\n", "The slowest run took 4.05 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 33.9 µs per loop\n", "100000 loops, best of 3: 10.8 µs per loop\n", "100000 loops, best of 3: 12.3 µs per loop\n", "10000 loops, best of 3: 29.1 µs per loop\n", "100000 loops, best of 3: 11.1 µs per loop\n", "The slowest run took 4.12 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 29.3 µs per loop\n", "The slowest run took 4.30 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 10.6 µs per loop\n", "The slowest run took 4.01 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.8 µs per loop\n", "10000 loops, best of 3: 24.7 µs per loop\n" ] } ], "source": [ "res_fortran = []\n", "res_numba = []\n", "res_python = []\n", "for tof_ in tof_range:\n", " timeit_res_fortran = %timeit -o propagation.kepler(k_, r0_, v0_, tof_)\n", " timeit_res_numba = %timeit -o kepler_numba(k_, r0_, v0_, tof_)\n", " timeit_res_python = %timeit -o kepler_python_final(k_, r0_, v0_, tof_)\n", " res_fortran.append(timeit_res_fortran.best)\n", " res_numba.append(timeit_res_numba.best)\n", " res_python.append(timeit_res_python.best)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "iVBORw0KGgoAAAANSUhEUgAAAakAAAFjCAYAAACHX/SJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xe8XEX9//HXm5CETmgSIKEoAYmKAgooKFEQYpQEpIt0\n", "ga+I3a+ALYAN+Fm+FEXQKL2K0qRFNBYUkC4mCEEjECBAaBEIJOTz+2Nmk5PN3t29N7v37L33/Xw8\n", "9rGnzJwze5K7n505c2YUEZiZmXWiZcougJmZWVccpMzMrGM5SJmZWcdykDIzs47lIGVmZh3LQcrM\n", "zDqWg5SZmXUsBykzM+tYDlLWL0maIekDheUdC/vul/S+Hh63x3m7eZ7FytyKckj6rqTPLn3pyiPp\n", "Nkmjyy6H9Z5lyy6AWU9JmgG8AXi9sPkXEfEZoDiUShTXI+Kt3TzHoRHxu+7mXUqLlXmJnYVyVJex\n", "FklrAQcAb2phGZG0GzAaWADMjIjzu5OuzvZdgRHAcsB/IuJX+VDfA04E9mzl57DO5SBlfVkAH6n3\n", "5dyic6iNx1+MpGUjYn43szVTxoOB30TEqz0qWA2SVgW+HhFb5fW/Sro+Ip5pIt11wPxa+YHlgU0j\n", "4nt5+88k3RQR/wWuAX4iae2ImNWqz2Kdy819NuDUaAo8VtI/JD0r6eeShuZ95wPrA9dImiPpf2s0\n", "HY6U9CtJT0l6RtLpXZxzM0lTJD2Xm+p2rSrPlyXdB8yRNCjv2rpWuQp5dqxRxi918bHHAn/o+VWr\n", "6X3A1ML6vcD7m0z3gTr51wR2kjQkb38JeA0gIuYCdwK7tKD81ge4JmV9XU9qOdXNaB8DdgZeJv1S\n", "/xrpF/4BkrYHDqvU1iQdVcmfg8m1wG+B/UlNVu9cooDS4HzcnwE7Ae8FrpK0VUQ8lJPtC3wIeCYi\n", "XpekrspV+AxRq4xdeBvwz2YujqQ3AofXSXJrRFxFao57vrD9eWBUjfRdpXu21vaIuFzSMsDfJJ0N\n", "3BQRrxXSTQPe3sxnsb7PQcr6MgFXSio2j30pIiZ14xgBnBERMwEkfRs4nUXBoJ6tgXWA/42IBXnb\n", "LTXSbQusGBEn5fXfS7qWFIROyGU4rVKGFpSrlmHAnOIGSW8BDgT+CGwVEScCRMS/gOOaPObcwvpr\n", "wErdSBd18p+Uy/A94HNVx5tDuu42ADhIWV8WwIQW3JN6tLD8CLBuk/lGkm7qL2iQbt2qcwD8p+o8\n", "1fuXply1PAesXFmR9AbgN8C7IuJpSdv14JhzgDUK68sDte4TdZVubq3tkkYBYyLig5J2An4h6e8R\n", "8ZecbpX8eWwAcJAyS/d0isuPF9brTbj2KLC+pEER8XqddI8DIyUpFk3gtgHwQIPz1CtXUTOTwt0H\n", "bEq6nwOwFylQbpF7/i28l9aN5r6HWbx5c03grhrpq9OtkdM9X2P73cB44HKAiPitpIOA7YFKkNoM\n", "OK9O+awfcccJ6+uWtuedgKMkrSdpdeCrwCWF/bPoutv2bcATwEmSVpC0nKT31Eh3K+m+0pclDZY0\n", "BvhI1XlqletTdcpVVK+MFdcBOxTWXwGuj4ibIuJCWHjvjIj4V0QcV+d1VT7GH4GtCsfcErg5H+tN\n", "+b5arXRb5XS1tv8W+DdQ7Oo/lHQNkbRcPs/kBp/X+gkHKevrKr3aKq8rupk/gIuAm0i/+B8CvlXY\n", "/13ga7lX3hdZ/HmrBcCuwMak5rhHgb2XOEHEvJzuQ8DTwBnAARHxYINyXVinXEXFMn6hizTnAePy\n", "lzzAxcBKkj4iaQKwdS5n0yLiJeAUSV+T9A3glIh4Ku++HHhHvXR1tv8KeIOkr+SHj98QEX/Mx90V\n", "+H1EPNmdslrfpXZOHy9pLPB/wCDgZxFxco00p5H+eF8GDo6Iu+vlzb8qLyU1l8wA9o6I5/O+44BD\n", "SQ93fiYibsrbbwCGA4NJv8j+JyLmSToY+H/AY7k4p0fEz1t8GayDSfo3jXvG9Qu588VTEXFq2WXp\n", "KUm3kh5cntowsfULbQtSuXvuP0ldbmcCfwP2i4hphTTjgKMjYpykbYBTI2LbenklnULqpnuKpGOA\n", "1SLiWKWhUi4C3gWsR2o2GBURIWml/CAgkn4JXBkRF+S27q3yCAU2AA2kIGXWF7WzuW9rYHpEzMjN\n", "CJcAE6rSjAfOBYiI24BhkoY3yLswT37fLS9PAC6OiHkRMQOYDmyTj10JUIOBIUDliXjRi6MJmJlZ\n", "97QzSK3H4l1oH8vbmklT3WW3mLc4HMosYO28vC6Lmu2WOJ+kG3P6VyLihrw5gD0k3Sfpckkjmv94\n", "1h9ExEauRZl1rnYGqWbbEZupyajW8XJ33nrnKd7k3oX0AODQ3MwH6Sn+DSJic1JvoXOXPISZmZWl\n", "nc9JzSQ97FgxksVrOrXSjMhpBtfYXnkaf5ak4RHxpKR1gEpvolrHKj7BT0S8mnt/bQOcGxHPFnZP\n", "Ak6p9UEkta93iZlZPxIRLb2F0s4gdQcwStKGpIcQ9wH2q0pzNXA0cImkbYHnI2KWpNl18l4NHASc\n", "nN+vLGy/SNIPSM18o4DbJa0IrBIRT0halvR8SqXX3/BCV9bxLD7Y5WJafeH7IknHR8TxZZdjIWkN\n", "0jQPm+X3yvLqpAdlp5H+TSvv/8r7Nib9/6h+n0fq6j09vx5a+F74QdNx16FEvhaJr0PSjh/0bQtS\n", "ETFf0tHAjaRu5JNy77wj8/6zIuI6SeMkTSeNdHxIvbz50CcBl0k6jNwFPeeZKuky0pfRfOCo3LNv\n", "RdJgnkNJzYY3ApVu5p+RND6nn02azsA6SXogdB0WD0aV9yEsHohuyu//oeuhimbl1+Jj7KXzrMXi\n", "QWvXhcvS6+SgtResh/RxFgWyZ2nnsxxmA1hbn5PqL/JoNq5JtfPXYhr1egNqB6O5LFkrmgY80SvB\n", "IQWwNckBbB847NJUwx+VXwso1roWf5/dnwOYaxCJr0PSju9KB6kmOEglksZExJSlPMhg0hA+1YFo\n", "U9LUDdWBaBpVk+iVbbHrsCiAbcySzYeVaSu6CmDP9PUA1pL/E/2Ar0PiIFUSB6keSMPvbMqSweiN\n", "pA4t1cHoASJeLKewbZIC2Bp0fQ9M1Lr/lToPvUQahWVuXw9kNnA4SJXEQYrKF+5QYAVgxfxeXF6H\n", "xTswjCCNOVfdTPcgEa/0dvE7Uur4USuArUe6psuTrvlcUsAqvl6psa2724vb5ta5j2fWFAepkvSJ\n", "IJV6LnYVQFq1bR6LvtReqnp/msWD0cN0c8BSqyENEbYci/4NKsFrhR5u62p7MRg2E+j+C/yYiEfa\n", "+Omtj2nHd6Xnk+p00pnAqtQOHMUAsiwpYFSCRq1AUr3tqQb7i9teIaI4A671hjRPVeXftX1Sx5Xq\n", "YFgv+L0J+DPSWDzYq7WRg1Tnu5VUg2kUSF7zvQvrsdTUV/m/1BzpTuB3SBNIY2+atZyb+5rQJ5r7\n", "zMogfRj4BfBx8tQ4NnC147vSkx6aWc9F/AbYHTgfaYkJH82Wlpv7zGzpRNyC9EHgOqQ1iDiz7CJZ\n", "/+EgZWZLL+I+pPcBN+Wu9d/2PVJrBTf3mVlrRPwL2B7YE/hh7jFotlT8n8jMWifNKjAG2Ao4Nw+D\n", "ZdZjDlJm1loRzwO7AMOAXyOtUHKJrA9zkDKz1ot4GfgoaQqcm5BWK7lE1kc5SJlZe6RhsQ4Bbgf+\n", "QJpJ26xbHKTMrH3SSBZfBC4mDaP0ppJLZH2Mu6CbWXulrujfRZoN/BFpHBH3ll0s6xscpMysd0Sc\n", "jfQs6R7VnkT8qewiWedzc5+Z9Z6IXwL7A1cg7Vp2cazzOUiZWe+K+C3wEeCnSAeWXRzrbG7uM7Pe\n", "F3E70vuBG/J4fz8su0jWmRykzKwcEdOQtifdo1oT+JrH+7Nqbu4zs/JEPAq8F/gg8BOkQSWXyDqM\n", "g5SZlSviGWBH0pT0lyANLblE1kEcpMysfBFzgA8DAn6DtHLJJbIO4SBlZp0h4lVgH+Bh4OZ8n8oG\n", "OAcpM+scEa8D/wNMBv6EtH7JJbKSuXefmXWW1MPvq0jPkALVWCKmlV0sK4eDlJl1pogf5vH+foc0\n", "noi/lV0k631u7jOzzhVxHnAEqTPFTmUXx3qfg5SZdbaIa4A9gAuR9iy7ONa72hqkJI2V9ICkhyQd\n", "00Wa0/L+eyVt0SivpNUlTZb0oKSbJA0r7Dsup39A0s6F7TdIukfSPyRNkjQ4bx8q6dKc51ZJG7Tn\n", "SpjZUkkjpu8CnIp0RNnFsd7TtiCl9OT4GcBYYDSwn6TNqtKMAzaOiFGkKv2ZTeQ9FpgcEZsAN+d1\n", "JI0mdV8dnfP9WJJynj0j4h0R8RZg1ZwO4DBgdj7/D4GTW3sVzKxlIu4B3gccg/QVFv19Wz/WzprU\n", "1sD0iJgRaRrpS4AJVWnGA+cCRMRtwDBJwxvkXZgnv++WlycAF0fEvIiYAUwHtsnH/i9ArkENAZ6p\n", "cawrSE+9m1mningY2B7YF/g+km9Z9HPt/AdeD3i0sP5Y3tZMmnXr5F07Imbl5VnA2nl53Zyu5vkk\n", "3ZjTvxIRN1SfPyLmAy9IWr3Jz2dmZYh4AtiB9GP2HHLzvfVP7eyC3uxoxs1U2VXreBERkuqdJwpp\n", "d1EaE+xSSQdFxLl18i1ZAOn4wuqUiJjSnfxm1kIRz5HuO18O/AppbyJeKbtYA42kMcCYdp6jnUFq\n", "JjCysD6SxWs6tdKMyGkG19g+My/PkjQ8Ip6UtA7wVJ1jzSysExGvSrqC1Ax4bt6/PvC4pGWBVSPi\n", "2VofJiKO7/qjmlmvi3gZaTfg58CN+Vmq58su1kCSf6xPqaxLmtjqc7Szue8OYJSkDSUNIXVWuLoq\n", "zdXAgQCStgWez0159fJeDRyUlw8Crixs31fSEEkbAaOA2yWtmIMZORB9BLi7xrH2JHXEMLO+It2z\n", "Poj0Nz2FdE/b+pG21aQiYr6ko4EbgUHApIiYJunIvP+siLhO0jhJ04GXgEPq5c2HPgm4TNJhwAxg\n", "75xnqqTLgKnAfOCo3By4InBVbupTPubP87EmAedLegiYTboZa2Z9ScQCpM8BXwX+jLQzEf8qu1jW\n", "GvJEmI1Jiohwd1ezTid9Evga8CEi7iu7OHWlR21WBJYHnuoPsxK347vSY/eZWf8RcWYe728y0h5E\n", "/Hmpjpe6uC8PrEQKKJVXK9YHAy8DrwN/QNqPiJeXqrz9kGtSTXBNyqyPST3/LgC+ATxHz4PK8sBc\n", "4L+kWxKVVyvW5xIRpPvuk0j30Xcl4un2XJT2a8d3pYNUExykzPogaRvgOOA1eh5UXiZiQS+UVcA3\n", "SffFP0TEQ20/Zxs4SJXEQcrMekUal/BEYHci/lp2cbqrHd+VHlLEzKxTRJwNHApcjbR72cXpBA5S\n", "ZmadJOI64EPAj5A+XXZxyubmvia4uc/Mel0alOB64Frgy71yb2wpubnPzGygiPg38B7SMG4XIy1X\n", "colK4SBlZtap0liiHySNljOZAThLg4OUmVkni5hL6pp+O3AL0oallqeXOUiZmXW6iAVEfJE0e/kt\n", "SFuVXaTe4iBlZtZXRJwGfBq4AWlc2cXpDQ5SZmZ9ScSvgPHAz5EOL7s47eYu6E1wF3Qz6zjSJsB1\n", "wCXA1zthFHUPi1QSBykz60jSG4BrgH8CnyDitXKL4+ekzMysIuIp4APAqsB1SKuWXKKWc5AyM+vL\n", "Il4CPkqqTf0JaUTJJWopBykzs74u4nXgaNIcWn9BelvJJWoZBykzs/4gIog4BTgGuBlpx7KL1AoO\n", "UmZm/UnExcBewEVIB5RdnKXl3n1NcO8+M+tzpNGkLuo/Bb7TG13U3QW9JA5SZtYnSesCvwH+BhxF\n", "xPz2ns5d0M3MrFkRjwPvA9YHrkJaqeQSdZuDlJlZfxYxB9gVeBKYgjS85BJ1i4OUmVl/FzEP+ARw\n", "NfBXpDeXXKKmLVt2AczMrBekDggnIj0C/AFpTyL+VHaxGnFNysxsIIk4BzgAuAJpr5JL05BrUmZm\n", "A03ETUg7A9cijQR+2AmjqNfiLuhNcBd0M+uXpPVJz1LdDHwhD6+0FIdzF3QzM2uViEeA7YG3AZcj\n", "LV9yiZbQ1iAlaaykByQ9JOmYLtKclvffK2mLRnklrS5psqQHJd0kaVhh33E5/QNKVVkkLS/pN5Km\n", "Sbpf0ncL6Q+W9LSku/Pr0PZcCTOzDhXxPPAh4GXgd0hrllyixbQtSEkaBJwBjAVGA/tJ2qwqzThg\n", "44gYBRwBnNlE3mOByRGxCamKemzOMxrYJ6cfC/xYUqXaeUpEbAZsAWwnaWzeHsDFEbFFfv281dfB\n", "zKzjRbwKHAj8njSK+ptKLtFC7axJbQ1Mj4gZkfroXwJMqEozHjgXICJuA4YpPWhWL+/CPPl9t7w8\n", "gRRw5kXEDGA6sE1EvBIRf8jnmAfcBayX8yi/zMwGtogFRHwF+AHwZ6Styy4StDdIrQc8Wlh/jEXB\n", "oVGadevkXTsiZuXlWcDaeXndnK7L8+WmwV1JNTBINak9JN0n6XL1s8nCzMy6LeInwOGknn/jyy5O\n", "O4NUs90Gm6nJqNbxInVNrHeehfskLQtcDJyaa1oA1wAbRMTmwGQW1dDMzAauiGuBDwM/QTqqzKK0\n", "8zmpmcDIwvpIFq/p1EozIqcZXGP7zLw8S9LwiHhS0jrAU3WONbOwfjbwz4g4rbIhIp4t7J8EnNLV\n", "h5F0fGF1SkRM6SqtmVmfF/E3pO2B65E2AI4jYkExiaQxwJh2FqNtz0nlmss/gR2Bx4Hbgf0iYloh\n", "zTjg6IgYJ2lb4P8iYtt6eSWdAsyOiJMlHQsMi4hjc8eJi0j3s9YDfkvqlBGSvgW8GdgrCh+4Euzy\n", "8u7A/0bEe2p8Fj8nZWYDk7QGacy/R4CP13uWqh3flW2rSUXEfElHAzcCg4BJOcgcmfefFRHXSRon\n", "aTrwEnBIvbz50CcBl0k6DJgB7J3zTJV0GTAVmA8clQPUCOArwDTgrtzh7/Tck+8zSm2u84HZwMHt\n", "uh5mZn1SxGyknYA9lvZh357wiBNNcE3KzKwxjzhhZmYDioOUmZl1LAcpMzPrWA5SZmbWsRykzMys\n", "YzlImZlZx3KQMjOzjuUgZWZmHctByszMOpaDlJmZdSwHKTMz61hNBSlJGyoNMIikFSSt0t5imZmZ\n", "NRGkJB0BXA6clTeNAH7dzkKZmZlBczWpTwHbAy8CRMSDwBvaWSgzMzNoLki9GhGvVlbyhISe38PM\n", "zNqumSD1B0lfBVaQ9EFS09817S2WmZlZE5MeShoEHAbsnDfdCPwsBtBsiZ700MyssXZ8V3pm3iY4\n", "SJmZNVbKzLySdpV0t6TnJM3JrxdbWQgzM7NammnuexjYHbg/Ihb0Sqk6jGtSZmaNlVKTAh4D/jFQ\n", "A5SZmZVn2SbSHANcL+n3wGt5W0TED9pXLDMzs+aC1DeBOcBywJD2FsfMzGyRZoLUOhHxwbaXxMzM\n", "rEoz96Suk7RL20tiZmZWpZneff8FViDdj5qXN0dEDJiR0N27z8yssXZ8VzZs7ouIlVp5QjMzs2Z1\n", "GaQkbRYR0yRtWWt/RNzVvmKZmZnVae6T9NOIOFzSFGqMeh4R729z2TqGm/vMzBorZew+SctFxNxG\n", "2/ozBykzs8bKGnHiL01uMzMza6kug5SkdSRtRZpHaktJW+X3MaTefg1JGivpAUkPSTqmizSn5f33\n", "StqiUV5Jq0uaLOlBSTdJGlbYd1xO/4CknfO25SX9RtI0SfdL+m4h/VBJl+Y8t0raoJnPZWZmvaNe\n", "TWpn4HvAesD38/L3gS8AX2l04DwP1RnAWGA0sJ+kzarSjAM2johRwBHAmU3kPRaYHBGbADfndSSN\n", "BvbJ6ccCP5ZUqXaeEhGbAVsA20kam7cfBszO5/8hcHKjz2VmZr2ny959EXEucK6kPSPilz049tbA\n", "9IiYASDpEmACMK2QZjxwbj7fbZKGSRoObFQn73hgh5z/XGAKKVBNAC6OiHnADEnTgW0i4lbgD/kc\n", "8yTdRQq8lfNPzMtXkAKjmZl1iIb3pHoYoCAFgkcL64+xKDg0SrNunbxrR8SsvDwLWDsvr5vTdXm+\n", "3DS4K6kGttj5I2I+8IKk1Zv4bGZm1guaGbuvp5qd8reZniCqdbyICEn1zrNwn6RlgYuBUys1tO6Q\n", "dHxhdUpETOnuMczM+pPcR2FMO8/RziA1ExhZWB/J4jWdWmlG5DSDa2yfmZdnSRoeEU9KWgd4qs6x\n", "ZhbWzwb+GRGnVZ1/feDxHMRWjYhna32YiDi+1nYzs4Eq/1ifUlmXNLHLxD3UTBd0JG0naX9JB+XX\n", "gU1kuwMYJWlDSUNInRqurkpzNXBgPse2wPO5Ka9e3quBg/LyQcCVhe37ShoiaSNgFHB7Pva3gFWA\n", "z9c4f+VYe7KoGdDMzDpAw5qUpAuANwL3AK8Xdp1XL19EzJd0NHAjMAiYlIdZOjLvPysirpM0Lndy\n", "eAk4pF7efOiTgMskHQbMAPbOeaZKugyYCswHjsrNgSNIvRGnAXflDn+nR8TPgUnA+ZIeAmYD+za6\n", "HmZm1nuaGXFiGjA6GiXsxzzihJlZY2WNOHE/sE4rT2pmZtaMZjpOrAVMlXQ78GreFhExvn3FMjMz\n", "ay5IHZ/fK819NbuDm5mZtVrDe1IAeRSId5GC0+0R8VSDLP2K70mZmTVWyj0pSXsDtwF7kXrS3S5p\n", "r1YWwszMrJZmevfdB+xUqT1JWgu4OSI274XydQTXpMzMGiurd5+Apwvrs2luKCMzM7Ol0kzHiRuA\n", "GyVdRApO+wDXt7VUZmZmNNfcJ+CjwPakjhN/iohf90LZOoab+8zMGmvHd2VTvfsGOgcpM7PGevWe\n", "lKRb8vt/Jc2per3YykKYmZnV4ppUE1yTMjNrrKznpM5vZpuZmVmrNdMF/a3FlTw54FbtKY6Zmdki\n", "9e5JfUXSHOBtxftRpJlwqycvNDMza7lmuqCfFBHH9lJ5OpLvSZmZNVZaF3RJq5GmY1+usi0i/tjK\n", "gnQyBykzs8ba8V3ZzPTxhwOfAUYCdwPbAn8FPtDKgpiZmVVrpuPEZ4GtgRkR8X5gC+CFtpbKzMyM\n", "5oLU3Ih4BUDSchHxALBpe4tlZmbW3ACzj+V7UlcCkyU9B8xoa6nMzMzo5ogTksYAqwA3RMRr7SpU\n", "p3HHCTOzxkofcSIipkTE1cCkVhbCzMysFo84YWZmHcsjTpiZWcfyiBNN8D0pM7PGShlxQtIOpBl5\n", "F+MRJ8zMrKisIHUti4LUcqQHe++MiAEz4oSDlJlZY6UMixQRH6kqxEjg1FYWwszMrJZmevdVewzY\n", "rNUFMTMzq9bMc1KnF14/Av4M3NnMwSWNlfSApIckHdNFmtPy/nslbdEor6TVJU2W9KCkmyQNK+w7\n", "Lqd/QNLOhe3flvRI7p1YPPfBkp6WdHd+HdrM5zIzs97RzD2pg1l0T2o+aaDZWxoeWBoE/BPYCZgJ\n", "/A3YLyKmFdKMA46OiHGStgFOjYht6+WVdArwTESckoPXahFxrKTRwEXAu4D1gN8CoyIiJG0NPAI8\n", "FBErF85/ELBVRHymwWfxPSkzswZKGXEiIs4BLgHuAe4jBYxmbA1Mj4gZETEvH2NCVZrxwLn5PLcB\n", "wyQNb5B3YZ78vltengBcHBHzImIGMB3YJh/79oh4skYZlV9mZtaBmmnu+zDpC/804Azg4VwDamQ9\n", "4NHC+mN5WzNp1q2Td+2ImJWXZwFr5+V1c7p656sWwB6S7pN0uaQRDdKbmVkvaqbjxA+A90fEDhGx\n", "AzAG+GET+ZodubaZmoxqHS9SW2W98zQqwzXABhGxOTCZRTU0MzPrAM1M1fFiREwvrP8LeLGJfDNJ\n", "s/lWjGTxmk6tNCNymsE1ts/My7MkDY+IJyWtQxqmqatjzaSOiHi2sDoJOKWrtJKOL6xOiYgp9Y5t\n", "Ztbf5ZkxxrT1HE10nPgJsD5wWd60F6kTwmSAiPhVF/mWJXV+2BF4HLid+h0ntgX+L3ec6DJv7jgx\n", "OyJOlnQsMKyq48TWLOo4sXEUPqCkOVUdJ4ZX7lVJ2h3434h4T43P4o4TZmYNlPIwL2mUiaeAHfL6\n", "03nbrnm9ZpCKiPmSjgZuBAYBk3KQOTLvPysirpM0TtJ04CXgkHp586FPAi6TdBhp8sW9c56pki4D\n", "ppJ6IR5VCVA5sO0HLC/pUeCnEXEi8BlJ43P62cDBTVwPMzPrJd2a9HCgck3KzKyxUmpSkt4IfBrY\n", "sJA+ImJ8KwtiZmZWrZnmviuBn5F6wi3I21z9MjOztmsmSM2NiNPaXhIzM7MqzfTuOwB4E6kTw6uV\n", "7RFxV3uL1jl8T8rMrLGyeve9BTgAeD+LmvvI62ZmZm3TTE3qYWCziHitd4rUeVyTMjNrrJQBZoG/\n", "A6u18qRmZmbNaKa5bzXgAUl/Y9E9KXdBNzOztmsmSE3M75V2wZqDvZqZmbVaUyNO5Dme3kUKTrdH\n", "xFMNsvQrvidlZtZYKfekJO0N3EYaWHZv4HZJe7WyEGZmZrU007vvPmCnSu1J0lrAzXkOpgHBNSkz\n", "s8bKek5KpJHPK2bjKdetg0gMBVYvvFbrYn0Y8ArwLPBc4fVsjeUXIni9Vz+IWTdIiNQa1o7XoBrb\n", "5kVwZ+98ukWaCVI3ADdKuogUnPYBrm9rqWwhiWuA14H/kqYzqfVeb9tLfeHLNv/BrUL9INPV+rKk\n", "4FJ5PVe1Pi2/vwCskPNXXhtWrVeOv7LEHOoHtK7W50Qs9uC7DTASywCrAmsBazbxvhzdDyQiDbDQ\n", "7Ov1bqavzjcL2K2V16kZzXac2APYLq/+KSJ+3dZSdZgym/skdgJWBlYEVsqvFavea20rvr9K42DW\n", "k+A3v0Z5B9P9IFMJEC9TO8g0Wn85orU9TiUGkb5kiuVbrYn11UiB8AW6rqXVW3+p1Z+lp/IPB0hf\n", "hsXlitc7paztlmvr1YGlXtBZg/R38gypJare+zOk//vdChqdeO3b8V3ZZZCSNApYOyL+XLV9e+CJ\n", "iHi4lQXpZH35nlT+olme5oNad4LgPBYFLpG+sJen+0HmOeC5COa16zr0phyoh9F8YCuuDyZ9uUHt\n", "4NCT9+7mqSVY9OhJFI77SuE1t2q9O6+m8tb6YdRdPajlrAUMpesAUyv4zI5gwI3S09tB6jfAcRFx\n", "X9X2zYEt/VwTAAAdOElEQVRvR8SuNTP2Q305SLVLDn7LsShgwaKmro77hddX5F/sK7J4QCgu9/S9\n", "W3ma+TfMtc3lq17L1djW7KuZvAvoXoBbwJK1nu7UcirvL/r/dWO9HaTuiIh3drHv/oh4aysL0skc\n", "pMzKl38YDaZ7wW0ZUmevAV/L6Q293btvWJ19y7WyEGZmjeSazGv59ULJxbFeUu9h3jskHVG9UdLh\n", "0PvdEM3MbOCp19w3HPg16VdLJShtRbqBuHtEPNErJewAbu4zM2usV+9J5ROKNLnhW0k3VP8REb9r\n", "ZQH6AgcpM7PGej1IWeIgZWbWWFmTHpqZmZXCQcrMzDpWM2P3mZnZUtIJEmnIrFULr1Xy+3+BmcBj\n", "wHMx0fdhKnxPqgmljt13go4i9bCsHj9vsVdMjH4xpJBZJ9IJGkQaQ7M6uNQKOPXWK894VV4v5tdK\n", "wAhgPVIP6sdIQWtmYbn4PismxlIPEdVq7jhRkpKD1PdJ/8FXavCqjJTe7KvLgFd4vdIbv+jyL8wh\n", "pIfEK6/lG6w3k6ZWHpF6qi5g0XBBtdZblaanx23mRcnpXy+85tdZ72q5p/vqpXu9+v+sTtAQmg8s\n", "XW1bgfQ38wJLBpnqbV1tf7GZH5M6QSuRgtV6LApc1e9rkEbPqA5giy3HxHi50flayUGqJJ3euy9/\n", "yQ9lycFge/Iq5h1K/WBW3DefpQse81k0Dlvl1Wi9u2leZfHBUZcpLNdab1Wanh633osOSL8M6ZbB\n", "oPzq7nJP8jRarkxfUQlelTJ2O6BUrc+JidEx06/oBA0G1mHxwFUdzNYlja7eqFbWsuZFB6mSdHqQ\n", "apfcxNFswFuWxQNEdwLOqzExOn7OK+t8OkGVCfsqL4CXB+I9nvzjdU0a18qGUjuAFZefbKZ50UGq\n", "JAM1SJlZ/9egebGyvAZwf0yMLeseq68FKUljgf8j/aL5WUScXCPNacCHSNXSgyPi7np5Ja0OXAps\n", "AMwA9o6I5/O+44BDSVX9z0TETXn7t4EDgNUiYuXCuYcC5wFbkkZK3ici/lOjjA5SZjZg5ebFNWJi\n", "PFk3XV96mFfSIOAMYCwwGthP0mZVacYBG0fEKOAI4Mwm8h4LTI6ITYCb8zqSRpOmth+d8/04D+sE\n", "cBWwdY1iHgbMzuf/IbBEEDUzG+hiYsxrFKDapZ0P824NTI+IGRExD7gEmFCVZjxwLkBE3AYMywPb\n", "1su7ME9+3y0vTwAujoh5ETEDmA5sk499e0TNC1w81hXAjkvxec3MrMXaGaTWAx4trD+WtzWTZt06\n", "edeOiFl5eRawdl5eN6erd74uyxgR84EXcnOimZl1gHaOONHsza5m2i8rz7YsfoKIkFTvPC274Sbp\n", "+MLqlIiY0qpjm5n1RZLGAGPaeY52BqmZwMjC+kgWr+nUSjMipxlcY/vMvDxL0vCIeFLSOsBTdY41\n", "k/pmAusDj0taFlg1Ip6tlTAijm9wLDOzASX/WJ9SWZc0sdXnaGdz3x3AKEkbShpC6tRwdVWaq4ED\n", "ASRtCzyfm/Lq5b0aOCgvHwRcWdi+r6QhkjYCRgG3Nyhj8Vh7kjpimJlZh2hbTSoi5ks6GriR1I18\n", "UkRMk3Rk3n9WRFwnaZyk6aTRCw6plzcf+iTgMkmHkbug5zxTJV0GTCU9aX5U5P71kk4B9gOWl/Qo\n", "8NOIOBGYBJwv6SFSF/R923U9zMys+/wwbxP8nJSZWWN96jkpMzOzpeUgZWZmHctByszMOpaDlJmZ\n", "dSwHKTMz61gOUmZm1rEcpMzMrGM5SJmZWcdq59h9ZmYdocFA1NYDvTXAgYOUmQ0IHjWmdXoz6Lu5\n", "z8zMOpaDlJmZdSwHKTMz61gOUmZmA4CkcyR9s+xydJeDlJlZSSTNkDRL0gqFbZ+Q9Ps2nC7yq09x\n", "kDIzK9cywGd76Vx9roejg5SZWXkC+B7wJUmrFndI2kDSAknLFLZNybOSI+lgSbdI+oGk5yRNl/Qe\n", "SYdIeiTX0A6sOt+akm6S9GI+1vqFY5+a870g6Q5J27fxczfNQcrMrFx3AFOALzWRtrrJbmvgXmB1\n", "4GLgMmBL4E3Ax4EzCk2JAvYHTgTWBO4BLiwc63bg7cBqwEXA5ZKG9OgTtZCDlJkNeBLRilcPTx/A\n", "N4BPS1qzm3n/HRHnRkSQAtS6wIkRMS8iJgOvARsX0l8bEX+OiNeArwLvlrQeQERcGBHPRcSCiPgB\n", "MBTYtIefqWUcpMxswItArXj1/PzxD+Ba4Fi617lhVmH5lXysp6u2rVQ5DfBY4ZwvAc+SAhuSviRp\n", "qqTnJT0HrEqqcZXKQcrMrDNMBA4H1svrL+X3FQpphi/F8QWMXLgirURqJnxc0nuB/wX2iohhEbEa\n", "8AId0NHCQcrMrANExMPApaSefhERzwAzgQMkDZJ0KOle09IYJ2m7fK/pm8BfI2ImsDIwH3hG0hBJ\n", "3wBWWcpztYSDlJlZ5ziRxWtOh5NqOM8Ao4FbCvtqPfdUr6kwSB0lJgKzgS1InSsAbsivB4EZpGbC\n", "R3ryAVpN6X6b1SMpPIKyWd/lv+HW6up6tuM6uyZlZmYdy0HKzMw6loOUmZl1LAcpMzPrWA5SZmbW\n", "sRykzMysY7U1SEkaK+kBSQ9JOqaLNKfl/fdK2qJRXkmrS5os6cE8mu+wwr7jcvoHJO1c2L6VpL/n\n", "facWth8s6WlJd+fXoa2/CmZm1lNtC1KSBgFnAGNJD6HtJ2mzqjTjgI0jYhRwBHBmE3mPBSZHxCbA\n", "zXkdSaOBfXL6scCPJVX6658JHJbPM0rS2Lw9gIsjYov8+nmrr4OZmfVcO2tSWwPTI2JGRMwDLgEm\n", "VKUZD5wLEBG3AcMkDW+Qd2Ge/L5bXp5ACjjzImIGMB3YRtI6wMoRcXtOd14hj+iAsanMzKy2dgap\n", "9YBHC+uPsWjgxEZp1q2Td+2IqIz8OwtYOy+vS2GE36pjFbfPLBwrgD0k3SfpckkjmvtoZmZLL08f\n", "/7KkOfn1Yv6h3p1jjJH0aOOUfVM7g1Sz4y01U5NRrePlOVSWZlyna4ANImJzYDKLamhmZr0hgI9E\n", "xMr5tUpEPNlsZknLNpluUI9LWLKmPmAPzaQwLHxefqxBmhE5zeAa22fm5VmShkfEk7kp76kGx5qZ\n", "l5c4VkQ8W9g+CTilqw8j6fjC6pSImNJVWjOznpI0FDgZ2Ctvugw4JiJekzQGuAA4Dfg88CfgI8BQ\n", "SXNIQW9T4EjgraSBYscDn5f095zvzXn7FcAX8i0VJC0APgl8EVgLuDAijm5Q1jHAmFZ87i5FRFte\n", "pAD4MLAhMIQ0VfFmVWnGAdfl5W2BWxvlJQWSY/LyscBJeXl0TjcE2CjnrwygexuwDalGdh0wNm8f\n", "XijL7sBfuvgs0a7r5JdffrX/1al/w8C/gR2rtp0I/IU04eCapJHPT8z7xgDzgO+SfswvB+wAPFp1\n", "jONJs/KOz+vLkaaV35rUgrYBMBX4bCHPAuBq0hQdI0kVgF26cz3bcZ3bVpOKiPmSjgZuBAYBkyJi\n", "mqQj8/6zIuI6SeMkTSdN8HVIvbz50CcBl0k6jDSk/N45z1RJl+ULPx84KvJVA44CzgGWJwXFG/L2\n", "z0gan9PPBg5uz9Uws06mE9SS6SBiYrdHABdwpaT5eX0K8Dbg6EjzSSHpBOAs0hTzkILJxEg1oHmF\n", "XszV/hIRVwNExFzgrsK+/0g6mxTgTi1sPykiXgRelPR74B2k7+HSeKqOJniYf7O+rVP/hiX9m/R4\n", "zO8K214Gtqr8MJf0ZuDeiBhaae6LiBGF9GOA8yOiOOvu8aTHez5e2LYJ8ANgK9KcVcsCd0TEDnn/\n", "gpznX3n9F8BjEfH1GuWueT09VYeZWf/3OOlWR8X6eVtFMxMd1upUdiappWnjiFgV+Cp9IAZ0fAHN\n", "zAaYi4GvSVpT0pqkZr7z66SfBawhqTjde63azErAHODlXDv7ZINydETN00HKzKyzfAu4A7gvv+7I\n", "2yoWqyFFxAOkwPYvSc/mXs+1alJfAj4GvAicTRokoZimVg2t9PtBvifVhE5tzzaz5vhvuLV8T8rM\n", "zAwHKTMz62AOUmZm1rEcpMzMrGM5SJmZWcdykDIzs47lIGVmZh3LQcrMzDqWg5SZWR+XZ/jdsexy\n", "tIODlJlZSaqmj39S0i8krdggzzmSvlm1uSOGMGoHBykzs/IsnD6eNCnhO4GvlVukzuIgZWbWASLi\n", "ceAG4NOS7ijuk/QFSVdKOpw0SOyXc+3rqkKyLSTdK+l5SZfkaegr+Q+X9JCk2ZKuyoPQVvYtkHSk\n", "pAclPSfpjDZ/1G5xkDIzK5cAJI0EPkSaKXejPJ1GxQHAuRHxU+BC4OSIWDkiJhSOsRewC7ARsDl5\n", "pnFJHwC+k/evA/yHNAJ60YdJtbjNgb0l7dLiz9hjbZs+3sysz1Brpo+n+yOAF6ePfwG4FvgmsDrw\n", "cdK8Um8BNsj7ivkWOzNwWkQ8CSDpGtLU7wD7A5Mi4p687zjgOUnrR8QjOU3HTRtf4ZqUmVmEWvLq\n", "wZmBCRGxWkRsGBFHR8Rc4FxSsx6kWtSlETGvwbGeLCy/AlQ6YFRqT/mjxkvAbGC9LvK+TJogsSO4\n", "JmVm1mEi4lZJr0l6H7Bffi3c3c3DLTYdfe49uAYwc2nL2RtckzIz60znA2cAr0XEXwrbZwFvbCJ/\n", "pWZ3MXCIpLfnzhTfAW4tNPV1la8jOEiZmXWm84G3ABdUbZ8EjM498X7VRd6Fz01FxM3A14ErSLWq\n", "jYB9q9LWzNsJPH18Ezz1tFnf1hf/hiUtT6o1bRERD5ddniJPH29mZp8Ebu+0ANXb3HHCzKzDSJpB\n", "anLbreSilM7NfU3oi00FZraI/4Zby819ZmZmOEiZmVkHc5AyM7OO5Y4TZjYgqFXj81mvcpAys37P\n", "nSb6rrY290kaK+mBPI/JMV2kOS3vv1fSFo3ySlpd0uQ898lNkoYV9h2X0z8gaefC9q0k/T3vO7Ww\n", "faikS/P2WyVt0Pqr0H9IGlN2GTqBr8MivhaJr0P7tC1ISRpEGndqLDAa2E/SZlVpxgEbR8Qo4Ajg\n", "zCbyHgtMjohNgJvzOpJGA/vk9GOBH0uq/Ho6Ezgsn2eUpLF5+2HA7Lz9h8DJrb0K/c6YsgvQIcaU\n", "XYAOMqbsAnSIMWUXoL9qZ01qa2B6RMzIQ8xfAkyoSjOeNCQ9EXEbMEzS8AZ5F+bJ75WH3SYAF0fE\n", "vIiYAUwHtskzUK4cEbfndOcV8hSPdQWw49J/bDMza5V2Bqn1gEcL64+x+Pwl9dKsWyfv2hExKy/P\n", "AtbOy+vmdLWOVdw+s3CsheePiPnAC5JWb+KzmZlZL2hnx4lme9I0c0NTtY4XEdFbPXbcMyiRNLHs\n", "MnQCX4dFfC0SX4f2aGeQmgmMLKyPZPEaTa00I3KawTW2VybomiVpeEQ8mZvynmpwrJl5uXp7Jc/6\n", "wOOSlgVWjYhnqz+IewaZmZWjnc19d5A6KWwoaQipU8PVVWmuBg4EkLQt8HxuyquX92rgoLx8EHBl\n", "Yfu+koZI2ggYRRpB+EngRUnb5I4UBwBX1TjWnqSOGGZm1iHaVpOKiPmSjgZuBAYBkyJimqQj8/6z\n", "IuI6SeMkTQdeAg6plzcf+iTgMkmHATOAvXOeqZIuA6YC84GjYtHouUcB5wDLA9dFxA15+yTgfEkP\n", "AbNZfCIwMzMrmUdBt6WiPOxx2eUws/7JY/fVIGlTSe+WNDg/s2VVJK0vaTU8askSCs/nDWi+DotI\n", "8ndt1t1r4ZpUFUl7AN8hda54nHR/7JyIeKHUgnUQSbsDxwAvAn8F/hYR15ZbqnJJWiEiXi6sD4qI\n", "18ssUxl8HRJJuwBvB/4LXBARL5ZcpNIs7bVwdC8odNI4LCJ2JHWwGAF8WdKqpRauQ0haC/gm8Dng\n", "i8C/gSMkfazUgpVI0njgN3mIr+MABugXs68DIGkH4Meke+NvB/4m6U1534CqXbbiWjhILWkVUs9A\n", "gF8D1wJDgI+5yg6k/2wPAPdExN9JvSsnAXtL+lCpJSuBpLeROvP8P+AC4MCq8SEHRHOxr8Ni3gX8\n", "KiJ+EBFHApcCF0naKD/bOZC+R5b6Wgyki9VQRLwGfB/4qKT35l+BtwD3ANuXWrgOERHPAa8AF+b1\n", "54E/AtcBWyorsYi9rRK0J+eht7YBtqh8QUfE6wPkevg6LHIvsFxl8OuI+AZwE3C9pFUiYkGppetd\n", "S30tHKSW9CdS1/cDJb0vIuZHxIWk4ZU2L7do5ZD0QUmfkvT5vOloYLak02Fh4LqDFMhXHGC9/V4g\n", "tbW/AyC3t38Y2FnSF/O2gXA9BvR1KHQkgvTFvBmFR1oi4uukH3O7llC8XtXqa+EgVSUi5pJqCfcA\n", "X5F0hKSDgTcAT5RZtjJI2h64CHgV2FPSGaRg/SPSL6Sr8q+k0cAKpKbRfk3SlpJ2k7R+RDxOqm1/\n", "X9KGABExB/gfYM3yStl+vg5J7kh0GXCppG8BGwJHAkdJ+h9Jlc//ItCvxwZtx7Vw774u5E4U25Eu\n", "8FzgtIi4q9xS9T5JXyCNIn+CpOWAr5Meir6CFMh/ROqGvhmpw8k9pRW2F0iaQLrvci/p/8VTwFeA\n", "z5JqDl8F7iQ9mP5hYPfcjNyv+DokuSPR74FPkAYkeCdp9Jr/Rxq8+vT8viyppWH3iJhaTmnbq13X\n", "wkGqAaUx/WIg9lKC1NRH6sX3mYh4MAeqicAqEfGpnGZ5YFBE/LfEovYKST8Bro+IqyRtRfojHEH6\n", "wzwAeDcwnDTC/kERcW9phW0jX4ckN2v9FPh4RMzNrQrvBw4Fjgf+A2xC6tn224h4qKyytlu7roWD\n", "lC1B0vqkaVAGA6+RfgndRxpS6okclP4InBURPyuvpL0n3/QXcBbwcESclLeNIDVpDYqIY3NzxsrA\n", "q7kJrF/xdViSpPOBFSJij7y+Gmm4tjdExDdLLVwva8e18D0pW4ykjwDXk6rmk0jzdV0AvBf4sKQ3\n", "R8QrpMF5+13zTS256Xdo7on0I9JAxvvkjgAzSY8prC9p7Yh4JiL+3R+/mH0dkiY7Ev0NeI+klcoq\n", "Z2/ojWvhIGVA+oWca1DfBT5Fuvd0J2lEiaeAM0idI87O3YqPJv3n69eURiC5GLgm34d5kHTv5QBJ\n", "+0bEgoj4K6nW8PYSi9pWvg6JOxIt0lvXws19tlButjmb1H78REQsyB0nPgdsFxGPSnovsCkwJSKm\n", "l1fa9pO0CWnUkcOADYCPAZOBP5AeSTgZuByo9GLbOSIeKae07ePrsIg7EiX5u+Lz9MK1cJAyJO0K\n", "bEyqLV0A3BcR3y7sP44UmI4qjsvW30naBjg5Isbk9feQeqvdB5xJ+oW4P+kP8bx+3DlgW+CkgX4d\n", "wB2JIA0Qm3/A7gR8iXZfi4jwawC/gJ1Jv3p2yesbkrqJHlNIsxGphrVM2eUt4fqcT7rxu2xe3w64\n", "ARhXdtl64bOvmN8HAb8YwNdhfWAosBKpyepUUq1ynbx/eVLT9yfKLmsvXIttSd3HlwHWIY3Q09Zr\n", "4XtSA1j+RXwBcERE3Jh7ZM0EJgCfl/TF3NSzA7Al0O8H2ZW0raQxuRYF6bmP7YDtJQ2OiFtI92YO\n", "kTS4tIK2maSxwKfyL+Eg3Z/choF3HdyRKMv/J84B5ka6B/kE6QHu99DGa+G5gAa2Z4F5wDo5QF1O\n", "GoNtKul5hy1Jg+1uBRwSqadOv6U0QO7pwO+A4ZL+ExGflnQMsBvpF/V5pC/tuUC/HIMtX4eTSc04\n", "r+Rt5wJfIP2AGSjXYSSLOhJNAw4idSTajtQ0/jHS8Gl3k4b9GVNOSdsvd5L4OekZqDuUxt17MSJ+\n", "Jekp4KO06Vr4ntQAJ+ntpNHelyN1mJhEqr6/g3Qf4hFJqw2AALUsaTis30TEeZJWIQ2EOS0iDpH0\n", "cWAsMJI0nMtB0Q9HIJE0mjRY8Hci4mxJa5BqDy9HxAxJB5Cuwwj68XWAhf8nfgycCDweA7gjkaSj\n", "SIHnW6RxGk8ijdW4CvCFiJgp6X2kh3Vbei0cpKzyxfSBiDijsO0m4LiIuLO8kvUuSceSvozOK2z7\n", "C3BbRHw+r28OzIqIWSUVs62URo84DLibdG/yS8BsYC3S5JbH5HT99jpI2pgUgB8mBam7IuLkwv4B\n", "05FI0ijSQ/3Pkeba25RUmz4JuJV0T/u9wN7Rpolh3dxnRMRUSdMq65L2JA0KOrO8UvUOSZtExIN5\n", "9THgOElTYlEX6vGkZ8PeGhH3R8R95ZS0vSRtGhH/jIg7cy+tPYHjgFNInWZGAOdI2iEi/tCPr8Ou\n", "wLeB54G/k54DOlVphuHv5GSXkK7N3HJK2TuqrsU/gXNJTbv3RMRZOc3jwJto47VwxwkD0uCE+YHe\n", "Q0kz7x4YEU+WXa52yn+E90q6BCAiLiA1fd4iaYO87RnSTeAVSytom+XrcI+kSwEKnSK+GBE/yTfJ\n", "HwEeoR93DsgdiU4BDo6I95F68r2L1DHgk5K+nmtZ/b4jUY1rsQDYNyJOI3WeqBhD6v27QrvK4iBl\n", "1f5NGp34/rIL0k6SViDdEP8c8KqkiwEi4mukP8JrlKYW+CppBIWnyiprO1Vdh7mSLgKINHHhjYV0\n", "ewBvBfrdMEcFAk4p3GP7KrBFpKGdxpC+jL8IfJr+35Go+lp8nTTk1VDyDxVJhwFfBj7Vzmvhe1I2\n", "YElah3TzdyhpwNR5EbFv3vdRUoeBdwI/7M9Bu8Z1mBsR++d9Ag4kDYN1aET8vbSCtpnSFPcrRcQL\n", "udPEcNJ4hOMi4vFcu56Z0zxfZlnbrYtrcQ1pNJGnJb2R9H/i7Ih4oK1lcZAyg9wFf2GgkvRW0jA/\n", "j8QA+iMpXIe5EbF/7lQzBrgxIh4utXC9KH8xLw9cGRE75l6N2wOfq3TLHyi6uBZvBb4daQbm9p5/\n", "AP39mdWVv6C/R7oHsQzw/oh4tNxS9b6q6yDgffnBzQEnPx/2OKkX2yH9tcNIMwrXYhfSvapeuRbu\n", "3WeWRcQzku4lPQf0wYEYoGCJ67DzQAxQuZlzCKl79bLAToVeoANK2dfCQcosU5qg7cOkL+Z+e++l\n", "karrMCBrDrmJ91VJ3wRuH6gBCsq/Fm7uMyuQNDQiXi27HGXzdUgkaSDdk6ynrGvhIGVmZh3Lz0mZ\n", "mVnHcpAyM7OO5SBlZmYdy0HKzMw6loOUWTdJWkPS3fn1hKTH8vIcSWc0PkLLyrGWpNsk3Slpu6p9\n", "75X0D0l3SXqzpL/n7e+UdGqD425YSV9j30F5GCWzXuHnpMy6KSJmA1sASJoIzImIH5RQlB2B+yLi\n", "8Br79idNXHihpA0rGyPiDuCOpTjnwcD9wIB7wNfK4ZqU2dITgKQxkq7Jy8dLOlfSHyXNkPRRSd+T\n", "dJ+k6/N4aEjaStIUSXdIukHS8CUOnmo2v5N0r6TfShop6R2kKd4n5FrccoX0nwD2Ar4p6XzSNO+V\n", "fcUyriVpsqT7Jf00l3P1nHSQpLPzvhslLac0z9g7gQtzDW3hOc3axUHKrH02At5PmjjxAmByRGwO\n", "vAJ8WNJg4HRgj4h4J/AL0iRz1U4HfhERbydNcX9aRNwDfAO4JCK2iIiFk85FxM+Aq4EvRcQB5CBa\n", "w0TgtxHxVuCXwPqFfaOAM/K+53MZf0mqhX0sIrYsntOsXdzcZ9YeAVwfEa9Luh9YJiIq8zP9HdgQ\n", "2AR4C/DbNDwag6g9X9O2wG55+QLSZHSQgk9XAYgG+wC2qxw3Im6UVJwT6N+FIZHuzOVt9rhmLeMg\n", "ZdY+rwFExAJJ8wrbF5D+9gT8IyLe08Sx2hUYujpucUik14Fi056HqbFe4+Y+s/ZoJqj8E1hL0rYA\n", "kgbn+Zuq/QXYNy/vD/yxNUXkFmDvfO6dgdXqpK18njnAKi06v1lDDlJmSy8K77WWYcnaR0TEPGBP\n", "4GRJ9wB3A++ucfxPA4fk6TP2Bz7bxTm6KldXyycAO+fu5nsCT5KCUM3y5vdzgJ+444T1Fg8wazZA\n", "SRoCvJ7vm70b+FFEbFl2ucyKfE/KbOBaH7hM0jKk+2e1nrcyK5VrUmZm1rF8T8rMzDqWg5SZmXUs\n", "BykzM+tYDlJmZtaxHKTMzKxjOUiZmVnH+v8N91qK1zV6ZgAAAABJRU5ErkJggg==\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6, 5))\n", "plt.plot(tof_range, res_numba, label=\"Numba\")\n", "plt.plot(tof_range, res_fortran, label=\"Fortran\")\n", "plt.plot(tof_range, res_python, label=\"Python\")\n", "plt.legend(loc=4)\n", "plt.ylim(0)\n", "plt.xlabel(\"Time of flight\")\n", "plt.xticks(rotation=45)\n", "plt.ylabel(\"Computation time\")\n", "plt.title(\"Elliptic orbit ($e = {:.3f}$)\".format(ss.ecc))\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Moderate eccentricity elliptic orbit" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2400. 7038.06111541 11676.12223083 16314.18334624\n", " 20952.24446165 25590.30557707 30228.36669248 34866.42780789]\n" ] }, { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ss = State.from_vectors(Earth, r0, v0 * 1.1)\n", "tof_range = np.linspace(tof.to(u.s).value,\n", " (ss.period * 4).to(u.s).value,\n", " num=8)\n", "print(tof_range)\n", "plot(ss)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 10.8 µs per loop\n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 40.8 µs per loop\n", "100000 loops, best of 3: 10.7 µs per loop\n", "The slowest run took 4.14 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.6 µs per loop\n", "10000 loops, best of 3: 41 µs per loop\n", "100000 loops, best of 3: 10.9 µs per loop\n", "The slowest run took 4.67 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 39.2 µs per loop\n", "100000 loops, best of 3: 11.2 µs per loop\n", "The slowest run took 7.44 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 41.1 µs per loop\n", "100000 loops, best of 3: 11.2 µs per loop\n", "The slowest run took 4.08 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 39.3 µs per loop\n", "100000 loops, best of 3: 10.7 µs per loop\n", "The slowest run took 4.16 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.6 µs per loop\n", "10000 loops, best of 3: 39.6 µs per loop\n", "100000 loops, best of 3: 10.8 µs per loop\n", "100000 loops, best of 3: 12.4 µs per loop\n", "10000 loops, best of 3: 34.6 µs per loop\n", "100000 loops, best of 3: 10.8 µs per loop\n", "The slowest run took 4.05 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 24.6 µs per loop\n" ] } ], "source": [ "res_fortran = []\n", "res_numba = []\n", "res_python = []\n", "r0_ = ss.r.to(u.km).value\n", "v0_ = ss.v.to(u.km / u.s).value\n", "for tof_ in tof_range:\n", " timeit_res_fortran = %timeit -o propagation.kepler(k_, r0_, v0_, tof_)\n", " timeit_res_numba = %timeit -o kepler_numba(k_, r0_, v0_, tof_)\n", " timeit_res_python = %timeit -o kepler_python_final(k_, r0_, v0_, tof_)\n", " res_fortran.append(timeit_res_fortran.best)\n", " res_numba.append(timeit_res_numba.best)\n", " res_python.append(timeit_res_python.best)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n", "AAAASUVORK5CYII=\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6, 5))\n", "plt.plot(tof_range, res_numba, label=\"Numba\")\n", "plt.plot(tof_range, res_fortran, label=\"Fortran\")\n", "plt.plot(tof_range, res_python, label=\"Python\")\n", "plt.legend(loc=4)\n", "plt.ylim(0)\n", "plt.xlabel(\"Time of flight\")\n", "plt.xticks(rotation=45)\n", "plt.ylabel(\"Computation time\")\n", "plt.title(\"Moderate eccentricity elliptic orbit ($e = {:.3f}$)\".format(ss.ecc))\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Near-parabolic orbit" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2400. 77662.41861854 152924.83723708 228187.25585562\n", " 303449.67447416 378712.0930927 453974.51171124 529236.93032979]\n" ] }, { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "iVBORw0KGgoAAAANSUhEUgAAAakAAACpCAYAAACRW8LvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", "AAALEgAACxIB0t1+/AAAIABJREFUeJztnXm4VMXVr98fyBAFGTTOA0cFB1QcPsXExCEaNMExDmAM\n", "wTjEBI3Gm6igyaeJXgQzmwR9buJIgkPihEJUTMCoURBHQFSIoHGARFTQoMiw7h9Vzdmn6T4T3b13\n", "d6/3eeo5u6tq11l79+5eXVWrfiUzw3Ecx3GySIe0DXAcx3GcYriTchzHcTKLOynHcRwns7iTchzH\n", "cTKLOynHcRwns7iTchzHcTKLOynHcRwns7iTclJDUmdJ10taKGmZpGclHZlX5zBJL0n6r6S/Sdou\n", "r3yspHdiGpNX1kfS1HjuXEmHtWBP0fqStpA0UdKbktbk21Gkva9Kek3Sh5LultQrUXaypH/E/zW1\n", "hXY6SfqzpAXxfx+cV36hpFnxHr4q6fvtvc6W7C7QVhdJN0haKultSRfkle8l6en4v2ZKGlCutiRd\n", "EM9bGp+rzs3dB6dKMDNPnlJJwIbAZcB28fVgYBmwfXy9KfA+cALQGbgaeCJx/tnAS8BWMc0Bzk6U\n", "PwH8FOgCfAV4D9i0GXuK1gc2A74FHACsydncTFv947V8DtgI+CNwa6L8MOBE4IfA1Bba6gScBxwI\n", "vAUclFd+IbAX4UdnP2AhMKSd19ms3QXaugp4BOgB7AK8DRwRyzoDrwHnx2v4TrStU6nbAo4AFgG7\n", "Aj2BqcBVaT/jntY/pW6AJ0/JBDwPHB+Pvwk8lijbEFgO9Iuv/wGcmSj/Rs6JxS/rj4GNEuWPJJ1Y\n", "3v9tVX1gg1Y6qdHAHxKvdwBWJNuP+We25KTy6v8r30kVqPMr4Jr2XGdr7U6Uvwkcnnj9o5xTAwYB\n", "b+TVfy3neErU1qB4PAG4MlF2KPB22s+zp/VPPtznZAZJmxO+ROfErP4EpwWAmS0H5sd8gN2S5cAL\n", "ibL+wKtm9t9E+fOJ8nzaWr8lmthmZq8Svuz7tbO9ViFJwEHA7ETefZIuii9bus78e97EbkkjJd0X\n", "j3sBW9L8e/BCnokF72kJ2ir0LGze3FClUx1skLYBjgNh3oUwtHSTmb0SszcC/pNXdRnQPR53A5bm\n", "lXUrUpYr37qICW2t3xLF2uteoG4puTz+vTGXYWZHJ8oL2fUBwUFAuOdF7Taz5Lxf7l7nvwfF3p/8\n", "8iTr21ahZ4FY/l6B/+dUCd6TclJHUgdgPGEY6txE0YfAxnnVexC+VAuV94h5xc7tSfzykjRH0gcx\n", "2ODA2GbR+i3Y//nY1geSZiX+f49mbC85ks4FvgYMNrOVRaq15p621u7cvc5/D4q9P7nyQve0PW31\n", "bKY8dw1lu99OZXAn5aRKHJ66Hvg0cIKZrU4UzwEGJOpuBOxI43DgHELAQI4BNA5zzQF2kNQtr3wO\n", "gJn1N7PuZraxmT0OvNhc/eYws0djW93NbI8itu9ImPx/Jf/0ltpvDZJOBy4CDjOzt5qp2ux9ofV2\n", "Y2bvEYIbmnsP9sw7bU8K3NN2trUHzT8Li2O7TjWT9qSYp/pOwHWEaLN1JuZpjO77CtCVEN33j0T5\n", "2QTnshVhWG4O8M1E+RPAT+K5uSi2TZqxpdn6Mb8bIXCiH9C1mbZ2Iww/5aLkJgATEuUdYnvfIgQu\n", "dKFI1Fus3yXW/xfwxeT/Bk4lfMHv0sp7XvQ6W7K7QFtXAdMIvZpdox25YIbOhAi886L95wELgA1K\n", "3RYhuu/teF6v2M7otJ9vT+ufUjfAU/0mYPv4hb+cMCyTS6ck6hwGzI11/kZeVB0wFlgS05gC7U+N\n", "584FvtAKe4rWj7auAVbn/rbQ3imECLQPgbuBnomy0xLt5dINzbS1MP9/0xi6nwtuSN7DcYlzJwMj\n", "23Cdzdl9CTA58bozoSe8lBAC/t28tvYCZsb/NRMYkCg7FZhdirZi+QXxvKWxnaJO31P1JMU3NzNI\n", "6kh4AN8ws6Ml9QZuJ3ywFgInm9n7se4o4HTCB/Y8M3so5u8L3ET4pTjZzM6P+V2AW4B9CF9qQ8zs\n", "tcpdneM4jtMWsjgndT5hCCfnPUcCU8ysH/DX+BpJuwFDCMMTRwLj4vwGwLXAGWbWF+ibUDE4A1gS\n", "839B+BXuOI7jZJRMOSlJ2wBfBn4P5BzOMcDN8fhm4Lh4fCxhod9KM1tIWD8zUNKWQHczmxHr3ZI4\n", "J9nWnYShJMdxHCejZMpJEXo3FxLG3HNsbmaL4/FiYPN4vBXwRqLeG4TJ8/z8N2lc67I1YeIZM1sF\n", "LI3DiY7jOE4GyYyTknQU8G8ze5bGXlQTLEygZWsSzXEcxykbWVKc+CxwjKQvEwIeNpY0HlgsaQsz\n", "WxSH8v4d678JbJs4fxtCD+rNeJyfnztnO+AtSRsAPczs3XxDJLkjdBzHaSNmVrCDsb6NZi4BBwP3\n", "xeOrgYvj8UhimDEhYOI5QthqA/BPWButOB0YSOiRTQaOjPkjgGvj8VDgtiL/39K+B1lJwOVp25CV\n", "5PfC74Pfi2bvhZWj3Sz1pPLJ9WbGAHdIOoMYgg5gZi9KuoMQCbgKGGHxThGc0U3Apwgh6A/E/OuB\n", "8ZLmEULQh1bgOhzHcZx2kkknZWaPEFbhY2E47vAi9UYTthbIz3+aIJmSn7+C6OQcx3Gc7JOZwAkn\n", "s0xL24AMMS1tAzLCtLQNyBDT0jag1smc4kQWkGRWjglAx3GcGqVc35uZHO5znKwhIULUKWZ8VKD8\n", "MELATw+CQGqPmP6fGbcWqP9T4BzW1e8bZcZ1Ber/L031/lYTtry42ow7C9TvT1CWfy+RPjTzJRxO\n", "deE9qQJ4T8qROBs4i0Zn05MQzHORGb8qUP/LwP8QxE2T6SUz1tk6Q6IT4Udih0TqCHxUxAluEu3I\n", "1d0gvv6XWZPF67n65xDmX3slUhfgbDNuKFB/d0Kk7OvAEndmTlsp1/emO6kCuJOqPSS6A7sAfYGd\n", "YuoL3GO2roajRAOhJ7KUsF3IUjM+rpzFpUeiMyAzVhQouwj4KkHIOeesXgN+bMY/KmqoU5XUvJOS\n", "1JXGfXU6A/ea2ag0VNDdSVUnEr2AjYr0LIYTxIvnA/MSf+easaSihmYciY0Ji963A14ocj+vAjYh\n", "7OE1O/5d7D2w+qXmnRSApA3NbHlUg3gM+D5BFPYdM7ta0sVALzMbGVXQJwD7ETT5Hgb6mplJmgGc\n", "a2YzJE0GrjGzBySNAHY3sxGShgDHm9k6a6XcSWUfiR2BYTT2iHYCOgG/M+N7adpWD0jsT/js9Y9p\n", "91h0sNna3XSdOqIuAifMbHk87EwYn3+P4KQOjvk3E0I+R5JQQQcWSsqpoL9GYRX0B2Jbl8X8O4Hf\n", "lPWCnHLSmfD8TgHGEXpG//Ff8pXBjBlA7jOWCyzZHFhHZiyWjyaowkwn9F5XV8JOp/rJlJOS1AF4\n", "BtiRIF80R1JzKuhPJk7PqaCvpJUq6JKWSuptBfT7nPSQ2BI4NKYdzfhCfh0z5gI/qLRtTmHij4NF\n", "hcqiA3sTOAS4GNhCYibh8/sDsya7HjhOEzLlpMxsDbCXpB7Ag5IOzSu3Som/Sro88XKamU2rxP+t\n", "VyQ6AL8m7PG1GfB3wnbx10jIe0jVS3zvfhtTLlJxf2BXd1DVi6RDCD88ykqmnFQOM1sqaRKwLymo\n", "oEcbLi/V9TgtY8aa+Ov6euB5Hw6qXWKgyl9iWoc43/Uzwk7cfwOeMGNl5Sx0WkP84T4t91rSZUUr\n", "rweZkUWStKmknvH4U8AXgWeBicDwWG04cE88nggMldRZUgNh8nyGmS0ClkkaGLeTHwbcmzgn19aJ\n", "hA+BU2YkekgcJfEziWekwr++zLjRjGfcQdU9s4ArCALRvwQWSfyh2HPj1DaZie6TtAchMCK3WHG8\n", "mf0khqDfQegBLaRpCPolhBD0VcD5ZvZgzM+FoOdU0M+L+V2A8cDeRBV0C1vP59vi0X0lQGIY8B1g\n", "V8Ik+1TCL+On/Jex01oktgGOAhaZrf2R6mSMughBzwrupEqDxAGEdW/Tq30hrJNdJD5HUPZ4J21b\n", "6plyfW9mZrjPqV6kJnODazHjSTMecQfllJmTgPkSkyWGSXRL2yCndLiTctqFRGeJUyWmA/fH6DzH\n", "qThmnE8IkPoDMAR4XeJafyZrAx/uK4AP9xVHYnPgbOBbwFzgGuB+D3ZwsoLE1sAhZvwxbVvqCZ+T\n", "qiDupIojcQNhwfSvXf7GqTYkOvjarPJQ83NSkraVNFXSHEmzJeUi8npLmiLpFUkP5cLUY9koSfMk\n", "vSRpUCJ/X0mzYtmvEvldJN0e85+UtH1lr7ImOMOMs91BOVXKbyX+JPE/aRvitI7MOCnCr/MLzKw/\n", "cABwjqRdCTp9U8ysH2Fd00iAKDA7BNgNOBIYF9dFAVwLnGFmfYG+ko6M+WcAS2L+L2DdLRockNhU\n", "4iuFylz5walyLiKIV98t8ZcYGehkmMw4KTNbZGbPxeMPCfMdWxNEYW+O1W4miMVCQmA2rnXKCcxu\n", "SWGBWfLaupMgweNEJAZIXE/YwuKIqLnmODWDGR/ETSt3Au4CbolRgZn5LnSaksk3RlIfwoLb6UBz\n", "ArNJIdmcwGx+flGBWWBpXCxc10Q1iGnAJIJSdb84pOe9JqcmMWOFGb8D+gFX+DxVdsmcdp+kboRe\n", "zvlm9kHjCJ4LzJaRHQlDpHe5EoRTT5ixCngibTuqkboUmJXUieCgxptZTv7EBWbLTBz+cBwngcTh\n", "wF99RKEw9SgwK4IC9otm9stEkQvMOo5TUSS6A1cBUyX6pW1PPZOZdVKSPkfYQ+gFWPvLZRRBmNQF\n", "ZktAXOTYx4zH07bFcbKOREfgXMLmmlcS1gb63FURfDFvBalFJyVxIMHZX+3De47TeiT6En70fgQM\n", "dSHbwtT8Yl6nPEhI4luEcNsz3UE5TtswYx5wMHAfsDxlc+oO70kVoFZ6UhJdgN8AnwGOM2N+yiY5\n", "jlOjlOt7M1PRfU7JGQB0Bz5jxgdpG+M4jtNWvCdVgFrpSTmOU14kNgRkxn/TtiVt6mJOStINkhZL\n", "mpXIc4FZx3GyyhnAAxIbp21IrZIpJwXcSBCLTeICs63AtcccJxV+C8wBJklslLYxtUimvtjM7FHg\n", "vbxsF5htAYmtgEclBqZti+PUE3Hd1AjgVeB2yef5S02mnFQRXGC2GST2Iix4nhT/Oo5TQaKjOpMQ\n", "iPbLFqo7baTNTkpS16jcUHEsRHl4pEdTrgJGmzHaNcYcJx2iMPMQYKVEp7TtqSVa7JpK6kAYLjsF\n", "+CzBsUnSaoJ68B+Be6x8YYKpCMxWgwq6xPbAflB4g0LHcSqHGUuBC9K2o1JkSQV9GvAo8FPgOTNb\n", "AWt18PYmzPNcABxUJhtzorBjWVdgdoKknxOG8XICsyZpmaSBhOGvYcA1eW09SQsCs1Wigv51YIIZ\n", "H6VtiOM49UWlVNBbXCclqUvOMa1PnVYZI91KkB/ZlDD/9L8EBXMXmC1AVJTY0GydYBPHcZyK4gKz\n", "FaRanJTjOE5WSF0WSdJ+wCVAn8R5ZmZ7ltoox3GcLNMweMyWhK3nNwI+AGYvmDSyyYiGxB5AXzPu\n", "SsHEmqHVPSlJrwDfB2ZD454qhYbLqh3vSTmOk0/D4DECDiesizoa6Jgo/hi4HRi3YNLIGQAS+wJ3\n", "AzvEbeprmtSH+yQ9bmYHltqALOJOynGcJA2Dx/QibHdzSCuq3wp8Y8GkkSskpgOXm/GXctqXBbLg\n", "pAYR1gE8DHwSs83Maq4rm2UnFeWPhgHjfZdQxyk/DYPHbEyIcG7L1MYDwNELJ488F9jTjNPLYlyG\n", "SH1OihC6vXM8J/nlWHNOKuN8ETjPbK28k+M45eUW2uagIOiJjgGuAy6UkC+2bx9t6Um9DOxSxkW7\n", "FSMKzv6SMKb8ezMbm1ee5Z7UncAUM65L2xbHqXUaBo/ZBZjbztP/u3pl163+NeW7LxP2dFtYOsuy\n", "Rxa26vgHQXG8qpHUkbBb7ZGE6zlF0q7pWtU6JLYAvgBMSNsWx6kTRqzHuRu9/fjwGQS90VclppTI\n", "prqiLU7qM8BzcV+nWTG9UC7Dysj+wHwzW2hmK4HbCIrq1cBpwF1mLEvbEMepdWI039fbe/6i6UNY\n", "tbzXzoBiOtwdVdtpy5xU/j5PUJ1ir2uV0CNvQPa3uIgBE2cCX0vbFsepE3rE1C4+XtKnUPYX2tte\n", "vdIWJ7WJmT2dzJB0FPBaaU0qO61yrBkUmO0ANACvpGyH49QLqez2UC1kSWA2x+8kDTezWQCSTiEI\n", "y95fFsvKR756+rY03X8KyJ7ArBmrJG4n9KSuaam+4zjrzfvrc3LXTRby8ZKG/Oy/rU+bWaJSArNt\n", "mZM6EbhZ0i6SziJMKH6xHEaVmZmELeX7SOpMWPs1MWWbWsvvgLMkMhl56Di1xIJJI1cAj7X3/C0G\n", "3k6n7ovfIizZWQM8bFaV35mp0monZWavEvaUuhs4ATjCzJaWy7ByEXfkPRd4EHgRuN3M2htiWmmm\n", "AV2BA1K2w3HqhXHrc/LWn7/xGODPBA0/d1DtoDVbdczKy9qM0A3+hBoVmM34OqmLgF3qYQW746RN\n", "w+AxnYHXCWHkbeWphZNHHkrYqHXTWt/3LU3FiWOB1VB8iEnRupJZ5TTHzcC9Eh1cFslxysuCSSM/\n", "aRg85kzCZqsdW6qf4EPgbEJgwcxad1DlpDXDfTcCJwOd49qitQnoIuli4JFyGuk0YsZiMw5wB+U4\n", "lWHBpJH3E9YormzlKcuAYxZMGvksYWrk3jKZVhe0amde4FTCfNTuhL1TBHQjbNvxR2CCmX1StJEq\n", "I8vDfY7jpEPD4DGfJ+wWfhiFR5ZWERzSZQsmjZwj0Z0wVNjfjLcqZ2k6pK6CHo3oSNjaHeAdM1td\n", "aoOygDspx3GK0TB4TD/gm8CuhB/rywhRw79bMGnkWmckcQIwxIyTUzG0wmTCSZULSScBlwO7APuZ\n", "2TOJslHA6YR5sfPM7KGYvy9wEyHabbKZnR/zuxBUi/cBlgBDzOy1WDYcuDQ2faWZ3VLEHndSjuOs\n", "NxJdzFiRth2VIAsCs+VkFnA88PdkpqTdCOuYdiPIMo2TlLsJ1wJnmFlfwrqnnGzTGcCSmP8LYGxs\n", "qzehq75/TJdJ6lnWq3Icp66pFwdVTjLhpMzsJTMrJPdzLHCrma2MgRrzgYGStgS6m9mMWO8W4Lh4\n", "fAys3WvpTsL4McARwENm9r6ZvQ9MobAeYdUgcZLEiWnb4TiOUy7a5KQk3STpJ5KOk9SedQNtZSua\n", "Sha9QRCIzc9/M+ZDQkA2LtxdKmmTZtqqZpYDF6ZthOM4Trlok5Mys9OAG4BewI8lzZR0kaQW25E0\n", "JbHFRzId3T7THcIW1VtJbd411HGcMiA10QV1SkBbBGaRdAAh2OJG4MYY8PA8IbDh982da2btkQTJ\n", "F4PdhtADejMe5+fnztkOeEvSBkAPM1si6U2aKvZuSzNijxlUQV8HM1ZL/Ba4QeI4s3WFch3HqQwS\n", "Q4EfS+xmxqq07Sk3WVRBBzgcWCnpu4ShpteBd4DFJbQpGR0yEZgg6eeEobm+wAwzM0nLJA0EZgDD\n", "aFQGnwgMB54kiOL+NeY/BIyOwRIiiONeXMyIrKmgN8NYwvYjMyQGmTE7bYMcp96QOJjwHXR4PTgo\n", "qJwKelud1D3AhmY2Npch6UyabiLYZiQdT3iDNwUmSXrWzL5kZi9KuoMgBLsKGJGQXxpBCEH/FCEE\n", "/YGYfz0wXtI8Qgj6UAAze1fSFcBTsd6PYgBFVWOGAWMlpgOvpm2P49QbEvsBfwJOMaMadyvPNJlY\n", "J5U1fJ2U4zitQWIgYfTmLLOq2fKnLNT0Yt6s4U7KcZzWIHEY0NWMSWnbkjbupCpIrTgpiW7A7mY8\n", "mbYtjuPUNrWuOOGUh10I23qM8N18HcepRrwnVYBa6UkBSOxECHiZDpxjxscpm+Q4VYlENzM+TNuO\n", "rOI9KaddmDGfsN38xsAjUtWrbDhOxZH4CjDPF+tWnkw4qSi1NFfS85LuktQjUTZK0jxJL0kalMjf\n", "NypWzJP0q0R+F0m3x/wnJW2fKBsu6ZWYvl65K0yX+OvvZEKP6oKUzXGcqkGil8R4wnrE483Wb7mN\n", "03Yy4aQIC237m9kA4BVgFLgKeikxw8y4Ctf6c5wWkVBUkJgDvAfs5QFI6ZAJJ2VmU8wstx36dBol\n", "j1wFvcTExb+O4zRPd8IP3hPMOM+M/6ZtUL3SVsWJSnA6cGs83gqa/HrJKZevpJUq6JJqWQW9JMRx\n", "9rfMqMmdlh2nrZixjCCd5qRMxZyUpCnAFgWKLjGz+2KdS4FPzGxCpewqRjUIzJaQK4CDJH4D3GBG\n", "1ctFOY5TXrIqMNtuWlJBl3Qa8GUah+cgRRX0KhKYXW/MOC3Ku3wH+IHEbcCvzZibsmmOUzYkPkUY\n", "0jsK+JIPhbeNSgnMZmJOKgY9XAgca2bJdTwTgaGSOktqoFEFfRGwTNLAGEgxDLg3cc7weJyvgj5I\n", "Uk9JvQhd+QfLemFVhBnTzfga0B/4D3CdLwB2ahGJbhLfA/4JDAJ+6A4qu2RiMW9ULO8MvBuznjCz\n", "EbHsEsI81SrgfDN7MObvS1MV9PNifhdgPLA3UQU9Bl0g6RvAJfF/XGlmuQCLfHtqZjGv4ziNSJwD\n", "XAZMBUab8XzKJtUMrt1XQdxJFUdiELDQjFfStsVx2orEgcDiuMjdKSGuOOFkhf7AYxKTJI6Q/Bly\n", "sodUeL7djMfdQVUX/gXjtAkzfgFsT1iDNhZ4UeIcd1ZO2kh0kDhY4mZglj+TtYG/iU6bMeMjM24g\n", "zPt9E9jSjDUtnOY4ZUFib4mfAK8BvwZeAA7yZ7I28DmpAvicVGmQkEdNOeVG4ibC0pNbzZidsjl1\n", "S03PSUm6IorLPifpr5K2TZS5wGz18jOJ6RJj4vzVRmkb5FQnEhtI9CpUZsZpZlzqDqo2yYSTAq42\n", "swFmthdBqfsycIHZGuAS4GJgBXApsFjicYm90jXLqQYkPi0xROIPwGLgnLRtcipPJpyUmX2QeNkN\n", "eCceu8BsFWPGx2ZMM+MyMw4CNiP8AHmjUH2JjhU10MkkcY7pOcLnfRjwODDAjCvTtcxJg8wIzEr6\n", "v4QH8iNCTwdcYLamMGM58HChshiJ9ZrEXMJCy6nATDNWVtBEp4JIdC2yU/RC4Nv4+++QIYFZM7sU\n", "uFTSSOCXwDcqZVsh6kxgNnXMWCOxO3AQcChhOLdBYgpwkgdgVDexl9wfGJhIm0nrRoaa8R7wROWt\n", "dNpC3QnMJpgATI7HLjBbR0T19YkxIbEJsFshBxXFQTvFLRWcDBM1IF8HPiTsF/ck4UfICx4mXr1U\n", "SmA2E8N9kvqa2bz48ljg2Xg8EZgg6eeEobmcwKxJWiZpIDCDMEx4TeKc4YQPQr7A7OgYLCGCwOzF\n", "5b0yZ30wYwnwaJHizwH3SHwIzCPMX8wHHjNr/OA45SMO0W5H6CHl0g/NeD1ZzwyT6OcbBzrtIRNO\n", "CrhK0s7AaoIy8bcBzOxFSXcALxIEZkdY48KuETQVmH0g5l8PjI+itUuAobGtdyVdATwV6/0oBlA4\n", "VYgZUyS6AVsSfrzsFP/uDOs6KYn+wB5Eh2bG0spZW3tIXA+cDCwDZhO2Wf87obe0Du6gnPbii3kL\n", "4It5aw+JLxB+/OSc2UcEh3WdGbekaVsWiPOBexIkr7aLf7cHLjRbO/yerL8TsCTOHzmOq6BXEndS\n", "tU2cI9mc4KzeNWNOgTrnEoaL3weWJtJks3Un9eNC5TXAx1kI8pDoR7i+XnnpTjMeK1B/FDCAIC30\n", "euLv/BiV6TjNUq7vzawM9zlOxYhOZFFMxZhIGMLqCfSIqSfFPzOXAN8HJDVxamPNuCO/ssRJwMGE\n", "tYrJdKvZ2nnUZP0zCDtXdyDMqW4Qbfp1ofaBowlrBN9LpH/Fv+tgxlVFrstxUsV7UgXwnpTTXiS6\n", "0ujUegBvmfFmgXoHE+bI1uSlJ4r07PYGdgAs1ltNcIIvm7G4PFfjOK3Hh/sqiDspx3GctlHTArM5\n", "JH1P0pqos5fLc4FZx3GcOiUzTioqn3+RMGGby3OB2ZSJq8od/F7k8PvQiN+L8pMZJwX8HLgoL88F\n", "ZtPnkLQNyBCHpG1ARjgkbQMyxCFpG1DrZMJJSToWeMPMXsgrKiYKm59fVGAWcIFZx3GcKiULArOX\n", "AqOAQcnqFTHKcRzHyTSpC8xK2h1oAJ6P003bAE9HXb7UBGYledhjpFzCkdWI34uA34dG/F6Ul8yF\n", "oEtaAOwbtfZ2I6ii708YmnsY2CkKzE4HziMIzE4CrjGzBySNAPYws29LGgocZ2ZDY+DETGAfQk/t\n", "aWAf1+9zHMfJLllUnFjrNV1g1nEcp77JXE/KcRzHcXJkIrqv1Ej6iaS5kp6XdJekHomysi8OltQg\n", "aXo85zZJnSpx3YWQdJKkOZJWS9onkd9H0keSno1pXKKsru5FLKur5yKJpMslvZF4Fr6UKPPF9EWQ\n", "dGS8L/Mk1czedJIWSnohPgszYl5vSVPie/eQEmtMS/mMFMTMai4RFgV3iMdjgDHxeDfgOaAT0Iew\n", "7irXm5wB7B+PJwNHxuMRwLh4PAS4LR73Jux91TOmfxKCNADuAE6Ox9cC30rxXuwC9AOmEubgcvl9\n", "gFlFzqm3e1F3z0XefbkM+D8F8st9X3qmfe3rcc86xvvRJ96f54Bd07arRNe2AOidl3c1cFE8vpgy\n", "fKcWSzXZkzKzKWaW25Z6Oo2RgOVeHPwlSQIOBf4c692caKvimNlLZvZKa+vX6b2ou+eiAIWWffhi\n", "+uLsD8w3s4VmthK4jXC/aoX85yH5viaf3VI+IwWpSSeVx+mwdtO2SiwO7g28n3CSybayRkPs0k+T\n", "9LmYtzX1dy/8uYDvKAyPX58YyvHF9MVZe52Rar+eJAY8LGmmpLNi3uZmllPbX0zYjw1K94z0pghZ\n", "jO5rFSq+OPgSM7sv1rkU+MTMJlTIrFSiUFpzLwrwFrCtmb0X52fukdS/hGZV070oN6lHJzVzXy4l\n", "DD3+OL6+AvgZQQPTKU7q72kZOdDM3pb0aWCKpJeShWZmquA60qp1UlZkcXAOSacRNolLdiUrsTj4\n", "XaCnpA5j1eYMAAADvklEQVTxV/M2sY2y0dK9KHLOJ8An8fgZSf8k7ORad/eCGn0ukrT2vkj6PZBz\n", "5qktpq8C8u/NtjTtOVQtZvZ2/PsfSXcThjYXS9rCzBbFobx/x+qlekbeLWZPTQ73KSiiXwgca2Yf\n", "J4omAkMldZbUQPhSnmFmi4BlkgbGuYNhwL2Jc4bH4xNh7a6pDwGDJPWU1IsQrPGghdnAqcBJsd5w\n", "4J6yXGjbWTvOLGlTSR3j8Q6Ee/FqfEDr6l5Q589F/NLJcTwwKx6X/b6U7aLKz0zC7gt9JHUmBABM\n", "TNmm9UbShpK6x+ONCHJ1s2j6viaf3VI+I4VJO5KkHAmYR9jy49mYxiXKLiFM7r0EHJHI3ze+GfMJ\n", "6hW5/C6EqKx5wJNAn0TZN2L+PGB4Ir+BELAxD7gd6JTivTieMP77EWG79L/E/BOA2fH+PA0Mrtd7\n", "UY/PRd59uQV4AXie8OWzeSXvS7Um4EvAy/EejErbnhJdUwMhWu+5+P0wKub3Jij+vEL4wdEzcU7J\n", "npFCyRfzOo7jOJmlJof7HMdxnNrAnZTjOI6TWdxJOY7jOJnFnZTjOI6TWdxJOY7jOJnFnZTjOI6T\n", "WdxJOY7jOJnFnZTjOI6TWdxJOU7GiJvCPaJAH0mzWj6r2bb+Lsk/605V4g+u42SPU4H7rQRyMGa2\n", "AniUbO1d5Titxp2U42SPU2gU41yLpB0kPRO35e4Tt+u+UdLLkv4oaZCkxxW2+N4vcerE2KbjVB1V\n", "u1WH41QjUXl+CLADQex2f+BnZvZqonx3y9tBWNLOwK0EYdZZkvoAOxKEgl8EngKGmNmBko4hiH4e\n", "H09/DvhsmS/NccqC96Qcp7IMIGyZ/Srh8/cn4O1E+abAB3nnbEZQJ/+qmSXnpxaY2Zw4LDiHoFIN\n", "Qb26T65SHPLrIKlrCa/DcSqCOynHqSBm9kx0Gp8BppnZNDP7KK+a8l6/T9h65vN5+SsSx2uIm1jG\n", "4/xRElHbu8k6NYo7KcepIJL2k7QpYUhvgaR8x/MO0C0v7xPgK8DXJbV5bklSF2B1dI6OU1X4nJTj\n", "VJYjgcXA45KOJziltZjZakmzJe1sZi83ZttySUcBUyR9QNhMLr9nZEWO9waeKOlVOE6F8E0PHSdj\n", "SDqNsDvu2BK1Nxp4yszuLkV7jlNJ3Ek5TsaQ1JkQBHHw+q6VikN9U0rRluOkgTspx3EcJ7N44ITj\n", "OI6TWdxJOY7jOJnFnZTjOI6TWdxJOY7jOJnFnZTjOI6TWdxJOY7jOJnFnZTjOI6TWdxJOY7jOJnl\n", "/wP5tprTGUKFYwAAAABJRU5ErkJggg==\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ss = State.from_vectors(Earth, r0, v0 * 1.38)\n", "tof_range = np.linspace(tof.to(u.s).value,\n", " (ss.period * 2).to(u.s).value,\n", " num=8)\n", "print(tof_range)\n", "plot(ss)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 4.29 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 11.3 µs per loop\n", "100000 loops, best of 3: 18.7 µs per loop\n", "10000 loops, best of 3: 55.6 µs per loop\n", "100000 loops, best of 3: 11 µs per loop\n", "The slowest run took 6.14 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 13 µs per loop\n", "10000 loops, best of 3: 44.6 µs per loop\n", "100000 loops, best of 3: 11 µs per loop\n", "The slowest run took 4.01 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 39.6 µs per loop\n", "100000 loops, best of 3: 11.3 µs per loop\n", "The slowest run took 4.20 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 13 µs per loop\n", "10000 loops, best of 3: 48.9 µs per loop\n", "100000 loops, best of 3: 11.3 µs per loop\n", "The slowest run took 4.55 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 13 µs per loop\n", "10000 loops, best of 3: 49.9 µs per loop\n", "100000 loops, best of 3: 11.2 µs per loop\n", "The slowest run took 5.00 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.5 µs per loop\n", "10000 loops, best of 3: 38.6 µs per loop\n", "100000 loops, best of 3: 11.2 µs per loop\n", "The slowest run took 4.53 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.7 µs per loop\n", "10000 loops, best of 3: 44.1 µs per loop\n", "100000 loops, best of 3: 10.9 µs per loop\n", "The slowest run took 4.47 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.6 µs per loop\n", "10000 loops, best of 3: 25.8 µs per loop\n" ] } ], "source": [ "res_fortran = []\n", "res_numba = []\n", "res_python = []\n", "r0_ = ss.r.to(u.km).value\n", "v0_ = ss.v.to(u.km / u.s).value\n", "for tof_ in tof_range:\n", " timeit_res_fortran = %timeit -o propagation.kepler(k_, r0_, v0_, tof_)\n", " timeit_res_numba = %timeit -o kepler_numba(k_, r0_, v0_, tof_)\n", " timeit_res_python = %timeit -o kepler_python_final(k_, r0_, v0_, tof_)\n", " res_fortran.append(timeit_res_fortran.best)\n", " res_numba.append(timeit_res_numba.best)\n", " res_python.append(timeit_res_python.best)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n", "RU5ErkJggg==\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6, 5))\n", "plt.plot(tof_range, res_numba, label=\"Numba\")\n", "plt.plot(tof_range, res_fortran, label=\"Fortran\")\n", "plt.plot(tof_range, res_python, label=\"Python\")\n", "plt.legend()\n", "plt.ylim(0)\n", "plt.xlabel(\"Time of flight\")\n", "plt.xticks(rotation=45)\n", "plt.ylabel(\"Computation time\")\n", "plt.title(\"Near-parabolic orbit ($e = {:.3f}$)\".format(ss.ecc))\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hyperbolic orbit" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2400. 36342.85714286 70285.71428571 104228.57142857\n", " 138171.42857143 172114.28571429 206057.14285714 240000. ]\n" ] }, { "data": { "text/plain": [ "(array([-25000., -20000., -15000., -10000., -5000., 0., 5000.,\n", " 10000.]), )" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ss = State.from_vectors(Earth, r0, v0 * 1.8)\n", "tof_range = np.linspace(tof.to(u.s).value,\n", " 100 * tof.to(u.s).value,\n", " num=8)\n", "print(tof_range)\n", "plot(ss)\n", "plt.xticks(rotation=65)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 12.1 µs per loop\n", "100000 loops, best of 3: 13.3 µs per loop\n", "10000 loops, best of 3: 56.5 µs per loop\n", "100000 loops, best of 3: 11.7 µs per loop\n", "100000 loops, best of 3: 12.9 µs per loop\n", "10000 loops, best of 3: 47.1 µs per loop\n", "100000 loops, best of 3: 11.9 µs per loop\n", "100000 loops, best of 3: 13 µs per loop\n", "10000 loops, best of 3: 46.8 µs per loop\n", "100000 loops, best of 3: 11.6 µs per loop\n", "The slowest run took 4.02 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 12.8 µs per loop\n", "10000 loops, best of 3: 47.1 µs per loop\n", "The slowest run took 6.14 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 11.5 µs per loop\n", "100000 loops, best of 3: 13.2 µs per loop\n", "10000 loops, best of 3: 48.5 µs per loop\n", "100000 loops, best of 3: 11.9 µs per loop\n", "The slowest run took 4.28 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 13.2 µs per loop\n", "10000 loops, best of 3: 47.7 µs per loop\n", "100000 loops, best of 3: 12.1 µs per loop\n", "The slowest run took 4.15 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 13 µs per loop\n", "10000 loops, best of 3: 49.4 µs per loop\n", "100000 loops, best of 3: 11.6 µs per loop\n", "100000 loops, best of 3: 13.3 µs per loop\n", "10000 loops, best of 3: 49.3 µs per loop\n" ] } ], "source": [ "res_fortran = []\n", "res_numba = []\n", "res_python = []\n", "r0_ = ss.r.to(u.km).value\n", "v0_ = ss.v.to(u.km / u.s).value\n", "for tof_ in tof_range:\n", " timeit_res_fortran = %timeit -o propagation.kepler(k_, r0_, v0_, tof_)\n", " timeit_res_numba = %timeit -o kepler_numba(k_, r0_, v0_, tof_, numiter=1000)\n", " timeit_res_python = %timeit -o kepler_python_final(k_, r0_, v0_, tof_)\n", " res_fortran.append(timeit_res_fortran.best)\n", " res_numba.append(timeit_res_numba.best)\n", " res_python.append(timeit_res_python.best)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n", "ZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXl\n", "IGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVmZpXlIGVm\n", "ZpVVaJCSNE3SrZJul3RkizQn5e03SNq6v30lrStplqTbJF0pae26bUfn9LdK2qnJe10i6W9D/TnN\n", "zKwYhQUpSaOBk4FpwBRgb0lbNqSZDmweEZOBg4FTOtj3KGBWRGwBXJWXkTQF2DOnnwZ8W9Kouvd6\n", "N/AYEIV8YDMzG3JFlqS2BeZFxPyIWAKcB8xoSLMbcCZARFwDrC1p/X72Xb5Pfn1nnp8BnBsRSyJi\n", "PjAvHwdJawIfB74AaKg/qJmZFaPIILUhcHfd8j15XSdpJrbZd0JELMrzi4AJeX5iTle/z8Q8/3ng\n", "q8CTA/4UZmZWmjEFHrvTarVOSjZqdryICEnt3keSXgm8OCI+LmmTtm8iHVu3ODsiZneQNzOzniJp\n", "KjC1G+9VZJBaAEyqW57EiiWdZmk2ymnGNlm/IM8vkrR+RNwnaQPg/n6OtR2wjaR/kj7vCyX9OiJ2\n", "bMxwRBzb+cczM+tN+Qf87NqypJlFvVdH1X2SNpH01jy/hqS1OtjtWmBy3nccqVHDJQ1pLgH2y8fd\n", "Dng4V+W12/cSYP88vz9wUd36vSSNk7QpMBmYExHfiYgNI2JT4A3Abc0ClJmZVU+/JSlJBwMfAtYF\n", "NiOVUE4B3tJuv4hYKukw4ApgNHB6RNwi6ZC8/dSIuFTSdEnzgCeAA9vtmw99PHC+pIOA+cAeeZ+5\n", "ks4H5gJLgUMjorEqsGm1oZmZVZNWvo43JJBuILWS+1NEbJ3X/S0iXtaF/HWNpIgIt/wzMxugIq+f\n", "nVT3PR0RT9dlZgwujZiZWRd0EqR+K+kYYA1JbwMuAH5ebLbMzMw6q+4bDRwE1LoZugL4XpP7PcOa\n", "q/vMzAanyOtnv0GqVzhImZkNTqn3pCTtKumvkh6S9FieHi0iM2ZmZvU6qe67A3gXcFNELOtKrkrg\n", "kpSZ2eCU3brvHuDmkRygzMysmjrpFulI4DJJvwGeyesiIk4sLltmZmadBanPk8ZhGg+MKzY7ZmZm\n", "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\n", "tHbdtqNz+lsl7ZTXrS7pl5JukXSTpC93mn8zMytPuyC1dptt4zs5uKTRwMnANGAKsLekLRvSTAc2\n", "j4jJwMHAKR3sexQwKyK2AK7Ky0iaQmrYMSXv921JtSLoVyJiS2BrYHtJ0zr5DGZmVp52QepaSQc3\n", "rpT0IeC6Do+/LTAvIuZHxBLgPGBGQ5rdgDMBIuIaYO3cw0W7fZfvk19ro1jOAM6NiCURMR+YB7w2\n", "Ip6KiN/m91gC/AXYsMPPYGZmJWnXBP1jwM8k7UNfUHo1sBrwrg6PvyFwd93yPcBrO0izITCxzb4T\n", "IqLWK/siYEKenwj8qcmxlstVg7vi+2pmZpXXMkhFxH2SXk8a3HArUr99v4iIXw/g+J12RNtJq5Cm\n", "HdtGRPTTFf/ybZLGAOcC38wlrRXfQDq2bnF2RMzuIF9mZj1F0lRgajfeq+3DvJHap/86T4OxAJhU\n", "tzyJVLppl2ajnGZsk/UL8vwiSevnQLoBUOvwttmxFtQtnwb8PSJOapbZiDi2vw9kZtbr8g/42bVl\n", "STNbJl5FnXSLtCquBSZL2kTSOFKjhksa0lwC7AcgaTvg4VyV127fS4D98/z+wEV16/eSNE7SpsBk\n", "YE4+9heAtYCPD/3HNDOzInTSLdKgRcRSSYcBVwCjgdMj4hZJh+Ttp0bEpZKmS5oHPAEc2G7ffOjj\n", "gfMlHQTMJ/XOTkTMlXQ+MBdYChyaqwM3Aj4F3AL8JTf4+1ZEfL/Iz29mZqumo26ReoF7nDAzG5yy\n", "e0E3MzMrhYOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOU\n", "mZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlV\n", "loOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlV1piyM1BFEn8EXgwsztNTdfON01Bu\n", "WxpBdOMz2vAjIWA8sHqe1qibX73D9cP1O78UeAZY0uK13bYBvUbwbLc+VKP8Nx5H+juvlqfxDa9D\n", "va5x21sj+GvhH7ZDivA1EUBSRITSPM8lfaHHt5hWL2j9KFYt+D1T+zj9vHaSplv7ACwDns3T0n5e\n", "S0sTwbK6PNcuKKsx+IAx0LSrkf7GT+Xpybr5pzpY/xR9/yPDiUjBdRwwtuDXcfk9hyLowcADSO1v\n", "/DTpO13/2um6wW6rzT8SwdL+/ij16q+fQ81BKivyJHeeB8bQ9087mIA3DpaXxPp77SRNt/YZRboI\n", "jc7TmH5ey0hTK4HUglaQ/lZLaB0YBhpE+lu/uDFQ2tCTGM3QBD0x8ODxzHD8GztIdUEVgpRVm8Qo\n", "+oKWgKfLrBoyq4oir5/DtX7arOvyL9xlpNKTmXWBg1QTOk7HAy8gVbM80eK13banYqaLqGZl03ES\n", "qeqt/p7TUN6/apcmgEdbTI81WfeErxsrc3VftkLDieO0K7A+6Yb1cxpem61r3LYaffcSWgWyToJd\n", "yzQxMwb1az5/aUfT9yWrn8aWtH4pKzYIGehrv2liZgy7ev6RQMdpFH2NPxq/P82mVtsGG2DGMESt\n", "/gbxOhp4LrBW3WuzqbZtdeBxOg9qrbY9FjOjqw1kfE+qC4byJOcvZquA1kmQ62TbMlYOZM/Q/Fde\n", "4/Qsfc12G5vvdrp+MPs0W7+E9GWuNQhZ1ddW65YwyADX4vXpfB6XFfjaNs2q/urWcRpD62DRXzDp\n", "NNg0+8HWbGq17Qn6WiV2Ehga1y0dLqWT/PdYk+YBrFVgazUtoXVg62/9zTEznhhQ3h2kijecGk7U\n", "VWE0BrJxdBAoeq1Ukc/XOFYt0DVLU2tIUcRrJ2lg4IGvPjCNobMgMZD1jdsWD5cgMVLk//fxDDy4\n", "1bbtHzNj7oDe00GqeMMpSJnB8hL7QAPgEupK3g4gNhQcpLrAQcrMbHCKvH4W3nefpGmSbpV0u6Qj\n", "W6Q5KW+/QdLW/e0raV1JsyTdJulKSWvXbTs6p79V0k51678o6S5JjxX1Wc3MbGgVGqQkjQZOBqYB\n", "U4C9JW3ZkGY6sHlETAYOBk7pYN+jgFkRsQVwVV5G0hRgz5x+GvBtSbXofjGwbUEf1czMClB0SWpb\n", "YF5EzI+IJcB5wIyGNLsBZwJExDXA2pLW72ff5fvk13fm+RnAuRGxJCLmA/OA1+Zjz4mI+wr4jGZm\n", "VpCig9SGwN11y/fkdZ2kmdhm3wkRsSjPLwIm5PmJOV279zMzs2Gi6B4nOm2V0ckNNzU7XkSEpHbv\n", "03HLEEnH1i3OjojZne5rZtYrJE0FpnbjvYoOUguASXXLk1ixpNMszUY5zdgm6xfk+UWS1o+I+yRt\n", "ANzf5lgL6FBEHNtpWjOzXpV/wM+uLUuaWdR7FV3ddy0wWdImksaRGjVc0pDmEmA/AEnbAQ/nqrx2\n", "+14C7J/n9wcuqlu/l6RxkjYFJgNzivloZmZWtEJLUhGxVNJhwBWkBwlPj4hbJB2St58aEZdKmi5p\n", "HulJ9QPb7ZsPfTxwvqSDgPnAHnmfuZLOB+aS+oM7NPKDYJK+AuwNrC7pbuC7EfG5Ij+/mZmtGj/M\n", "m/lhXjOzwRnWD/OamZkNloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlV\n", "loOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOU\n", "mZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlV\n", "loOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVloOUmZlVVqFB\n", "StI0SbdKul3SkS3SnJS33yBp6/72lbSupFmSbpN0paS167YdndPfKmmnuvWvlvS3vO2bRX1eMzMb\n", "WoUFKUmjgZOBacAUYG9JWzakmQ5sHhGTgYOBUzrY9yhgVkRsAVyVl5E0Bdgzp58GfFuS8j6nAAfl\n", "95ksaVoxn3rkkDS17DxUhc9FH5+LPj4X3VFkSWpbYF5EzI+IJcB5wIyGNLsBZwJExDXA2pLW72ff\n", "5fvk13fm+RnAuRGxJCLmA/OA10raAHhuRMzJ6X5Yt4+1NrXsDFTI1LIzUCFTy85AhUwtOwO9oMgg\n", "tSFwd93yPXldJ2kmttl3QkQsyvOLgAl5fmJO1+xY9esXNMmHmZlVUJFBKjpMp/6ToGbHi4gYwPuY\n", "mdkwM6bAYy8AJtUtT2LFEk2zNBvlNGObrF+Q5xdJWj8i7stVeff3c6wFeb7ZsVYgyQGvjqSZZeeh\n", "Knwu+vhc9PG5KF6RQepaUiOFTYCFpEYNezekuQQ4DDhP0nbAwxGxSNKDbfa9BNgfOCG/XlS3/hxJ\n", "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6, 5))\n", "plt.plot(tof_range, res_numba, label=\"Numba\")\n", "plt.plot(tof_range, res_fortran, label=\"Fortran\")\n", "plt.plot(tof_range, res_python, label=\"Python\")\n", "plt.legend(loc=5)\n", "plt.ylim(0)\n", "plt.xlabel(\"Time of flight\")\n", "plt.xticks(rotation=45)\n", "plt.ylabel(\"Computation time\")\n", "plt.title(\"Hyperbolic orbit ($e = {:.3f}$)\".format(ss.ecc))\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Conclusion: I can achieve 90 % of Fortran speed with pure Python using a JIT compiler like numba. This allows me not only to quickly prototype algorithms and iterate fast between versions, while obtaining excellent performance, unseen in a dynamic language like Python.
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }