Research-Stack/3-Mathematical-Models/fix_kwargs_meta.py

110 lines
4.6 KiB
Python

import os
os.chdir('/home/allaun/Documents/Research Stack/3-Mathematical-Models')
with open('pist_biological_polymorphic_shifter_v3_complete.py', 'r') as f:
content = f.read()
# LogisticMap: encode reads r_scaled from metadata fallback, decode passes metadata to encode
old_lm = """ data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
r = kwargs.get('r', 3.9)
x0 = kwargs.get('x0', 0.5)
result = bytearray()
# FIX 1: Integer discretization for deterministic roundtrip
r_scaled = int(r * 256.0 + 0.5) & 0xFFFF
x = int(x0 * 256.0 + 0.5) & 0xFFFF"""
new_lm = """ data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
meta = state.metadata.get(cls.name, {})
r = kwargs.get('r', meta.get('r', 3.9))
x0 = kwargs.get('x0', meta.get('x0', 0.5))
result = bytearray()
# FIX 1: Integer discretization for deterministic roundtrip
r_scaled = kwargs.get('r_scaled', meta.get('r_scaled', int(r * 256.0 + 0.5) & 0xFFFF))
x = int(x0 * 256.0 + 0.5) & 0xFFFF"""
content = content.replace(old_lm, new_lm)
# LogisticMap decode: read from metadata and pass to encode
old_lm_decode = """ @classmethod
def decode(cls, state, **kwargs):
return cls.encode(state, **kwargs) # XOR is self-inverse"""
new_lm_decode = """ @classmethod
def decode(cls, state, **kwargs):
# FIX: Read params from metadata fallback for self-inverse XOR
meta = state.metadata.get(cls.name, {})
if not kwargs and meta:
kwargs = dict(meta)
return cls.encode(state, **kwargs) # XOR is self-inverse"""
content = content.replace(old_lm_decode, new_lm_decode)
# GaloisRing: already has metadata fallback - good
# STDP: needs metadata fallback
old_stdp_decode = """ @classmethod
def decode(cls, state, **kwargs):
data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
tau = kwargs.get('tau', 20.0)
result = bytearray()
for i, b in enumerate(data):
weight = math.exp(-i / tau) if tau > 0 else 1.0
unmodulated = int(b / weight) if weight > 0 else b
result.append(min(max(unmodulated, 0), 255))
return state.update(bytes(result), f"decode_{cls.name}")"""
new_stdp_decode = """ @classmethod
def decode(cls, state, **kwargs):
data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
meta = state.metadata.get(cls.name, {})
tau = kwargs.get('tau', meta.get('tau', 20.0))
result = bytearray()
for i, b in enumerate(data):
weight = math.exp(-i / tau) if tau > 0 else 1.0
unmodulated = int(b / weight) if weight > 0 else b
result.append(min(max(unmodulated, 0), 255))
return state.update(bytes(result), f"decode_{cls.name}")"""
content = content.replace(old_stdp_decode, new_stdp_decode)
# miRNA: needs metadata fallback for decode
old_mirna_decode = """ @classmethod
def decode(cls, state, **kwargs):
data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
result = bytearray()
i = 0
while i < len(data):
if data[i] == 0xFE and i + 2 <= len(data):
result.extend([data[i+1]] * 6)
i += 2
else:
result.append(data[i])
i += 1
return state.update(bytes(result), f"decode_{cls.name}")"""
new_mirna_decode = """ @classmethod
def decode(cls, state, **kwargs):
data = bytes(state.encoded) if state.encoded else bytes(state.raw_bytes)
meta = state.metadata.get(cls.name, {})
result = bytearray()
i = 0
while i < len(data):
if data[i] == 0xFE and i + 2 <= len(data):
result.extend([data[i+1]] * 6)
i += 2
else:
result.append(data[i])
i += 1
return state.update(bytes(result), f"decode_{cls.name}")"""
content = content.replace(old_mirna_decode, new_mirna_decode)
# Wireworld: store original_size in metadata so decode can trim
old_ww_encode_meta = "meta = {'grid': f'{grid_width}x{grid_height}', 'n_steps': n_steps}"
new_ww_encode_meta = "meta = {'grid': f'{grid_width}x{grid_height}', 'n_steps': n_steps, 'original_size': len(data)}"
content = content.replace(old_ww_encode_meta, new_ww_encode_meta)
with open('pist_biological_polymorphic_shifter_v3_complete.py', 'w') as f:
f.write(content)
print("Fixed LogisticMap, STDP, miRNA, Wireworld metadata fallback")
print("Length:", len(content))