calc_sn ======= .. py:function:: luminet.black_hole_math.calc_sn(p: float, angle: float, bh_mass: float, incl: float, order: int = 0) -> float Calculate the elliptic function :math:`\text{sn}` For direct images, this is: .. math:: \text{sn} \left( \frac{\gamma}{2 \sqrt{P/Q}} + F(\zeta_{\infty}, k) \right) For higher order images, this is: .. math:: \text{sn} \left( \frac{\gamma - 2n\pi}{2 \sqrt{P/Q}} - F(\zeta_{\infty}, k) + 2K(k) \right) Here, :math:`F` is the incomplete elliptic integral of the first kind, and :math:`K` is the complete elliptic integral of the first kind. Elliptic integrals and elliptic functions are related: .. math:: u &= F(\phi,m) \\ \text{sn}(u|m) &= sin(\phi) .. attention:: Note that ``scipy`` uses the modulus :math:`m = k^2` in the elliptic integrals, not the modulus :math:`k`. :Parameters: * **p** (*float*) -- periastron distance * **angle** (*float*) -- Angle in the black hole frame :math:`\alpha` * **bh_mass** (*float*) -- Black hole mass * **incl** (*float*) -- Inclination of the observer :math:`\theta_0` * **order** (*int*) -- Order of the image. Default is :math:`0` (direct image). :returns: *float* -- Value of the elliptic integral :math:`\text{sn}`