"""
source_13.py — s13 · COUPE DU SUSHUMNA — BRAHMA/CHITRA/VAJRA NADI (NON-SY \U0001f534)
Série SOURCE ANNEXE FIABLE · généré depuis l'analyse gravée (Fable, 12 juil 2026).
Règle : zéro invention — tout champ provient de la planche ou d'un recoupement daté.
⚠️ STATUT : SOURCE NON-SY \U0001f534 — document de CONTRASTE, pas de référence doctrinale.
Doute initial de Ben confirmé ('pas sur de la source sahaj errerur au niveau du moolhadara').
"""
from dataclasses import dataclass, field, asdict
import json
# ── SOCLE COMMUN (passe U6c — imbrication, GO Ben 13 juil 2026, 23h35) ────
# socle_corpus.py = clé de voûte du paquet corpus/ (types partagés · registre
# · GRAPHE des jonctions · VERDICTS D1-D6). Loi 2 du contrat : les jonctions
# CANONIQUES entre pièces (dNN/sNN) vivent UNE SEULE FOIS dans GRAPHE — la
# liste locale `jonctions` (cible/nature) reste une NOTE DE LECTURE de la
# planche.
# Loi 3 : aucun verdict recopié — le verdict D5 (s13 gardée en CONTRASTE 🔴,
# valeur Brahma/Chitra/Vajra) fait foi dans VERDICTS["D5"].
ID_CORPUS = "s13"
try:
from socle_corpus import GRAPHE, VERDICTS, SOURCES as REGISTRE_SOURCES
JONCTIONS_SOCLE = [j for j in GRAPHE if ID_CORPUS in (j.a, j.b)]
MODE_ILOT = False
except ImportError: # exécution isolée : le module reste lisible en îlot
GRAPHE, VERDICTS, REGISTRE_SOURCES = [], {}, {}
JONCTIONS_SOCLE, MODE_ILOT = [], True
@dataclass
class Inscription:
texte: str
zone: str
statut: str = "\U0001f7e2"
@dataclass
class Jonction:
cible: str
nature: str
@dataclass
class Source:
sid: str = "s13"
titre: str = "COUPE DU SUSHUMNA — BRAHMA/CHITRA/VAJRA NADIS (SOURCE NON-SY \U0001f534)"
type_source: str = "schéma technique anglophone — yoga tantrique générique"
origine: str = "auteur inconnu — hors Sahaja Yoga"
auteur_shri_mataji: bool = False
fiabilite: str = "\U0001f534 source NON-SY avec divergences doctrinales au Mooladhara — conserver comme document de CONTRASTE uniquement"
inscriptions: list = field(default_factory=lambda: [
Inscription("Cross section of Susumnanadi going along the central canal of the spinal cord "
"from Muladhara chakra to Sahasrara chakra. Astral and NOT physical channels",
"titre — verbatim"),
Inscription("Brahmanadi", "coupe — canal central, la Kundalini Sakti y passe"),
Inscription("Chitranadi (Sattvic)", "coupe — 2e cercle concentrique"),
Inscription("Vajra Nadi — 'As bright as the sun, Rajasic Qualities'", "coupe — 3e cercle"),
Inscription("Ida : female energy, Chandranadi (Moon), COOL, SAKTIRUPA", "colonne spiralée — double ligne"),
Inscription("Pingala : Suryanadi, male energy, HEAT, Rudra Rupa", "colonne spiralée — ligne pleine"),
Inscription("Supreme Siva Sakti", "sommet"),
Inscription("Petals always face Kundalini Devi", "note — nb pétales = nb Yoga Nadis convergents"),
Inscription("Right testis: Ida Channel starts here · Left testis: Pingala Channel starts here",
"bas du schéma — étranger à l'iconographie SY", "\U0001f534"),
])
etages: list = field(default_factory=lambda: [
"1. Muladhara, 4 petals, Perineum",
"2. Svadhisthana, 6 petals, Genitalia, Coccygeal Plexus",
"3. Manipura, 10 petals, Navel, Celiac Plexus",
"4. Anahata, 12, Heart",
"5. Visuddha, 16, Throat",
"6. Ajna, 2, Glabella, Cerebellum",
"7. Sahasrara, 1000, Crown",
])
divergences_sy: list = field(default_factory=lambda: [
"Muladhara placé au périnée + Kundalini traversant DEPUIS le Muladhara — en SY la "
"Kundalini réside dans le SACRUM, au-dessus du Mooladhara chakra",
"lexique tantrique (Manipura/Ajna) ≠lexique SY (Nabhi/Agnya)",
"départ des canaux aux testicules : étranger à l'iconographie SY",
])
valeur_residuelle: str = ("structure interne du Sushumna (Brahma/Chitra/Vajra nadis) — "
"notion aussi évoquée en SY")
jonctions: list = field(default_factory=lambda: [
Jonction("d08", "IDA & PINGALA — à confronter (spirale autour des chakras)"),
Jonction("d20", "DOUBLE CORDE — à confronter (enroulement des canaux)"),
Jonction("s10", "autre source NON-SY de la série — même statut de quarantaine"),
])
en_attente: list = field(default_factory=lambda: [
"✅ RÉSOLU (décision Ben, 12 juil 2026) : conservé comme document de CONTRASTE \U0001f534 uniquement",
])
def rapport(self) -> str:
etat_socle = ("îlot (socle_corpus non chargé)" if MODE_ILOT
else f"imbriqué — {len(JONCTIONS_SOCLE)} jonction(s) canoniques au GRAPHE")
return "\n".join([
f"[{self.sid}] {self.titre}",
f" origine : {self.origine}",
f" de la main de Shri Mataji : {self.auteur_shri_mataji}",
f" fiabilité : {self.fiabilite}",
f" divergences SY : {len(self.divergences_sy)} · jonctions : {len(self.jonctions)}",
f" SOCLE : {etat_socle}",
])
def to_json(self) -> str:
data = asdict(self)
data["id_corpus"] = ID_CORPUS
data["jonctions_canoniques"] = [asdict(j) for j in JONCTIONS_SOCLE]
data["mode_ilot"] = MODE_ILOT
return json.dumps(data, ensure_ascii=False, indent=2)
if __name__ == "__main__":
print(Source().rapport())