Spaces:
Runtime error
Runtime error
| import os | |
| import binascii | |
| import numpy as np | |
| import sympy | |
| from collections import Counter | |
| class DissolutionCore: | |
| def __init__(self, chunk_size=1024): | |
| """ | |
| The 'Stomach' of LOGOS. Digests raw files into Mathematical Atoms. | |
| chunk_size: How many bytes to process at once (The Bite Size). | |
| Protocol 45: Hex Dissolution. | |
| """ | |
| self.chunk_size = chunk_size | |
| # Pre-compute Prime Weights for all Byte values (0-255) | |
| # This is a lookup table for "Semantic Gravity" | |
| self.atom_weights = self._generate_atomic_weights() | |
| def _generate_atomic_weights(self): | |
| """ | |
| Maps every possible Byte (00-FF) to its Greatest Prime Factor (GPF). | |
| Ex: 'FF' (255) -> Factors: 3, 5, 17 -> GPF: 17 | |
| Ex: '07' (7) -> Factors: 7 -> GPF: 7 | |
| """ | |
| weights = {} | |
| for i in range(256): | |
| if i < 2: | |
| weights[i] = 0 # Null/Unity has no heat | |
| else: | |
| factors = sympy.primefactors(i) | |
| weights[i] = max(factors) | |
| return weights | |
| def ingest_file(self, file_path): | |
| """ | |
| Reads a file and dissolves it into a Hex-Atom Stream. | |
| Returns: A stream of 'Physical Atoms' ready for the Tension Web. | |
| """ | |
| if not os.path.exists(file_path): | |
| raise FileNotFoundError(f"Target not acquired: {file_path}") | |
| print(f">> [DISSOLVE] Initiating breakdown of: {os.path.basename(file_path)}") | |
| hex_stream = [] | |
| heat_map = [] | |
| with open(file_path, 'rb') as f: | |
| while True: | |
| # 1. Read Binary | |
| chunk = f.read(self.chunk_size) | |
| if not chunk: | |
| break | |
| # 2. Convert to Integers (The Atoms) | |
| # We work with Ints (0-255) because they map directly to Primes | |
| atoms = list(chunk) | |
| # 3. Calculate 'Heat' (GPF) for this chunk | |
| chunk_heat = [self.atom_weights[a] for a in atoms] | |
| # 4. Store (In production, this streams to the DB/Visualizer) | |
| hex_stream.extend(atoms) | |
| heat_map.extend(chunk_heat) | |
| return self._analyze_residue(hex_stream, heat_map) | |
| def _analyze_residue(self, atoms, heat): | |
| """ | |
| Produces the 'Meta-Tensor' report from the dissolved matter. | |
| """ | |
| total_atoms = len(atoms) | |
| avg_heat = np.mean(heat) if heat else 0 | |
| entropy = self._calculate_shannon_entropy(atoms) | |
| # Find the 'Dominant Resonance' (Most frequent Prime Weight) | |
| if heat: | |
| heat_counts = Counter(heat) | |
| dominant_prime = heat_counts.most_common(1)[0][0] | |
| else: | |
| dominant_prime = 0 | |
| return { | |
| "status": "DISSOLVED", | |
| "total_atoms": total_atoms, | |
| "system_entropy": f"{entropy:.4f}", | |
| "average_heat": f"{avg_heat:.2f}", | |
| "dominant_resonance": f"Prime {dominant_prime}", | |
| "hex_preview": binascii.hexlify(bytearray(atoms[:16])).decode('utf-8').upper() | |
| } | |
| def _calculate_shannon_entropy(self, data): | |
| """ | |
| Standard entropy calculation to detect 'Noise' vs 'Signal'. | |
| """ | |
| if not data: return 0 | |
| counts = Counter(data) | |
| probs = [count / len(data) for count in counts.values()] | |
| return -sum(p * np.log2(p) for p in probs) | |
| if __name__ == "__main__": | |
| print("Dissolution Core v1.0") | |