mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
110 lines
4.6 KiB
Python
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))
|