31B regimes parsed (early persist bump L7-16, motor only terminal — E2B signature absent, matches E4B); exp4_regimes.py takes explicit out path / defaults next to input jbar (fix pushed to node before 26B stage)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+14
-1
@@ -134,8 +134,21 @@ def main():
|
||||
for l in range(2, len(sensor), 4):
|
||||
print(f"{w1}/{w2:<9} L{l:>2} | " +
|
||||
" ".join(f"{curves[wi, l]:+.2f}" for wi in range(5)))
|
||||
if len(sys.argv) > 2:
|
||||
out = Path(sys.argv[2])
|
||||
elif len(sys.argv) > 1:
|
||||
# default: save next to the input jbar (that dir is what node
|
||||
# sidecars sync; CWD-relative "results/" has crashed 3 scans)
|
||||
ckp = Path(sys.argv[1])
|
||||
out = ckp.parent / ckp.name.replace("jbar", "regimes")
|
||||
if out == ckp:
|
||||
out = RES / "regimes.pt"
|
||||
else:
|
||||
out = RES / "regimes.pt"
|
||||
out.parent.mkdir(parents=True, exist_ok=True)
|
||||
torch.save({"sensor": sensor, "motor": motor, "persist": persist,
|
||||
"content": content, "ignition": ign}, RES / "regimes.pt")
|
||||
"content": content, "ignition": ign}, out)
|
||||
print("saved", out)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
"""Reconstruct regimes_*.pt from an exp4_*.log printed table (the scan's
|
||||
torch.save crashes on its CWD-relative "results/" path — known bug; the
|
||||
printed table is the durable artifact). Generalizes parse_e4b_regimes.py.
|
||||
|
||||
Usage: parse_regimes_log.py LOG OUT [--layers N] [--note TEXT]
|
||||
"""
|
||||
import argparse
|
||||
import re
|
||||
|
||||
import torch
|
||||
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("log")
|
||||
ap.add_argument("out")
|
||||
ap.add_argument("--layers", type=int, default=None,
|
||||
help="assert this many table rows were parsed")
|
||||
ap.add_argument("--note", default=None,
|
||||
help="provenance note stored in the tensor dict")
|
||||
args = ap.parse_args()
|
||||
|
||||
sensor, motor, persist, content = [], [], [], []
|
||||
pat = re.compile(
|
||||
r"^L\s*(\d+) \| ([\d.]+)\s*#* *\| ([\d.]+)\s*#* *\| ([\d.]+) \| ([\d.]+)")
|
||||
for line in open(args.log):
|
||||
m = pat.match(line.strip())
|
||||
if m:
|
||||
i, s, mo, p, c = m.groups()
|
||||
assert int(i) == len(sensor), f"non-contiguous row L{i}"
|
||||
sensor.append(float(s))
|
||||
motor.append(float(mo))
|
||||
persist.append(float(p))
|
||||
content.append(float(c))
|
||||
if args.layers is not None:
|
||||
assert len(sensor) == args.layers, len(sensor)
|
||||
note = args.note or f"reconstructed from {args.log}"
|
||||
torch.save({"sensor": torch.tensor(sensor), "motor": torch.tensor(motor),
|
||||
"persist": torch.tensor(persist),
|
||||
"content": torch.tensor(content), "note": note}, args.out)
|
||||
print(f"saved {len(sensor)} layers -> {args.out}")
|
||||
print("sensor peak: L%d = %.2f" % (sensor.index(max(sensor)), max(sensor)))
|
||||
print("persist peak: L%d = %.2f" % (persist.index(max(persist)),
|
||||
max(persist)))
|
||||
print("motor >=0.1 from: L%s" % next(
|
||||
(i for i, v in enumerate(motor) if v >= 0.1), "never"))
|
||||
Reference in New Issue
Block a user