PlanetaryPy Documentation

planetarypy logo

Find a planetary data product, fetch it, and open it as an array — without writing per-mission download code.

planetarypy knows where the archives keep their data and what shape it arrives in, so you can spend your time on the science rather than on URL patterns, PDS3 labels and index files.

import planetarypy
from planetarypy import pds, catalog

df = pds.get_index("mro.ctx.edr")      # 164,103 CTX images, as a DataFrame
r = catalog.fetch_product("mro.ctx.edr", "P02_001916_2221_XI_42N027W")
d = planetarypy.open(r.label_file)     # r knows where the files landed
arr = d["IMAGE"]                       # a numpy array, ready to work with

The same three steps work across 15 missions and 58 product types, and the downloads are cached under one storage root you control.

pip install planetarypy
# or
conda install -c conda-forge planetarypy

What’s in the box

  • 77 PDS index files — auto-downloaded, cached as Parquet, auto-updated
  • PDS Catalog — 65 missions, 1925 product types, searchable via DuckDB
  • Direct data accessfetch_product("mro.ctx.edr", "PRODUCT_ID") for 58 product types across 15 missions
  • ESA PSA — the same treatment for Mars Express, Venus Express and the rest of the ESA archive
  • 37 SPICE missions — date-filtered kernel subsets via NAIF, and an illumination calculator on top
  • Planetary constants — per-body PCK values (radii, GM, poles) for ~145 bodies plus NSSDC fact-sheet parameters (bond albedo, surface pressure, satellite count, …), time-indexed for reproducibility studies (Zenodo archive); fundamental physics constants (G, c, M_sun) re-exported from astropy in the same namespace
  • Geodesy that knows it is not on EarthIAU 2015 CRS codes per body, anti-meridian handling, footprints and overlaps
  • IAU feature names — the USGS gazetteer as a plottable layer, so coordinates are looked up rather than remembered
  • Unified CLIplp fetch, plp catalog build, plp indexes peek, plp spice fetch

MRO HiRISE and CTX processingplp hibrowse, plp hiedr, plp himos, plp hitif, plp ctxqv and the planetarypy.instruments.mro.* modules — lives in its own distributions so each instrument versions independently:

pip install "planetarypy[instruments]"   # both
pip install "planetarypy[hirise]"        # or just one

Finding, fetching and inspecting those products needs none of this — core keeps the catalog and index knowledge, so plp fetch mro.hirise.rdr and plp indexes peek mro.ctx.edr work on a plain install. See Instrument packages.

Where to go next

This documentation follows the Diátaxis approach:

  • Tutorials — step-by-step lessons for learning the package
  • How-To Guides — practical recipes for a specific job
  • Reference — API documentation generated from docstrings
  • Explanation — background and design decisions

The navigation bar links to these four sections. Sidebars move between documents, and the table of contents on the right moves within one.

New here? Fetching your first product is the shortest path to something working.

Project