defmodule Angelus do
@moduledoc """
High-level geocentric ephemeris API backed by SPICE/JPL.
## Quick start
# 1. Download kernels (once)
mix angelus.kernels
# 2. Load kernels at runtime
:ok = Angelus.load_kernels()
# 3. Query positions
{:ok, positions} = Angelus.positions(
[:sun, :moon, :mercury, :venus, :mars,
:jupiter, :saturn, :uranus, :neptune, :pluto],
~U[1990-05-24 06:30:00Z]
)
See `Angelus.Ephemeris` and `Angelus.Spice` for the full API.
"""
@version Mix.Project.config()[:version]
@doc "Returns the Angelus library version."
@spec version() :: String.t()
def version, do: @version
# ── Re-exported API ──────────────────────────────────────────────────────
@doc """
Returns the geocentric position of a single body at the given UTC datetime.
Delegates to `Angelus.Ephemeris.position/3`.
"""
defdelegate position(body, datetime, opts \\ []), to: Angelus.Ephemeris
@doc """
Returns the geocentric positions of a list of bodies at the given UTC datetime.
Delegates to `Angelus.Ephemeris.positions/3`.
"""
defdelegate positions(bodies, datetime, opts \\ []), to: Angelus.Ephemeris
@doc """
Loads the default v0.1 SPICE kernel set from `priv/kernels/`.
Delegates to `Angelus.Spice.load_kernels/0`.
"""
defdelegate load_kernels(), to: Angelus.Spice
@doc """
Loads SPICE kernels with options or explicit paths.
Delegates to `Angelus.Spice.load_kernels/1`.
"""
defdelegate load_kernels(paths_or_opts), to: Angelus.Spice
end