# poliastro/poliastro

src/poliastro/core/stumpff.py

### Summary

A
0 mins
###### Test Coverage
from math import gamma

import numpy as np
from numba import njit as jit

@jit
def c2(psi):
r"""Second Stumpff function.

For positive arguments:

.. math::

c_2(\psi) = \frac{1 - \cos{\sqrt{\psi}}}{\psi}

"""
eps = 1.0
if psi > eps:
res = (1 - np.cos(np.sqrt(psi))) / psi
elif psi < -eps:
res = (np.cosh(np.sqrt(-psi)) - 1) / (-psi)
else:
res = 1.0 / 2.0
delta = (-psi) / gamma(2 + 2 + 1)
k = 1
while res + delta != res:
res = res + delta
k += 1
delta = (-psi) ** k / gamma(2 * k + 2 + 1)

return res

@jit
def c3(psi):
r"""Third Stumpff function.

For positive arguments:

.. math::

c_3(\psi) = \frac{\sqrt{\psi} - \sin{\sqrt{\psi}}}{\sqrt{\psi^3}}

"""
eps = 1.0
if psi > eps:
res = (np.sqrt(psi) - np.sin(np.sqrt(psi))) / (psi * np.sqrt(psi))
elif psi < -eps:
res = (np.sinh(np.sqrt(-psi)) - np.sqrt(-psi)) / (-psi * np.sqrt(-psi))
else:
res = 1.0 / 6.0
delta = (-psi) / gamma(2 + 3 + 1)
k = 1
while res + delta != res:
res = res + delta
k += 1
delta = (-psi) ** k / gamma(2 * k + 3 + 1)

return res