Source code for stellium.core.config
"""Configuration models for chart calculation."""
from dataclasses import dataclass, field
from stellium.core.ayanamsa import ZodiacType
[docs]
@dataclass
class AspectConfig:
"""Configuration for aspect calculations.
Will be passed directly into the AspectEngine.
"""
# Which aspects to calculate (by name - angles are looked up from registry)
aspects: list[str] = field(
default_factory=lambda: [
"Conjunction",
"Sextile",
"Square",
"Trine",
"Opposition",
]
)
# Which object types to include in aspect calculations
# (The AspectEngine will use this to filter pairs)
include_angles: bool = True
include_nodes: bool = True
include_asteroids: bool = True
[docs]
@dataclass
class CalculationConfig:
"""Overall configuration for chart calculations.
Passed to the ChartBuilder.
"""
# Which objects to calculate
include_planets: list[str] = field(
default_factory=lambda: [
"Sun",
"Moon",
"Mercury",
"Venus",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
"Pluto",
]
)
include_nodes: bool = True
include_chiron: bool = True
include_points: list[str] = field(
default_factory=lambda: ["Mean Apogee"] # Black Moon Lilith by default
)
include_asteroids: list[str] = field(default_factory=list) # Default empty
# Zodiac system configuration
zodiac_type: ZodiacType = ZodiacType.TROPICAL
ayanamsa: str | None = None # Only used if zodiac_type is SIDEREAL
# Coordinate system
heliocentric: bool = False # Sun-centered instead of Earth-centered
def __post_init__(self) -> None:
"""Validate configuration after initialization."""
# Set default ayanamsa if sidereal but none specified
if self.zodiac_type == ZodiacType.SIDEREAL and self.ayanamsa is None:
object.__setattr__(self, "ayanamsa", "lahiri") # Default to Lahiri
[docs]
@classmethod
def minimal(cls) -> "CalculationConfig":
"""Minimal calculation - planets only."""
return cls(
include_nodes=False,
include_chiron=False,
include_points=[],
include_asteroids=[],
)
[docs]
@classmethod
def comprehensive(cls) -> "CalculationConfig":
"""Comprehensive calculation -- a well-rounded set."""
return cls(
include_nodes=True,
include_chiron=True,
include_points=["Mean Apogee", "True Apogee"], # Both Liliths
include_asteroids=["Chiron", "Pholus", "Ceres", "Pallas", "Juno", "Vesta"],
)