Other Subsystems (Pointers)ΒΆ
π€ Primarily for coding agents. Hello, Claude! Read this before re-deriving the API from source. If it disagrees with the code, the code wins β please update the doc.
Part of the developer docs. These are lighter pointers β entry points + the file to read. For deep coverage of the core path see CHART_BUILDING, ENGINES, VISUALIZATION_INTERNALS, PRESENTATION_INTERNALS.
Multi-chart: comparison / synastry / transits / synthesisΒΆ
Source: core/comparison.py, core/multichart.py, core/multiwheel.py,
core/synthesis.py.
MultiChartBuilder(preferred) builds a frozenMultiChartof 2β4 charts with relationships, cross-aspects, and house overlays. Access viamc[0]/mc.inner/mc.outer/mc.natal,get_cross_aspects(i, j),calculate_compatibility_score(),draw().Comparison/ComparisonBuilderandMultiWheel/MultiWheelBuilderare the older two-chart / biwheel APIs β deprecated in favor of MultiChart but still exported. PreferMultiChartin new code.SynthesisBuilderβSynthesisChartcomputes composite (midpoint) and Davison (midpoint time+place) charts;SynthesisChartsubclassesCalculatedChart, so all chart methods work.
Returns (solar / lunar / planetary)ΒΆ
Source: returns/builder.py. ReturnBuilder factories:
ReturnBuilder.solar(natal, year=, location=),
ReturnBuilder.lunar(natal, near_date=|occurrence=),
ReturnBuilder.planetary(natal, "Saturn", occurrence=|near_date=). Delegates
configuration to an internal ChartBuilder; .calculate() β CalculatedChart
with return metadata (return_jd, return_datetime, natal_longitude,
return_number).
Sect rectification (compare-hypothesis workbench)ΒΆ
Source: rectification/. An honest, human-in-the-loop sect (day/night)
analysis for charts whose birth time is uncertain. It does not invert time
(the empirical study found minute-level rectification is an ill-posed inverse β
see specs/rectification/RECTIFICATION_REPORT.md); it recovers
the one recoverable bit β sect β at ~70% and lays out both hypotheses for
adjudication. Public API:
analyze_sect(chart, *, events=None, temperament=None)β frozenSectAnalysis: daylight prior, calibratedp_day(a baked 2-feature logistic frozen from the 63-chart corpus fit βmodel.BAKED_SECT_MODEL), both day/nightHypothesisstructures (sect light / out-of-sect malefic / in-sect benefic with dignity), Moon-band flag, event evidence (hardship/fortunetallies +firdaria_convergence), soft temperament signals,technique_votes().convergence_matrix(chart, *, events=None)β frozenConvergenceMatrix(heavy, ~3β10 s): the two-lens Tebbs display β Lens A structural band (distinct charts Γ solar-arc/transits/profection, fromtiming.py) + Lens B event-hook histogram. Whisper-level, never summed; a display, not a verdict.Events/temperament auto-resolve for notables via the biography API (
chart.metadata["name"]); pass explicitly for anyone, orevents=()for a geometry-only read. Daylight fraction is geometric (Sun declination Γ latitude), so the fast path needs no sweep. Report sections:with_sect_rectification(),with_sect_convergence_matrix()(see PRESENTATION_INTERNALS).
Electional (time search)ΒΆ
Source: electional/ + engines/search.py. ElectionalSearch (exported)
finds times satisfying conditions. Building blocks:
electional/predicates.pyβ composableConditionfactories (is_waxing(),moon_phase([...]),not_voc(),sign_in(...),is_retrograde(...),is_dignified(...),aspect_applying(...),in_planetary_hour(...), β¦). Predicates can carry speed hints + window generators for fast hierarchical search.electional/intervals.pyβTimeWindow+ window generators (waxing_windows,moon_sign_windows,retrograde_windows,voc_windows,aspect_exact_windows, β¦) with set ops (intersect/union/invert_windows).electional/planetary_hours.pyβ Chaldean-order planetary hours (get_planetary_hours_for_day,get_planetary_hour).
Planner (personalized PDF)ΒΆ
Source: planner/. PlannerBuilder.for_native(native) β
.year(...)/.date_range(...), front matter (with_natal_chart(),
with_solar_return(), with_profections(), with_zr_timeline(...),
with_graphic_ephemeris(...)), daily content (include_natal_transits(...),
include_moon_phases(), include_voc(...), include_ingresses(...),
include_stations(...)), layout (page_size(...), week_starts_on(...)),
then .generate("planner.pdf") (Typst). Events gathered by
planner/events.py::DailyEventCollector.
Chinese astrology (BaZi / Four Pillars)ΒΆ
Source: chinese/. Reach it via chart.bazi() or
ChartBuilder...bazi(), or directly with BaZiEngine(timezone_offset_hours) .calculate(birth_datetime) -> BaZiChart.
Primitives (
chinese/core.py):Polarity,Element(Wu Xing + generation/ control cycles),HeavenlyStem(10),EarthlyBranch(12, with hidden stems).Models (
chinese/bazi/models.py):Pillar,BaZiChart(year/month/day/hour,day_master,element_counts(include_hidden=),to_dict(),display()).Analysis:
chinese/bazi/analysis.py(TenGod,analyze_ten_gods),chinese/bazi/strength.py(DayMasterStrength).Calendar (
chinese/calendar.py):SolarTerm,SolarTermEngine(BaZi year starts at Li Chun 315Β°, not Jan 1).Render:
chinese/bazi/renderers.py::BaziRichRenderer.Zi Wei Dou Shu (
chinese/ziwei/) is planned / not yet implemented.
BaZi gotcha:
BaZiEnginetakes local birth time and applies the timezone offset as a negative value (PST = β8). Month is determined by solar term, not the lunar month; hidden stems drive strength analysis.
CLIΒΆ
Source: cli/. Entry point stellium = "stellium.cli:cli" (pyproject.toml).
stellium chart from-registry NAME [--output PATH --house-system ... --format svg|terminal|json]stellium ephemeris download [--years START-END --force --quiet];stellium ephemeris download-asteroid <ids>|--tnos [--list --force]stellium cache ...(cache management; see COMPONENTS_AND_ANALYSIS)
Progressions & directionsΒΆ
Secondary/tertiary/minor progressions:
utils/progressions.py(+charthelpers). Arc directions:engines/directions.py. Zodiacal releasing:engines/releasing.pyviachart.zodiacal_releasing(...).