Parties arabes (Lots hermétiques)

Les parties arabes — également appelées Lots hermétiques en astrologie classique — sont des points sensibles dérivés des longitudes des positions du thème plutôt que de l’observation directe des planètes. Elles étaient largement utilisées en astrologie hellénistique et médiévale et restent centrales à la pratique traditionnelle.

Ketu fournit un registre de parties sensible à la sect via le module ketu.parts.

Parties intégrées

Trois parties sont enregistrées par défaut :

Nom

Clé

Sensible à la sect

Formule (jour)

Formule (nuit)

Part de Fortune

"fortune"

Oui

ASC + Lune - Soleil

ASC + Soleil - Lune

Part de l’Esprit

"spirit"

Oui

ASC + Soleil - Lune

ASC + Lune - Soleil

Part du Mariage

"marriage"

Non

ASC + Vénus - Saturne

ASC + Vénus - Saturne

La Fortune et l’Esprit inversent leurs formules selon la sect : dans un thème diurne la formule standard s’applique ; dans un thème nocturne la formule est inversée (Soleil et Lune échangent leurs rôles). Le Mariage utilise la même formule quelle que soit la sect.

Détection de la sect

ketu.parts utilise is_day_chart de ketu.charts en interne. Le thème transmis à calculate_part porte ses propres jd, lat et lon — Ketu détermine la sect automatiquement à partir de ces valeurs.

calculate_part

calculate_part(part_name, chart) -> float

Calcule une seule partie et retourne sa longitude écliptique (0–360°).

from ketu.charts import compute_chart
from ketu.parts import calculate_part

jd  = 2451545.0   # J2000: 2000-01-01 12:00 UTC
lat = 48.8566     # Paris
lon = 2.3522

chart = compute_chart(jd, lat, lon)

fortune  = calculate_part("fortune",  chart)
spirit   = calculate_part("spirit",   chart)
marriage = calculate_part("marriage", chart)

print(f"Fortune:  {fortune:.2f} deg")
print(f"Spirit:   {spirit:.2f} deg")
print(f"Marriage: {marriage:.2f} deg")

calculate_all_parts

calculate_all_parts(chart, parts=None) -> dict[str, float]

Calcule toutes les parties enregistrées en une seule fois. Le résultat est un dict Python ordinaire associant le nom de la partie à la longitude (float, degrés 0–360).

  • parts=None calcule toutes les parties enregistrées.

  • Passer une liste de clés pour restreindre le calcul.

from ketu.charts import compute_chart
from ketu.parts import calculate_all_parts

jd  = 2451545.0
lat = 48.8566
lon = 2.3522

chart = compute_chart(jd, lat, lon)

all_lots = calculate_all_parts(chart)
for name, lon_deg in sorted(all_lots.items()):
    print(f"{name:12s}  {lon_deg:.2f} deg")

# Selective calculation
select = calculate_all_parts(chart, parts=["fortune", "spirit"])

Signature de formule

Toute formule de partie (variantes jour et nuit) doit accepter exactement quatre arguments positionnels :

(asc_lon: float, sun_lon: float, moon_lon: float, venus_lon: float) -> float

Même si une formule n’utilise pas les quatre arguments, ils sont toujours transmis dans cet ordre. Les résultats sont automatiquement normalisés vers [0°, 360°) par le registre.

Enregistrement de parties personnalisées

Utiliser register pour ajouter une nouvelle partie au registre global :

from ketu.parts import register, PARTS

# Part of Commerce: ASC + Mercury - Sun (same day and night)
def commerce_formula(asc_lon, sun_lon, moon_lon, venus_lon):
    from ketu.calculations import long
    return asc_lon  # simplified — real formula would use Mercury

register(
    name="commerce",
    day_formula=lambda asc, sun, moon, venus: asc + sun - moon,   # placeholder
    night_formula=lambda asc, sun, moon, venus: asc + sun - moon, # same (fixed)
    description="Part of Commerce (custom example)",
)

# Now 'commerce' is available everywhere
print(list(PARTS.keys()))

Après l’enregistrement, la nouvelle partie est incluse dans calculate_all_parts(chart) automatiquement.

PartSpec et get_part

Vous pouvez inspecter toute partie enregistrée :

from ketu.parts import get_part, PartSpec

spec = get_part("fortune")
print(spec.description)      # "Part of Fortune"
print(spec.day_formula)      # callable

PartSpec est un objet de type tuple nommé avec les champs : name, day_formula, night_formula, description.

Étapes suivantes