Files
astrololo/docs/warstwa-logiczna-analiza.md
gitea 3655b39acf Rozszerz analizę warstwy logicznej: gotowce, licencje, złożoność + LOG-25
- docs/przeglad-bibliotek-i-licencji.md: przegląd istniejących bibliotek/
  programów z komentarzem licencyjnym i oceną ryzyka praw autorskich;
  rekomendacja ścieżki A (Skyfield/Moshier permisywne) + nota o prawach do
  treści baz.
- docs/warstwa-logiczna-analiza.md: rozwinięcie 24 wymagań LOG, przypisanie
  permisywnych gotowców, ocena złożoności implementacji od zera, rola B/C
  jako wyroczni walidacyjnej; kolejność budowy.
- astrololo_wymagania.xlsx: w arkuszu "Warstwa logiczna" 4 nowe kolumny
  (gotowe rozwiązanie / licencja / złożoność od zera / rola B/C) oraz nowy
  wiersz LOG-25 (harness walidacyjny). Licznik w Przeglądzie zaktualizowany.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 12:31:37 +02:00

18 KiB
Raw Permalink Blame History

Warstwa logiczna — analiza, rozwinięcie wymagań i przypisanie rozwiązań

Dokument roboczy. Rozwinięcie 24 wymagań warstwy logicznej (LOG01…LOG24 z astrololo_wymagania.xlsx) wraz z: przypisaniem gotowych permisywnych rozwiązań, oceną złożoności implementacji od zera (bo idziemy ścieżką A) oraz wskazaniem, gdzie narzędzia AGPL/komercyjne (B/C) służą jako referencja i walidacja. Stan: czerwiec 2026.


0. Założenia ścieżki A

Fundament permisywny (co dostajemy „za darmo"):

  • Skyfield (MIT) + dane NASA JPL DE440/DE441 (public domain) → geocentryczne pozycje planet i Księżyca, RA/Dec, długość/szerokość ekliptyczna, prędkości, wschody/zachody, wyszukiwanie zdarzeń (stacje, powroty, syzygia).
  • pyerfa / ERFA (BSD; pochodna IAU SOFA) → precesja, nutacja, czas gwiazdowy (LST), nachylenie ekliptyki (obliquity) — prymitywy potrzebne do osi (Asc/MC) i ayanams.
  • Katalog Hipparcos (ESA, swobodnie dostępny; ładuje go Skyfield) → gwiazdy stałe.
  • Lark / pyparsing (MIT) → infrastruktura parsera składni sygnifikatorów.
  • numpy / pandas (BSD) → cała matematyka i tabele.

Wniosek: ~7080% astronomicznego fundamentu jest pokryte permisywnie. Sami budujemy warstwę astrologiczną (domy, dyrekcje, techniki, parser, dopasowanie) — a jej algorytmy/wzory są wiedzą publiczną (opisane w literaturze astronomicznej i astrologicznej), więc nie podlegają prawu autorskiemu — chronione są tylko konkretne implementacje kodu. Czytamy więc Astrolog/Morinus/dokumentację Swiss Ephemeris, by zrozumieć metodę, a piszemy własny kod permisywny.

Rola ścieżek B/C (Swiss Ephemeris, Morinus, astro.com):

  1. Wyrocznia walidacyjna — nasz silnik porównujemy liczbowo (do łuku sekundy) z SE/astro.com. Użycie pyswisseph w samych testach/CI (nie dystrybuowane, nie wystawiane użytkownikom przez sieć) nie uruchamia obowiązków AGPL — to legalne i bardzo przydatne.
  2. Dane referencyjne — tabele kontrolne (np. dla profekcji, primary directions) do testów regresyjnych.
  3. Porównanie funkcjonalne — które warianty technik liczy „konkurencja".

Skala złożoności (implementacja od zera): Trywialna · Niska · Średnia · Wysoka · Bardzo wysoka (XL).


1. Macierz zbiorcza

ID Wymaganie Gotowe permisywne (ścieżka A) Złożoność od zera Rola B/C
LOG01 Pozycje obiektów Skyfield (komplet) Niska walidacja pozycji
LOG02 Taksonomia obiektów Skyfield (planety, Księżyc), Hipparcos (gwiazdy) Wysoka (true Node/Lilith, gwiazdy) walidacja węzłów/Lilith
LOG03 Kierunek i stacje Skyfield (find_discrete) Średnia walidacja dat stacji
LOG04 Systemy zodiaku / ayanamsy Skyfield (tropikalny, RA), pyerfa (precesja) Średnia walidacja ayanams
LOG05 Systemy domów (wiele) pyerfa (LST, obliquity); reszta własna Wysoka walidacja cusps (kluczowa)
LOG06 Aspekty + orby własne (czysta matematyka) Niska walidacja list aspektów
LOG07 Aspekty pozazodiakalne Skyfield (deklinacja) Niska walidacja
LOG08 Lots własne (arytmetyka + DSL formuł) Niska–Średnia porównanie wartości
LOG09 Primary Directions brak permisywnego Bardzo wysoka (XL) krytyczna (Morinus)
LOG10 Profekcje własne (arytmetyka + tabele władców) Niska–Średnia tabela kontrolna
LOG11 Zod. Releasing / Firdaria / Decennials brak permisywnego Średnia (tabledriven) walidacja sekwencji
LOG12 Returns (Solar/Lunar) Skyfield (rootfinding) Niska–Średnia walidacja czasu powrotu
LOG13 Ascensional Times pyerfa/własne (oblique ascension) Średnia tabela kontrolna
LOG14 Zbiorcza tabela dat własne (orkiestracja) Średnia
LOG15 Parser sygnifikatorów Lark/pyparsing (infrastruktura) Wysoka (unikalne IP) brak referencji
LOG16 Precompute „atomów" własne Średnia
LOG17 Interpretacja „asp"/„asp±" własne (config + LOG06) Niska–Średnia
LOG18 Warstwy 1A/1B własne (orkiestracja ↔ warstwa danych) Średnia
LOG19 Wypis interpretacji 2B własne (↔ DataProvider) Średnia
LOG20 Kolumny sygnif. + „no of hits" własne Niska–Średnia
LOG21 Scoring siły efektu własne (rule/datadriven) Średnia
LOG22 Konwersja tekst ↔ symbol własne (tablice z notes3) Niska
LOG23 Pozostałe wyliczenia Skyfield (zdarzenia) Niska walidacja
LOG24 Abstrakcja silnika efemeryd architektura Niska

Tylko 3 pozycje są naprawdę trudne: LOG09 (primary directions, XL), LOG05 (pełny zestaw domów, Wysoka), LOG15 (parser — Wysoka, ale to nasze unikalne IP, więc gotowca i tak nie ma). Reszta jest Niska/Średnia, w dużej części pokryta przez Skyfield.


2. Rozwinięcia pogrupowane

Grupa A — Fundament astronomiczny (LOG01, 02, 03, 24)

LOG01 · Pozycje obiektów. Rozwinięcie: długość i szerokość ekliptyczna (ofdate), prędkość (różniczkowanie pozycji), kierunek; formaty: DMS w znaku (Tau 28°12'57''), absolutne 0360°, dziesiętne. Ścieżka A: Skyfield daje to wprost (ecliptic_latlon, prędkość z dwóch chwil). Formatowanie/podział na znaki = trywialne. Złożoność: Niska. B/C: porównać długości z astro.com do ~0,1″.

LOG02 · Taksonomia obiektów. Rozwinięcie: światła+planety (Skyfield 🟢), planety nowożytne (🟢), gwiazdy stałe (precesja+ruch własny — Hipparcos w Skyfield, 🟢 średnia), obiekty wirtualne:

  • Węzły księżycowemean (wzór analityczny, Niska) i true/osculating (z wektora stanu Księżyca → elementy oskulacyjne → węzeł wstępujący; ŚredniaWysoka).
  • Lilith (Black Moon = apogeum Księżyca)mean (Niska–Średnia) i true (oskulacyjne apogeum; Wysoka — tu implementacje notorycznie się różnią, walidacja względem SE obowiązkowa).
  • Osie (Asc/MC → Dsc/IC) — patrz LOG05. Złożoność całości: Wysoka (przez gwiazdy + true Node/Lilith; reszta Niska). B/C: SE jako wzorzec dla true Node/Lilith (różne definicje!).

LOG03 · Kierunek i stacje. Rozwinięcie: znak prędkości → D/Rx; stacja = przejście prędkości przez 0 (SD vs SR z przyspieszenia); „dni od stacji ścisłej" + flaga <7 dni; „stacja umowna" jako konfigurowalny próg % ruchu typowego. Ścieżka A: Skyfield find_discrete/find_maxima znajduje momenty stacji; średnie prędkości precompute. Złożoność: Średnia. B/C: daty stacji z SE.

LOG24 · Abstrakcja silnika. Rozwinięcie: interfejs EphemerisEngine z implementacjami SkyfieldEngine (główna, MIT+JPL), MoshierEngine (fallback w pełni publicdomain, bez plików danych) oraz — opcjonalnie po decyzji — SwissEphCommercialEngine. Złożoność: Niska (architektura, analogicznie do DataProvider). To wymaganie spina ścieżki A/B bez przepisywania logiki.

Grupa B — Układy odniesienia (LOG04, 05)

LOG04 · Systemy zodiaku / ayanamsy. Rozwinięcie: tropikalny (domyślny, 🟢), syderyczny = tropikalny ayanamsa(t) (Lahiri, FaganBradley… ~40 w SE; my zaczynamy od kilku + tabela rozszerzalna), draconic = tropikalny długość NN (🟢 po LOG02), RA (Skyfield daje wprost). Ścieżka A: precesja z pyerfa; ayanamsy to znane stałe odniesienia + tempo precesji. Złożoność: Średnia (głównie tabela ayanams). B/C: wartości ayanams z SE.

LOG05 · Systemy domów (wiele, równolegle). ⚠️ najcięższa matematyka astronomiczna. Rozwinięcie:

  • Whole Sign / Equal (Asc/MC) / Porphyry → Niska (trywialne podziały).
  • Placidus, Koch, Regiomontanus, Campanus, Topocentric, Alcabitus, Meridian, Morinus, Vehlow → znane wzory trygonometrii sferycznej, każdy Średnia, w komplecie Wysoka (przypadki brzegowe na wysokich szerokościach — Placidus/Koch nieokreślone za kołem podbiegunowym). Ścieżka A: Asc/MC z LST (pyerfa) + obliquity + szerokość geo (standardowe wzory). libephemeris (AGPL) dowodzi, że pełny zestaw 25 systemów da się policzyć na Skyfieldzie — czytamy go jako dowód wykonalności, ale piszemy własny kod. Złożoność: Wysoka. B/C: walidacja cusps krytyczna — tu kryją się błędy, szczególnie na dużych szerokościach.

Grupa C — Aspekty (LOG06, 07)

LOG06 · Aspekty + orby. Rozwinięcie: separacja kątowa vs kąt aspektu ± orb; aplikacja/separacja z różnicy prędkości; schematy orbów (domyślne, bonus dla luminarzy, fixed, ±%, perplaneta/szkoła); aspekt „przez znak" vs „przez stopień"; major/minor/harmonic. Ścieżka A: czysta matematyka na policzonych długościach — żadna biblioteka nie jest potrzebna. Złożoność: Niska–Średnia (szerokość konfiguracji, nie trudność algorytmu). B/C: listy aspektów z astro.com do testów.

LOG07 · Aspekty pozazodiakalne. Rozwinięcie: parallel/contraparallel (po deklinacji — Skyfield 🟢), antiscia/contraantiscia (lustro względem osi przesileń — arytmetyka). Złożoność: Niska.

Grupa D — Lots (LOG08)

LOG08 · Lots. Rozwinięcie: silnik formuł Lot = C + A B z odwracaniem dzień/noc (sekta); By Degree (domyślnie) i By Sign; 7 Hermetic Lots; cały znak działa jak Lot. Ścieżka A: mały DSL/parser formuł + ewaluacja na policzonych pozycjach. Złożoność: Niska–Średnia (logika sekty prosta; trudność tkwi w tożsamości/wariantach Lots — to kuracja danych, nie obliczenia; patrz Q03). B/C: porównanie wartości stopni.

Grupa E — Techniki predykcyjne (LOG09…14)

LOG09 · Primary Directions. ⚠️ najtrudniejsze (XL). Rozwinięcie: łuk dyrekcji (semiarc/Placidean, Regiomontanus, …) między sygnifikatorem a promisorem w ruchu dobowym; klucz łuk→czas (Ptolemeusz/Naibod/Cardan/Solar arc); direct/converse; mundo/zodiacal; z szerokością/bez. ~160 wariantów — robimy 58 (Q02), framework rozszerzalny. Ścieżka A: brak gotowca permisywnego — w całości własna trygonometria sferyczna + obsługa wariantów. Złożoność: Bardzo wysoka. B/C: Morinus (GPL) słynie z dokładnych primary directions — kluczowa wyrocznia; uwaga: nawet komercyjne programy różnią się w wariantach (do udokumentowania, który wariant odwzorowujemy).

LOG10 · Profekcje. Rozwinięcie: annual (Asc +1 znak/rok, mod 12), monthly/daily, continuous (klucz, domyślnie 30°/rok), Lord of Year, Lord of Orb (kolejność chaldejska, mod 84/12). Ścieżka A: arytmetyka dat + tabele władców domicilnych — bez bibliotek. Złożoność: Niska (annual) Średnia (continuous + Lord of Orb). B/C: tabela kontrolna (jak ta w notes3).

LOG11 · Zodiacal Releasing / Firdaria / Decennials. Rozwinięcie: deterministyczne sekwencje okresów z tabel hellenistycznych/perskich (ZR: długości okresów Valensa + „loosing of the bond"; Firdaria: stałe sekwencje diurnal/nocturnal z podokresami; Decennials: kolejność planetarna). Ścieżka A: logika sekwencjonowania na tabelach — algorytmy publiczne, niepodlegające prawu autorskiemu. Złożoność: Średnia. B/C: walidacja sekwencji z SE/Astrolog.

LOG12 · Returns (Solar/Lunar). Rozwinięcie: rootfinding momentu powrotu Słońca/Księżyca do długości natalnej; 2 warianty (osobny horoskop vs tranzyt do natalu); monthly revolutions (Słońce + n×30°). Ścieżka A: Skyfield znajduje moment (🟢), reszta = ponowne użycie LOG01…06. Złożoność: Niska–Średnia. B/C: czas powrotu z astro.com.

LOG13 · Ascensional Times. Rozwinięcie: oblique ascension znaków wg szerokości (różnica ascensjonalna z RA) → lata życia; sumy i ułamki dla dodatkowych dat. Częściowo datadriven (tabela DAN07). Ścieżka A: wzory powiązane z LOG05 (trygonometria sferyczna) + pyerfa. Złożoność: Średnia.

LOG14 · Zbiorcza tabela dat z technik. Rozwinięcie: uruchom wszystkie techniki w zakresie czasu → jedna datowana tabela (technique | significator | start | exact | end), sortowanie, deduplikacja, daty dokładne (wspólny rootfinding z LOG12). Ścieżka A: orkiestracja/glue. Złożoność: Średnia.

Grupa F — Parser sygnifikatorów i dopasowanie (LOG15…20) — rdzeń unikalnego IP

LOG15 · Parser składni „Significator". ⚠️ Wysoka — i tak nie ma gotowca. Rozwinięcie: gramatyka skrótów (obiekty, znaki, żywioły, jakości, domy, aspekty+cel, retro/combust/waxing/heliacal, opcje A/B, warunki, „rAsc", whole sign+orb); 7 poziomów złożoności — od poziomu „obiekt" po sygnifikatory opisowe/niejasne (poziomy 57 mogą wymagać fallbacku człowiek/AI). Ścieżka A: tokenizer + gramatyka PEG (Lark, MIT) + słownik SIGNIFICATORS KEY (warstwa danych) jako mapa znaczeń tokenów. Złożoność: Wysoka — tu idzie najwięcej oryginalnej inżynierii; to wartość intelektualna projektu. B/C: brak — nie istnieje zewnętrzny parser tej składni.

LOG16 · Precompute „atomów" obecnych w horoskopie. Rozwinięcie: wygeneruj zbiór wszystkich cząstek prawdziwych dla danego horoskopu (Ma Ari, Ma fire, Ma h2, Ma opp Sa, rAsc Ari…); dopasowanie rekordu bazy = przynależność do zbioru. Zależy od LOG01…08 (policzony horoskop) + LOG15 (słownik). Złożoność: Średnia (generacja kombinatoryczna + indeks; wrażliwe wydajnościowo — łączy się z DAN22).

LOG17 · Interpretacja „asp"/„asp+"/„asp"/„asp malefic". Rozwinięcie: rozwinięcie wg konfigurowalnej tabeli pomocniczej (jakie aspekty, orby, active) + LOG06. Złożoność: Niska–Średnia.

LOG18/19/20 · Dopasowanie i wypis. Rozwinięcie: silnik dopasowania: atomy → zapytanie do warstwy danych (nasz DataProvider!) → złożenie outputu: 1A (natal, unikalny), 1B (predykcyjne z datami), 2B (wypis interpretacji tylko dla obecnych rekordów), 2 kolumny sygnifikatora (z bazy / asisinchart), „no of hits" (1/2/3/…/?/2+?). To styk warstwy logicznej z danych — pasuje do istniejącej architektury. Złożoność: Średnia.

Grupa G — Scoring, symbole, pozostałe (LOG21, 22, 23)

LOG21 · Scoring siły efektu. Rozwinięcie: punktacja wg tabel relacyjnych (np. „no air" poziomy //), punkty za domniemaną prawdziwość w syntezie; logika indywidualna (nie zawsze rzadkość = siła). Ścieżka A: silnik reguł na danych (tabele relacyjne — warstwa danych). Złożoność: Średnia, otwarte (autor przygotuje punktację indywidualnie).

LOG22 · Konwersja tekst ↔ symbol. Rozwinięcie: dwukierunkowe mapowanie z tablic Unicode (kompletne w notes3); przechowywanie tekstem, wyświetlanie symbolami; tylko „text" Unicode, nigdy emoji; ℞ dla retro. Złożoność: Niska (tablice lookup). Ligatury vs 2 kolumny — patrz Q05 (prezentacja).

LOG23 · Pozostałe wyliczenia. Rozwinięcie: tally żywiołów/jakości (trywialne), planetary day & hours (wschód/zachód ze Skyfielda + podział na 12 godzin dnia/nocy + władcy chaldejscy), stopnie krytyczne/wrażliwe (lookup), faza Księżyca (elongacja SuMo), syzygia prenatalna (rootfind ostatniej pełni/nowiu przed urodzeniem), divisional (12th/9th parts — arytmetyka). Ścieżka A: Skyfield obsługuje zdarzenia astronomiczne. Złożoność: Niska (lokalnie Niska–Średnia).


3. Proponowana kolejność budowy (fazy)

  1. Fundament (MVP silnika): LOG24 (interfejs) → LOG01 → LOG02 (bez gwiazd/trueLilith) → LOG04 (tropikalny+RA) → LOG06/07 → LOG05 (Whole/Equal/Porphyry+Placidus) → LOG23 (podstawy). Tu Skyfield daje ogromny skok.
  2. Astrologia rdzenia: LOG08 (Lots) → LOG15 (parser) → LOG16 → LOG18/19/20 (dopasowanie ↔ warstwa danych). Tu powstaje unikalna wartość i pełny przepływ „horoskop → interpretacje".
  3. Predykcja prosta: LOG10 (profekcje) → LOG12 (returns) → LOG14 (agregacja) → LOG11 (timelordy) → LOG13.
  4. Predykcja trudna i dopieszczenie: LOG09 (primary directions, XL) → LOG02 dokończenie (gwiazdy, true Node/Lilith) → LOG04 (ayanamsy) → LOG21 (scoring) → LOG05 (pełny zestaw domów).

Logika: najpierw to, co Skyfield daje tanio i co odblokowuje przepływ endtoend; najtrudniejsze (primary directions, pełne domy) na koniec, gdy mamy już solidną wyrocznię walidacyjną.


4. Stos technologiczny (permisywny) i walidacja

Produkcyjne (ścieżka A): Skyfield (MIT), pyerfa (BSD), dane JPL DE440 (PD) lub Moshier (PD), Lark (MIT), numpy/pandas (BSD). Zero copyleft → produkt może być zamknięty i hostowany.

Tylko dev/test (B/C jako wyrocznia — NIE w produkcie, NIE wystawiane przez sieć): pyswisseph (AGPL) i Morinus (GPL) do porównań liczbowych w testach regresyjnych. To legalne, bo nie dystrybuujemy ich i nie udostępniamy użytkownikom — AGPL/GPL nie zostają uruchomione.

Wymaganie pochodne (do dopisania w arkuszu): LOG25 — harness walidacyjny: zestaw testów porównujących nasz silnik z SE/astro.com/Morinus na bazie znanych horoskopów (np. przykład z notes3: 30.04.1984, Warszawa), z progami tolerancji per wielkość. To nasza polisa ubezpieczeniowa przy budowie od zera.


5. Wniosek

Ścieżka A jest w pełni wykonalna. Skyfield + pyerfa + JPL/Moshier zdejmują z nas całą trudną astronomię (pozycje, zdarzenia, czas gwiazdowy, precesja). Realny ciężar własnej implementacji to trzy obszary: primary directions (XL), pełny zestaw domów (Wysoka) i parser sygnifikatorów (Wysoka — ale unikalny, gotowca i tak nie ma). Wszystkie pozostałe wymagania są Niskie/Średnie. Narzędzia AGPL/komercyjne zostają jako wyrocznia walidacyjna i dane referencyjne — używane legalnie poza produktem.