Skip to content

Stellium v0.15.1: Delta-T bugfix and Midpoint Trees

Choose a tag to compare

@katelouie katelouie released this 06 Jan 14:37
· 57 commits to main since this release

[0.15.1] - 2026-01-06

Fixed

Delta T Calculation Bug Affecting Angles (ASC/MC)

Fixed incorrect Delta T handling that caused Ascendant and MC to be off by ~15 arcminutes for modern charts.

The Bug: The code was incorrectly subtracting Delta T from the Julian Day after computing it from UTC. Since swe.julday() with UTC input already produces JD(UT), and swe.houses_ex() expects JD(UT), the subtraction was wrong and shifted all angle calculations.

Impact: For a 1994 birth, Delta T ≈ 60 seconds, causing ~15 arcminute error in the Ascendant. The error scales with Delta T (larger for dates further from 2000).

Files Fixed:

  • stellium/core/native.py - Removed erroneous Delta T subtraction
  • stellium/utils/time.py - Removed erroneous Delta T subtraction

Technical Note: Swiss Ephemeris _ut functions (swe.calc_ut(), swe.houses_ex()) expect Julian Day in Universal Time and handle Delta T conversion internally when needed for ephemeris calculations.

Added

Midpoint Tree Visualization

New MidpointTreeSection in stellium.presentation.sections that generates tree diagrams showing which midpoints aspect focal points. A standard Uranian/Hamburg astrology technique for interpreting planetary pictures.

Features:

  • Configurable tree bases (focal points) - defaults to Sun, Moon, MC, ASC
  • Configurable branch objects for midpoint pairs - defaults to 10 planets + angles + nodes
  • Support for Hamburg/Uranian hypothetical planets when chart includes them
  • Aspect modes: "conjunction" (0° only), "hard" (0°, 45°, 90°, 135°, 180°), or "all"
  • Tight orb control (default 1.5°) to prevent data explosion
  • 3-column SVG layout for compact visualization
  • Text output with ASCII tree structure
  • Smart glyph fallbacks (uses glyph when available, short name otherwise)

Usage:

from stellium import ChartBuilder, Native, ReportBuilder
from stellium.components import MidpointCalculator

chart = (ChartBuilder.from_native(native)
    .with_uranian()  # Optional: include Hamburg planets
    .add_component(MidpointCalculator())
    .calculate())

# Via ReportBuilder
report = (ReportBuilder()
    .from_chart(chart)
    .with_midpoint_trees(aspect_mode="hard", orb=1.5)
    .render())

# Direct section use for SVG export
from stellium.presentation.sections import MidpointTreeSection

section = MidpointTreeSection(
    tree_bases=["Sun", "Moon", "ASC", "MC"],
    aspect_mode="hard",
    output="svg"
)
data = section.generate_data(chart)
# data["content"] contains SVG string

Example output:

☉ Sun (16°16' ♑︎)
    ├── ☿/♀ ☌ 0.3°  Mercury/Venus
    └── ☿/♂ ☌ 0.5°  Mercury/Mars

ASC (16°57' ♈︎)
    ├── ☉/☿ □ 0.2°  Sun/Mercury
    └── ☿/♀ □ 1.0°  Mercury/Venus

Changed