Metadata-Version: 2.4
Name: ephemvis
Version: 0.1.0
Summary: Themeable SVG chart-wheel & aspect-grid rendering for openephem chart data
Project-URL: Homepage, https://github.com/NoahChristian/ephemvis
Project-URL: Repository, https://github.com/NoahChristian/ephemvis
Project-URL: Changelog, https://github.com/NoahChristian/ephemvis/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/NoahChristian/ephemvis/issues
Author: Elizabeth Huston, Noah Christian
License-Expression: MIT
License-File: LICENSE
Keywords: aspectarian,astrology,chart wheel,natal chart,openephem,svg,visualization
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: Scientific/Engineering :: Astronomy
Requires-Python: >=3.10
Provides-Extra: compute
Requires-Dist: openephem>=0.1.0; extra == 'compute'
Provides-Extra: test
Requires-Dist: mypy>=1.10; extra == 'test'
Requires-Dist: pytest>=7; extra == 'test'
Requires-Dist: ruff>=0.6; extra == 'test'
Description-Content-Type: text/markdown

# ephemvis

[![CI](https://github.com/NoahChristian/ephemvis/actions/workflows/ci.yml/badge.svg)](https://github.com/NoahChristian/ephemvis/actions/workflows/ci.yml)
[![PyPI](https://img.shields.io/pypi/v/ephemvis.svg)](https://pypi.org/project/ephemvis/)
[![Python](https://img.shields.io/pypi/pyversions/ephemvis.svg)](https://pypi.org/project/ephemvis/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

Themeable **SVG rendering** for astrological chart data — the display layer that
pairs with [openephem](https://github.com/NoahChristian/openephem) (the calculation
core). ephemvis turns a chart dict into a self-contained chart **wheel** and a
triangular **aspect grid**.

The split is deliberate: **openephem computes, ephemvis draws.** The math core
stays small and auditable; the visuals can be forked and restyled freely without
touching (or destabilising) the calculations.

## Install

```bash
pip install ephemvis            # pure renderer, zero runtime deps
pip install ephemvis[compute]   # also pulls openephem to compute charts
```

## Use

```python
from openephem import resolve, assemble          # needs ephemvis[compute]
from ephemvis import render_svg, render_aspect_grid_svg

chart = assemble(resolve(date=(1990, 5, 15), time=(14, 30),
                         place="New York, NY"))
open("wheel.svg", "w", encoding="utf-8").write(render_svg(chart, theme="prism"))
open("grid.svg",  "w", encoding="utf-8").write(render_aspect_grid_svg(chart, theme="prism"))
```

`render_svg` and `render_aspect_grid_svg` accept any dict with the openephem
`ChartResult` shape (`angles`, `cusps`, `bodies`, `aspects`), so **any engine that
emits that shape can be rendered** — ephemvis has no dependency on how the chart
was computed.

## Themes

`light`, `dark`, `auto`, and eight pastel "pretty" modes with a prism-halo ring:
`prism`, `twilight`, `aurora`, `opal`, `seafoam`, `meadow`, `dawn`, `blossom`.
See `ephemvis.PALETTES`.

## The data contract

ephemvis reads the chart dict openephem's `assemble()` returns:

```python
{
  "angles": {"asc": float, "mc": float, ...} | None,   # ecliptic longitude, degrees
  "cusps":  [float] (12) | None,                        # house cusp longitudes
  "bodies": {name: {"lon": float, "retro": bool}},      # ecliptic longitude, degrees
  "aspects": [{"a": name, "b": name, "aspect": str, "orb": float}],
  "warnings": [str],
}
```

MIT © 2026 Elizabeth Huston, Ph.D. and Noah Christian, Ph.D.  
Contact: elpisastrology@gmail.com · elpisastrology.com and noahchristian@gmail.com
