xor_tanakh_2 / analyze_resonance_stream.py
neuralworm's picture
initial commit
f054e62
import json
import logging
import argparse
import sys
import os
import re
import math
import numpy as np
from gematria import calculate_gematria
# --- Konfiguration ---
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
BOOK_RANGE = range(1, 40)
INDICES_DIR = "indices_by_book"
HOLOGRAPHIC_STATE_SIZE_BITS = 4096
BITS_PER_CHAR = 16 # Notwendig für die Umwandlung von Zahlen in Binärstrings
# --- Kernfunktionen ---
def xor_with_highest_power(total_sum, query_value):
"""Ihre XOR-Logik."""
if total_sum <= 0 or query_value <= 1: return None
if query_value > total_sum: power = 1
else:
exponent = math.floor(math.log(total_sum, query_value))
power = query_value ** exponent
return total_sum ^ power
def prepare_phrase_inventory(all_indices):
"""Erstellt ein flaches, nach Bedeutung sortiertes Inventar aller Phrasen."""
logging.info("Erstelle ein Inventar aller Phrasen aus 39 Büchern...")
inventory = []
seen_phrases = set()
for book_num, index in all_indices.items():
for gematria_val_str, data in index.items():
gematria_val = int(gematria_val_str)
pagerank = data.get('pagerank', 0)
for phrase_data in data.get('phrases', []):
phrase_text = phrase_data['text']
if phrase_text not in seen_phrases:
count = phrase_data.get('count', 1)
score = pagerank / count if count > 0 else 0
inventory.append({"text": phrase_text, "gematria": gematria_val, "score": score})
seen_phrases.add(phrase_text)
inventory.sort(key=lambda x: (-x['score'], x['gematria']))
logging.info(f"{len(inventory)} einzigartige Phrasen im Inventar gefunden.")
return inventory
def find_phrase_combination(target_sum, inventory):
"""Findet eine bedeutungsvolle Kombination von Phrasen für eine Ziel-Summe."""
combination = []
current_sum = 0
for item in inventory:
if current_sum + item['gematria'] <= target_sum:
combination.append(item)
current_sum += item['gematria']
return combination, current_sum
# --- Hauptprogramm ---
def main(args):
# Lade alle Indizes für die finale Dekodierung
all_indices = {}
for i in BOOK_RANGE:
index_path = os.path.join(INDICES_DIR, f"book_{i:02}_index.json")
if os.path.exists(index_path):
with open(index_path, 'r', encoding='utf-8') as f:
all_indices[i] = json.load(f)
if not all_indices:
sys.exit("Keine Index-Dateien gefunden. Bitte 'build_indices.py' ausführen.")
# 1. Bereite das Phrasen-Inventar vor
phrase_inventory = prepare_phrase_inventory(all_indices)
# 2. Berechne Gematria-Wert der Anfrage
query_value = calculate_gematria(args.query)
if query_value <= 1:
sys.exit(f"Anfrage '{args.query}' hat einen ungültigen Gematria-Wert ({query_value}).")
# 3. Sequentielle Faltung aller Vers-Resonanzen
logging.info(f"Starte sequentielle Vers-Faltung für '{args.query}' (Gematria: {query_value})...")
final_state = np.zeros(HOLOGRAPHIC_STATE_SIZE_BITS, dtype=np.int8)
for book_num in BOOK_RANGE:
try:
with open(f"texts/torah/{book_num:02}.json", 'r', encoding='utf-8') as file:
data = json.load(file)
logging.debug(f"Verarbeite Buch {book_num:02}...")
for chapter in data.get("text", []):
for verse in chapter:
verse_sum = calculate_gematria(verse)
if verse_sum <= 1: continue
resonance_val = xor_with_highest_power(verse_sum, query_value)
if resonance_val is None: continue
# Wandle das Resonanz-Ergebnis in einen Binärstring um und falte es
resonance_binary = format(resonance_val, f'0{HOLOGRAPHIC_STATE_SIZE_BITS}b')
resonance_array = np.array(list(resonance_binary), dtype=np.int8)
final_state = np.bitwise_xor(final_state, resonance_array)
except FileNotFoundError:
continue
final_state_str = "".join(final_state.astype(str))
logging.info("Finale holographische Resonanz-State wurde erstellt.")
# 4. Dekodiere den finalen State
print("\n" + "="*15 + f" FINALE SYNTHESE FÜR '{args.query}' " + "="*15)
# Zerlege den finalen State in 256 Gematria-Werte
for i in range(0, HOLOGRAPHIC_STATE_SIZE_BITS, BITS_PER_CHAR):
target_sum = int(final_state_str[i:i+BITS_PER_CHAR], 2)
if target_sum == 0: continue
print(f"\n--- Dekodiere Resonanz-Block #{i//BITS_PER_CHAR + 1} (Ziel-Summe: {target_sum}) ---")
combination, achieved_sum = find_phrase_combination(target_sum, phrase_inventory)
if combination:
for item in combination:
print(f"- {item['text']:<25} (G: {item['gematria']})")
print(f" -> Erreichte Summe: {achieved_sum} / {target_sum}")
else:
print("- Keine Kombination gefunden.")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Tanakh Sequential Verse-Folding Analyzer.")
parser.add_argument("query", type=str, help="Die Abfragephrase (z.B. 'יהוה').")
parser.add_argument("--debug", action="store_true", help="Aktiviert detaillierte Debug-Ausgaben.")
args = parser.parse_args()
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
main(args)