Stellium v0.15.1: Delta-T bugfix and Midpoint Trees
[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 subtractionstellium/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 stringExample output:
☉ Sun (16°16' ♑︎)
├── ☿/♀ ☌ 0.3° Mercury/Venus
└── ☿/♂ ☌ 0.5° Mercury/Mars
ASC (16°57' ♈︎)
├── ☉/☿ □ 0.2° Sun/Mercury
└── ☿/♀ □ 1.0° Mercury/Venus