openai/gpt-5.2 · C0 seed 0 · tier tools · accuracy 0.82 · preparation 1.00 · budget 61%
S1=0.99 · S2=0.86 · S3=0.53 · S4=0.91 · coverage 0.88 · 371 nodes
Narrative experiment log
- Free run (200 ticks; 200 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (300 ticks; port 0 at +0.17, 300t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (120 ticks; port 0 at +0.17, 120t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (150 ticks; port 0 at +0.17, 150t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (200 ticks; port 0 at +0.17, 200t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (300 ticks; port 0 at +0.17, 300t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (500 ticks; port 0 at +0.17, 500t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (2,100 ticks; port 0 at +0.17, 2100t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (4,100 ticks; port 0 at +0.17, 4100t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 0 at +0.17, 40t) — ch29 -0.48→+0.56, ch14 +0.01→-0.77, ch8 +0.20→-0.41.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 0 at -0.17, 40t) — ch29 +0.35→+0.64, ch14 -0.50→-0.79, ch8 -0.26→-0.44.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 1 at +0.17, 40t) — ch0 +0.24→-0.81, ch1 +0.59→-0.40, ch11 +0.28→-0.47.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 1 at -0.17, 40t) — ch0 -0.62→-0.91, ch1 -0.16→-0.43, ch11 -0.30→-0.49.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 2 at +0.17, 40t) — ch16 +0.83→-0.24, ch13 +0.51→-0.28, ch25 -0.08→+0.46.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 2 at -0.17, 40t) — ch16 -0.00→-0.25, ch13 -0.10→-0.27.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 3 at +0.17, 40t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 3 at -0.17, 40t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 4 at +0.17, 40t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 4 at -0.17, 40t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 5 at +0.17, 40t) — ch29 -0.44→+0.23, ch14 +0.07→-0.54, ch8 +0.13→-0.41.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 5 at -0.17, 40t) — ch29 +0.01→+0.65, ch14 -0.26→-0.79, ch8 -0.03→-0.43.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 0 at +0.08, 40t) — ch29 -0.42→+0.35, ch14 -0.00→-0.74, ch21 -0.46→+0.07.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 0 at -0.08, 40t) — ch14 -0.13→+0.12, ch2 -0.16→-0.33.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 1 at +0.08, 40t) — ch1 +0.54→-0.20, ch0 +0.15→-0.51, ch10 +0.37→-0.20.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 1 at -0.08, 40t) — ch2 -0.15→-0.38, ch16 +0.66→+0.48, ch25 -0.01→-0.18.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 5 at +0.08, 40t) — ch8 +0.13→-0.32, ch29 -0.39→-0.02, ch20 -0.12→-0.48.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 2× single-port probe (2,040 ticks; port 5 at -0.08, 40t) — ch8 +0.07→+0.23, ch2 -0.15→-0.30.
- Reset to fresh initial conditions (−200 ticks).
- 2× single-port probe (4,200 ticks; port 0 at +0.17, 2200t) — ch21 -0.02→-0.38, ch20 -0.47→-0.71.
- Reset to fresh initial conditions (−200 ticks).
- 2× single-port probe (4,200 ticks; port 1 at +0.17, 2200t).
- Reset to fresh initial conditions (−200 ticks).
- 5× single-port probe (4,200 ticks; port 0 at +0.17, 2200t) — ch21 -0.22→-0.39.
- Reset to fresh initial conditions (−200 ticks).
- Free run (200 ticks; 200 ticks, all inputs 0).
- 4× single-port probe (2,000 ticks; port 0 at -0.17, 200t).
- Reset to fresh initial conditions (−200 ticks).
- 5× single-port probe (4,200 ticks; port 1 at +0.17, 2200t).
- Ended exploration → received 16 prediction contracts + 2 preparation contracts.
- Submitted preparation policy for contract 100 (65 chars).
- Submitted preparation policy for contract 101 (65 chars).
- Submitted 16 contract answers.
Agent-written files (its instruments & theories)
app/answers.json (1,914 chars)
[
{
"high": -0.11772145638489279,
"id": 0,
"low": -0.4827732804572124,
"mean": -0.3002473684210526
},
{
"high": 0.28723952904623773,
"id": 1,
"low": -0.05215531851992182,
"mean": 0.11754210526315796
},
{
"high": 0.7686851508093282,
"id": 2,
"low": 0.5638937965590931,
"mean": 0.6662894736842107
},
{
"high": 0.2680551747195472,
"id": 3,
"low": 0.029976404227821135,
"mean": 0.14901578947368416
},
{
"high": 0.009670071357409826,
"id": 4,
"low": -0.35065789480221865,
"mean": -0.1704939117224044
},
{
"high": 0.7251085566568792,
"id": 5,
"low": 0.5203172024066441,
"mean": 0.6227128795317617
},
{
"high": -0.38359529380551805,
"id": 6,
"low": -0.583595293805518,
"mean": -0.483595293805518
},
{
"high": -0.3857954979006232,
"id": 7,
"low": -0.5857954979006232,
"mean": -0.4857954979006232
},
{
"high": 0.14853777695197026,
"id": 8,
"low": -0.2117901892076582,
"mean": -0.03162620612784397
},
{
"high": 0.2609947110418557,
"id": 9,
"low": -0.22110693341703383,
"mean": 0.019943888812410916
},
{
"high": 0.3025016304356889,
"id": 10,
"low": -0.036893217130470696,
"mean": 0.13280420665260909
},
{
"high": -0.6576783280746763,
"id": 11,
"low": -0.8576783280746763,
"mean": -0.7576783280746763
},
{
"high": 0.2869281866269948,
"id": 12,
"low": -0.05246666093916477,
"mean": 0.11723076284391501
},
{
"high": 0.2869937243203825,
"id": 13,
"low": -0.05240112324577709,
"mean": 0.1172963005373027
},
{
"high": -0.4083348451690775,
"id": 14,
"low": -0.6083348451690774,
"mean": -0.5083348451690775
},
{
"high": 0.13507422301306982,
"id": 15,
"low": -0.22525374314655866,
"mean": -0.04508976006674442
}
]
app/contracts.json (2,177 chars)
[
{"id": 0, "sensor": 29, "protocol": [{"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 1, "sensor": 8, "protocol": [{"t": 220, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 2, "sensor": 16, "protocol": [{"t": 231, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 3, "sensor": 11, "protocol": [{"t": 203, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 4, "sensor": 24, "protocol": [{"t": 323, "u": [0.885, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 5, "sensor": 16, "protocol": [{"t": 381, "u": [0.774, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 6, "sensor": 19, "protocol": [{"t": 305, "u": [-0.848, 0.0, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 7, "sensor": 19, "protocol": [{"t": 333, "u": [0.0, -0.891, 0.0, 0.0, 0.0, 0.0]}]},
{"id": 8, "sensor": 24, "protocol": [
{"t": 296, "u": [0.0, 0.0, -1.0, 0.0, 0.0, 0.0]},
{"t": 330, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 9, "sensor": 14, "protocol": [
{"t": 264, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0]},
{"t": 325, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 10, "sensor": 8, "protocol": [
{"t": 285, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0]},
{"t": 475, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 11, "sensor": 7, "protocol": [
{"t": 286, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0]},
{"t": 496, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 12, "sensor": 8, "protocol": [
{"t": 262, "u": [0.0, 0.887, 0.0, 0.0, 0.0, 0.0]},
{"t": 208, "u": [0.0, 0.0, -0.942, 0.0, 0.0, 0.0]},
{"t": 560, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 13, "sensor": 8, "protocol": [
{"t": 208, "u": [0.0, 0.0, 0.901, 0.0, 0.0, 0.0]},
{"t": 193, "u": [0.0, 0.0, -0.869, 0.0, 0.0, 0.0]},
{"t": 491, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 14, "sensor": 9, "protocol": [
{"t": 234, "u": [0.0, 0.0, 0.833, 0.0, 0.0, 0.0]},
{"t": 214, "u": [0.0, -0.919, 0.0, 0.0, 0.0, 0.0]},
{"t": 554, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]},
{"id": 15, "sensor": 24, "protocol": [
{"t": 265, "u": [0.919, 0.0, 0.0, 0.0, 0.0, 0.0]},
{"t": 226, "u": [0.0, 0.0, -0.986, 0.0, 0.0, 0.0]},
{"t": 471, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
]}
]
app/data/baseline_zero_200.json (767 chars)
{"t":200,"u":[0,0,0,0,0,0],"tail_mean":{"0":0.0283,"1":0.4459,"2":-0.1549,"3":-0.4723,"4":0.062,"5":-0.515,"6":-0.7329,"7":-0.7568,"8":0.1153,"9":-0.513,"10":0.3089,"11":0.1437,"12":-0.3719,"13":0.4437,"14":-0.034,"15":0.4241,"16":0.6668,"17":-0.2816,"18":-0.1185,"19":-0.4869,"20":-0.1551,"21":-0.4936,"22":-0.4034,"23":0.3565,"24":-0.062,"25":-0.0352,"26":-0.3677,"27":-0.5373,"28":0.6228,"29":-0.2916},"tail_sd":{"0":0.0325,"1":0.0289,"2":0.0279,"3":0.0283,"4":0.0393,"5":0.0297,"6":0.0274,"7":0.0257,"8":0.0244,"9":0.0236,"10":0.0286,"11":0.0339,"12":0.0232,"13":0.0282,"14":0.027,"15":0.0218,"16":0.0205,"17":0.0277,"18":0.0217,"19":0.0307,"20":0.0268,"21":0.0339,"22":0.0348,"23":0.0353,"24":0.0209,"25":0.0282,"26":0.0399,"27":0.0223,"28":0.0318,"29":0.0315}}
app/data/duration_u0_1_L100.json (784 chars)
{"warmup":100,"step_L":100,"u":[1,0,0,0,0,0],"tail_mean":{"0":0.0454,"1":0.4487,"2":-0.1589,"3":-0.4847,"4":0.0523,"5":-0.5104,"6":-0.7232,"7":-0.7731,"8":0.1495,"9":-0.5014,"10":0.3291,"11":0.1636,"12":-0.3656,"13":0.4172,"14":-0.1286,"15":0.427,"16":0.6622,"17":-0.2942,"18":-0.1243,"19":-0.4841,"20":0.033,"21":-0.3579,"22":-0.4135,"23":0.3651,"24":-0.0631,"25":-0.0202,"26":-0.3719,"27":-0.5309,"28":0.6324,"29":-0.3782},"tail_sd":{"0":0.0322,"1":0.0336,"2":0.031,"3":0.025,"4":0.023,"5":0.0347,"6":0.0273,"7":0.0317,"8":0.0346,"9":0.0315,"10":0.0279,"11":0.0358,"12":0.0323,"13":0.0345,"14":0.0272,"15":0.0279,"16":0.0341,"17":0.0295,"18":0.0295,"19":0.0346,"20":0.0303,"21":0.0302,"22":0.0298,"23":0.026,"24":0.0298,"25":0.0306,"26":0.0263,"27":0.0346,"28":0.0272,"29":0.0286}}
app/data/duration_u0_1_L20.json (783 chars)
{"warmup":100,"step_L":20,"u":[1,0,0,0,0,0],"tail_mean":{"0":0.0222,"1":0.4408,"2":-0.1528,"3":-0.4768,"4":0.0804,"5":-0.5148,"6":-0.7213,"7":-0.7514,"8":0.0735,"9":-0.5166,"10":0.3205,"11":0.1371,"12":-0.3651,"13":0.4181,"14":-0.1012,"15":0.4445,"16":0.6674,"17":-0.2718,"18":-0.1129,"19":-0.4795,"20":-0.1548,"21":-0.5054,"22":-0.3934,"23":0.3762,"24":-0.0631,"25":-0.0167,"26":-0.3777,"27":-0.517,"28":0.6048,"29":-0.2516},"tail_sd":{"0":0.0268,"1":0.0245,"2":0.0256,"3":0.0286,"4":0.0413,"5":0.0212,"6":0.0341,"7":0.0295,"8":0.0501,"9":0.0265,"10":0.0303,"11":0.034,"12":0.02,"13":0.0344,"14":0.0415,"15":0.0327,"16":0.0269,"17":0.017,"18":0.031,"19":0.0306,"20":0.0457,"21":0.0338,"22":0.0352,"23":0.0367,"24":0.0244,"25":0.0251,"26":0.0321,"27":0.0313,"28":0.021,"29":0.0686}}
app/data/duration_u0_1_L200.json (781 chars)
{"warmup":100,"step_L":200,"u":[1,0,0,0,0,0],"tail_mean":{"0":0.0509,"1":0.4586,"2":-0.1651,"3":-0.4681,"4":0.0606,"5":-0.5235,"6":-0.7203,"7":-0.7671,"8":0.0721,"9":-0.511,"10":0.3093,"11":0.136,"12":-0.3658,"13":0.4356,"14":-0.3399,"15":0.4277,"16":0.6687,"17":-0.2911,"18":-0.119,"19":-0.4961,"20":0.0977,"21":-0.241,"22":-0.4175,"23":0.3734,"24":-0.074,"25":-0.0317,"26":-0.3725,"27":-0.5279,"28":0.6352,"29":-0.2387},"tail_sd":{"0":0.0267,"1":0.0246,"2":0.024,"3":0.0322,"4":0.0374,"5":0.0257,"6":0.0262,"7":0.0324,"8":0.022,"9":0.0292,"10":0.0326,"11":0.0313,"12":0.0433,"13":0.0324,"14":0.0272,"15":0.0327,"16":0.03,"17":0.0249,"18":0.0291,"19":0.0327,"20":0.0324,"21":0.0409,"22":0.0338,"23":0.0221,"24":0.0199,"25":0.0236,"26":0.0296,"27":0.0385,"28":0.0236,"29":0.0303}}
app/data/duration_u0_1_L400.json (785 chars)
{"warmup":100,"step_L":400,"u":[1,0,0,0,0,0],"tail_mean":{"0":0.0405,"1":0.4386,"2":-0.2018,"3":-0.4836,"4":0.0678,"5":-0.5038,"6":-0.7259,"7":-0.7579,"8":-0.0853,"9":-0.5097,"10":0.3061,"11":0.1648,"12":-0.3646,"13":0.4425,"14":-0.621,"15":0.4103,"16":0.6548,"17":-0.2899,"18":-0.1261,"19":-0.4763,"20":0.1063,"21":-0.0651,"22":-0.4101,"23":0.3511,"24":-0.0798,"25":-0.047,"26":-0.363,"27":-0.5254,"28":0.6288,"29":0.0417},"tail_sd":{"0":0.037,"1":0.0225,"2":0.0293,"3":0.0299,"4":0.0242,"5":0.0262,"6":0.0276,"7":0.0275,"8":0.0357,"9":0.0275,"10":0.0317,"11":0.0264,"12":0.0347,"13":0.0238,"14":0.0359,"15":0.0357,"16":0.0362,"17":0.0409,"18":0.0362,"19":0.0293,"20":0.0331,"21":0.0276,"22":0.0292,"23":0.0298,"24":0.0204,"25":0.0357,"26":0.025,"27":0.0326,"28":0.0227,"29":0.0386}}
app/data/duration_u0_1_L50.json (781 chars)
{"warmup":100,"step_L":50,"u":[1,0,0,0,0,0],"tail_mean":{"0":0.0264,"1":0.4553,"2":-0.1574,"3":-0.4728,"4":0.0599,"5":-0.5256,"6":-0.7293,"7":-0.7577,"8":0.2058,"9":-0.5143,"10":0.3056,"11":0.142,"12":-0.3693,"13":0.4285,"14":0.0061,"15":0.4172,"16":0.6679,"17":-0.2762,"18":-0.1299,"19":-0.4872,"20":0.019,"21":-0.3952,"22":-0.406,"23":0.3784,"24":-0.0492,"25":-0.0104,"26":-0.3712,"27":-0.529,"28":0.6109,"29":-0.4513},"tail_sd":{"0":0.0255,"1":0.0303,"2":0.0229,"3":0.0278,"4":0.0334,"5":0.0314,"6":0.0288,"7":0.028,"8":0.0346,"9":0.0298,"10":0.0375,"11":0.0241,"12":0.0316,"13":0.031,"14":0.0464,"15":0.0351,"16":0.0322,"17":0.0249,"18":0.024,"19":0.0303,"20":0.0304,"21":0.0334,"22":0.0403,"23":0.0305,"24":0.0378,"25":0.0312,"26":0.0296,"27":0.0245,"28":0.0238,"29":0.0486}}
app/data/long_u0_1_4000_tail.json (269 chars)
{"protocol":[{"t":100,"u":[0,0,0,0,0,0]},{"t":4000,"u":[1,0,0,0,0,0]}],"channels":[1,8,14,20,21,29],"tail_mean":{"1":0.2903,"8":-0.4325,"14":-0.7637,"20":-0.6037,"21":0.0629,"29":0.5967},"tail_sd":{"1":0.0251,"8":0.024,"14":0.0279,"20":0.0269,"21":0.0353,"29":0.0298}}
app/data/port_steps/u0_neg0.5.json (1,198 chars)
{"port":0,"amp":-0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0339,"1":0.4473,"2":-0.1414,"3":-0.4795,"4":0.0582,"5":-0.5148,"6":-0.735,"7":-0.7521,"8":0.1084,"9":-0.5041,"10":0.3142,"11":0.1372,"12":-0.3666,"13":0.4235,"14":-0.0328,"15":0.4289,"16":0.6578,"17":-0.2754,"18":-0.113,"19":-0.4838,"20":-0.1655,"21":-0.4901,"22":-0.4051,"23":0.354,"24":-0.0451,"25":-0.0194,"26":-0.3837,"27":-0.5283,"28":0.6221,"29":-0.2966},
"y_short":{"0":0.0383,"1":0.4395,"2":-0.1607,"3":-0.4786,"4":0.0654,"5":-0.509,"6":-0.7272,"7":-0.7592,"8":0.0108,"9":-0.5106,"10":0.3135,"11":0.142,"12":-0.3656,"13":0.4203,"14":-0.1282,"15":0.4421,"16":0.6669,"17":-0.2893,"18":-0.1113,"19":-0.4717,"20":-0.2924,"21":-0.5377,"22":-0.4156,"23":0.3735,"24":-0.0496,"25":-0.0233,"26":-0.3735,"27":-0.5238,"28":0.6238,"29":-0.128},
"y_long":{"0":0.0561,"1":0.4247,"2":-0.3302,"3":-0.4801,"4":0.0712,"5":-0.5087,"6":-0.7225,"7":-0.7552,"8":0.0335,"9":-0.5015,"10":0.2801,"11":0.1612,"12":-0.3717,"13":0.4508,"14":0.1195,"15":0.3625,"16":0.5292,"17":-0.2842,"18":-0.1115,"19":-0.472,"20":-0.4082,"21":-0.6094,"22":-0.4031,"23":0.3762,"24":-0.1233,"25":-0.1491,"26":-0.371,"27":-0.5097,"28":0.6245,"29":-0.1339}}
app/data/port_steps/u0_neg1.json (1,190 chars)
{"port":0,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0232,"1":0.4539,"2":-0.1608,"3":-0.4698,"4":0.0653,"5":-0.5206,"6":-0.7393,"7":-0.7678,"8":0.1073,"9":-0.5097,"10":0.319,"11":0.1419,"12":-0.3523,"13":0.4259,"14":-0.0303,"15":0.4381,"16":0.6702,"17":-0.2815,"18":-0.1185,"19":-0.484,"20":-0.1607,"21":-0.499,"22":-0.4013,"23":0.365,"24":-0.0413,"25":-0.021,"26":-0.3739,"27":-0.5286,"28":0.6301,"29":-0.3123},
"y_short":{"0":0.0429,"1":0.4351,"2":-0.158,"3":-0.4762,"4":0.068,"5":-0.5231,"6":-0.7266,"7":-0.7593,"8":-0.2565,"9":-0.4971,"10":0.304,"11":0.14,"12":-0.3569,"13":0.4339,"14":-0.5009,"15":0.4268,"16":0.6554,"17":-0.2824,"18":-0.1104,"19":-0.4834,"20":-0.5508,"21":-0.6106,"22":-0.3986,"23":0.3608,"24":-0.0532,"25":-0.0447,"26":-0.361,"27":-0.5251,"28":0.6314,"29":0.3492},
"y_long":{"0":0.0468,"1":0.3941,"2":-0.3103,"3":-0.4782,"4":0.0548,"5":-0.5095,"6":-0.7283,"7":-0.7551,"8":-0.439,"9":-0.5136,"10":0.2607,"11":0.1688,"12":-0.3742,"13":0.4891,"14":-0.7851,"15":0.3446,"16":0.5793,"17":-0.275,"18":-0.1287,"19":-0.4819,"20":-0.7226,"21":-0.6495,"22":-0.42,"23":0.3567,"24":-0.1674,"25":-0.1569,"26":-0.3712,"27":-0.5218,"28":0.6228,"29":0.6437}}
app/data/port_steps/u0_neg1_relax.json (2,554 chars)
{
"port": 0,
"warmup": {"t": 200, "u": [0,0,0,0,0,0]},
"neg_stages": [
{"t": 200, "u": [-1,0,0,0,0,0]},
{"t": 300, "u": [-1,0,0,0,0,0]},
{"t": 500, "u": [-1,0,0,0,0,0]},
{"t": 1000, "u": [-1,0,0,0,0,0]}
],
"y0": {"0": 0.0327, "1": 0.443, "2": -0.1514, "3": -0.4673, "4": 0.0776, "5": -0.5145, "6": -0.7428, "7": -0.7538, "8": 0.1199, "9": -0.5065, "10": 0.3095, "11": 0.1466, "12": -0.3542, "13": 0.4176, "14": -0.0352, "15": 0.4375, "16": 0.6563, "17": -0.295, "18": -0.1202, "19": -0.4921, "20": -0.1451, "21": -0.5041, "22": -0.4066, "23": 0.3615, "24": -0.067, "25": -0.0287, "26": -0.3864, "27": -0.5348, "28": 0.6327, "29": -0.3038},
"y_after_neg": [
{"neg_t_total": 200, "tail_mean": {"0": 0.0604, "1": 0.448, "2": -0.1739, "3": -0.4642, "4": 0.0563, "5": -0.5088, "6": -0.7237, "7": -0.7568, "8": -0.4447, "9": -0.5126, "10": 0.3107, "11": 0.1453, "12": -0.3747, "13": 0.4312, "14": -0.7682, "15": 0.4285, "16": 0.6397, "17": -0.2871, "18": -0.1267, "19": -0.4787, "20": -0.7141, "21": -0.6592, "22": -0.4019, "23": 0.369, "24": -0.0711, "25": -0.039, "26": -0.3834, "27": -0.5135, "28": 0.6192, "29": 0.6413}},
{"neg_t_total": 500, "tail_mean": {"0": 0.0557, "1": 0.4269, "2": -0.2133, "3": -0.4834, "4": 0.0519, "5": -0.52, "6": -0.7444, "7": -0.7497, "8": -0.4393, "9": -0.5112, "10": 0.3012, "11": 0.1658, "12": -0.3559, "13": 0.4434, "14": -0.7792, "15": 0.4208, "16": 0.616, "17": -0.2772, "18": -0.1215, "19": -0.4772, "20": -0.7271, "21": -0.6517, "22": -0.3972, "23": 0.359, "24": -0.1, "25": -0.0749, "26": -0.3709, "27": -0.5158, "28": 0.6159, "29": 0.6404}},
{"neg_t_total": 1000, "tail_mean": {"0": 0.0537, "1": 0.4229, "2": -0.2707, "3": -0.4657, "4": 0.0549, "5": -0.5147, "6": -0.7286, "7": -0.748, "8": -0.4303, "9": -0.5073, "10": 0.2839, "11": 0.1859, "12": -0.3604, "13": 0.4576, "14": -0.7703, "15": 0.3862, "16": 0.5956, "17": -0.2845, "18": -0.1258, "19": -0.4973, "20": -0.7186, "21": -0.6521, "22": -0.4199, "23": 0.3672, "24": -0.1232, "25": -0.1, "26": -0.3773, "27": -0.5365, "28": 0.6166, "29": 0.6288}},
{"neg_t_total": 2000, "tail_mean": {"0": 0.0652, "1": 0.3984, "2": -0.3031, "3": -0.4862, "4": 0.0613, "5": -0.5168, "6": -0.731, "7": -0.7689, "8": -0.432, "9": -0.5022, "10": 0.2781, "11": 0.1818, "12": -0.3628, "13": 0.4727, "14": -0.7619, "15": 0.359, "16": 0.5603, "17": -0.2843, "18": -0.1237, "19": -0.4923, "20": -0.7227, "21": -0.6385, "22": -0.4094, "23": 0.3557, "24": -0.1638, "25": -0.153, "26": -0.3708, "27": -0.5326, "28": 0.6265, "29": 0.6411}}
]
}
app/data/port_steps/u0_pos0.5.json (1,186 chars)
{"port":0,"amp":0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0348,"1":0.4509,"2":-0.1591,"3":-0.4761,"4":0.0804,"5":-0.5148,"6":-0.7159,"7":-0.7543,"8":0.1261,"9":-0.5026,"10":0.3149,"11":0.16,"12":-0.358,"13":0.4215,"14":-0.0334,"15":0.4168,"16":0.651,"17":-0.2709,"18":-0.1176,"19":-0.491,"20":-0.1328,"21":-0.4938,"22":-0.4072,"23":0.3668,"24":-0.0448,"25":-0.024,"26":-0.3749,"27":-0.5252,"28":0.6212,"29":-0.2957},
"y_short":{"0":0.0368,"1":0.44,"2":-0.1639,"3":-0.4827,"4":0.0639,"5":-0.5218,"6":-0.7375,"7":-0.76,"8":0.187,"9":-0.5091,"10":0.3248,"11":0.1473,"12":-0.3557,"13":0.4247,"14":-0.0029,"15":0.434,"16":0.6661,"17":-0.2762,"18":-0.1172,"19":-0.4867,"20":-0.055,"21":-0.4556,"22":-0.4032,"23":0.3585,"24":-0.0609,"25":-0.023,"26":-0.3659,"27":-0.5064,"28":0.6161,"29":-0.4161},
"y_long":{"0":0.0592,"1":0.364,"2":-0.2844,"3":-0.4754,"4":0.0699,"5":-0.4948,"6":-0.7437,"7":-0.7496,"8":-0.3138,"9":-0.5075,"10":0.2675,"11":0.215,"12":-0.3659,"13":0.464,"14":-0.738,"15":0.3697,"16":0.5741,"17":-0.2789,"18":-0.1289,"19":-0.4786,"20":-0.1892,"21":0.0688,"22":-0.4035,"23":0.3696,"24":-0.2289,"25":-0.1142,"26":-0.3804,"27":-0.526,"28":0.6281,"29":0.3483}}
app/data/port_steps/u0_pos1.json (1,190 chars)
{"port":0,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0411,"1":0.4596,"2":-0.1637,"3":-0.4724,"4":0.0643,"5":-0.5109,"6":-0.7334,"7":-0.7638,"8":0.12,"9":-0.5071,"10":0.3167,"11":0.151,"12":-0.3663,"13":0.4276,"14":-0.0355,"15":0.4239,"16":0.6759,"17":-0.2723,"18":-0.1199,"19":-0.4782,"20":-0.1606,"21":-0.4922,"22":-0.4086,"23":0.364,"24":-0.0591,"25":-0.0412,"26":-0.3714,"27":-0.5333,"28":0.6254,"29":-0.3006},
"y_short":{"0":0.0371,"1":0.4434,"2":-0.1602,"3":-0.4744,"4":0.0585,"5":-0.5143,"6":-0.7238,"7":-0.7528,"8":0.2001,"9":-0.5119,"10":0.3184,"11":0.1531,"12":-0.3638,"13":0.4413,"14":0.0132,"15":0.4231,"16":0.6688,"17":-0.2816,"18":-0.1183,"19":-0.4887,"20":0.0061,"21":-0.409,"22":-0.4086,"23":0.3628,"24":-0.0545,"25":-0.04,"26":-0.3719,"27":-0.5217,"28":0.6314,"29":-0.4753},
"y_long":{"0":0.055,"1":0.3563,"2":-0.2467,"3":-0.472,"4":0.0627,"5":-0.5155,"6":-0.7317,"7":-0.7619,"8":-0.4149,"9":-0.5082,"10":0.2421,"11":0.209,"12":-0.3513,"13":0.4437,"14":-0.7713,"15":0.3825,"16":0.603,"17":-0.2886,"18":-0.1139,"19":-0.4933,"20":-0.4791,"21":-0.003,"22":-0.4017,"23":0.3656,"24":-0.2299,"25":-0.0943,"26":-0.3848,"27":-0.5281,"28":0.6279,"29":0.5635}}
app/data/port_steps/u0_pos1_then_neg1.json (869 chars)
{"port":0,"seq":[{"u":[0,0,0,0,0,0],"t":200},{"u":[1,0,0,0,0,0],"t":2000},{"u":[-1,0,0,0,0,0],"t":2000}],
"y_after_pos":{"0":0.06,"1":0.3835,"2":-0.2673,"3":-0.4839,"4":0.052,"5":-0.509,"6":-0.7291,"7":-0.7615,"8":-0.4066,"9":-0.5096,"10":0.2695,"11":0.2091,"12":-0.367,"13":0.447,"14":-0.7727,"15":0.3865,"16":0.5776,"17":-0.2765,"18":-0.1058,"19":-0.4732,"20":-0.4736,"21":-0.0201,"22":-0.3943,"23":0.3765,"24":-0.1977,"25":-0.1147,"26":-0.3614,"27":-0.5239,"28":0.633,"29":0.5708},
"y_after_neg":{"0":0.0492,"1":0.3653,"2":-0.3309,"3":-0.4773,"4":0.0642,"5":-0.5014,"6":-0.7289,"7":-0.7593,"8":-0.4396,"9":-0.5092,"10":0.2387,"11":0.1723,"12":-0.3575,"13":0.4476,"14":-0.7774,"15":0.3804,"16":0.5205,"17":-0.283,"18":-0.116,"19":-0.4793,"20":-0.707,"21":-0.382,"22":-0.4165,"23":0.3694,"24":-0.1961,"25":-0.1499,"26":-0.3821,"27":-0.5248,"28":0.6188,"29":0.6384}}
app/data/port_steps/u0_pos1_then_neg1_relax.json (2,614 chars)
{
"port": 0,
"warmup": {"t": 200, "u": [0,0,0,0,0,0]},
"pos": {"t": 2000, "u": [1,0,0,0,0,0]},
"neg_stages": [
{"t": 200, "u": [-1,0,0,0,0,0]},
{"t": 300, "u": [-1,0,0,0,0,0]},
{"t": 500, "u": [-1,0,0,0,0,0]},
{"t": 1000, "u": [-1,0,0,0,0,0]}
],
"y_after_pos": {"0": 0.0608, "1": 0.3628, "2": -0.2591, "3": -0.4707, "4": 0.0717, "5": -0.5175, "6": -0.7217, "7": -0.7512, "8": -0.4265, "9": -0.5207, "10": 0.2545, "11": 0.2321, "12": -0.3661, "13": 0.4342, "14": -0.7727, "15": 0.3978, "16": 0.57, "17": -0.2826, "18": -0.1086, "19": -0.4759, "20": -0.4838, "21": -0.029, "22": -0.4098, "23": 0.3656, "24": -0.2244, "25": -0.1111, "26": -0.3783, "27": -0.5274, "28": 0.6321, "29": 0.575},
"y_after_neg": [
{"neg_t_total": 200, "tail_mean": {"0": 0.0597, "1": 0.3535, "2": -0.2602, "3": -0.4738, "4": 0.0526, "5": -0.5042, "6": -0.7265, "7": -0.758, "8": -0.4113, "9": -0.5209, "10": 0.2437, "11": 0.2091, "12": -0.3604, "13": 0.434, "14": -0.7667, "15": 0.3955, "16": 0.5674, "17": -0.2815, "18": -0.1181, "19": -0.4765, "20": -0.5082, "21": -0.0789, "22": -0.4056, "23": 0.3679, "24": -0.2443, "25": -0.1177, "26": -0.3712, "27": -0.5203, "28": 0.6302, "29": 0.5727}},
{"neg_t_total": 500, "tail_mean": {"0": 0.0345, "1": 0.3332, "2": -0.2748, "3": -0.4862, "4": 0.07, "5": -0.5146, "6": -0.7283, "7": -0.7676, "8": -0.4074, "9": -0.5128, "10": 0.2334, "11": 0.1967, "12": -0.3655, "13": 0.439, "14": -0.7676, "15": 0.4034, "16": 0.5573, "17": -0.2838, "18": -0.1065, "19": -0.4748, "20": -0.5752, "21": -0.1315, "22": -0.4043, "23": 0.3713, "24": -0.2364, "25": -0.095, "26": -0.3765, "27": -0.5176, "28": 0.6347, "29": 0.609}},
{"neg_t_total": 1000, "tail_mean": {"0": 0.0382, "1": 0.3245, "2": -0.2783, "3": -0.4798, "4": 0.0619, "5": -0.5103, "6": -0.7402, "7": -0.7554, "8": -0.4189, "9": -0.4954, "10": 0.2217, "11": 0.1939, "12": -0.3637, "13": 0.4318, "14": -0.7689, "15": 0.3928, "16": 0.5684, "17": -0.2733, "18": -0.1201, "19": -0.4919, "20": -0.652, "21": -0.2207, "22": -0.4227, "23": 0.3673, "24": -0.2446, "25": -0.1004, "26": -0.3707, "27": -0.5373, "28": 0.6195, "29": 0.6227}},
{"neg_t_total": 2000, "tail_mean": {"0": 0.0448, "1": 0.3182, "2": -0.2821, "3": -0.4819, "4": 0.0683, "5": -0.4973, "6": -0.7337, "7": -0.7565, "8": -0.4284, "9": -0.5087, "10": 0.2001, "11": 0.1689, "12": -0.3632, "13": 0.4106, "14": -0.7819, "15": 0.4125, "16": 0.5269, "17": -0.2877, "18": -0.1113, "19": -0.4809, "20": -0.7042, "21": -0.3906, "22": -0.3992, "23": 0.3759, "24": -0.2733, "25": -0.1018, "26": -0.3584, "27": -0.5152, "28": 0.6157, "29": 0.6339}}
]
}
app/data/port_steps/u1_neg0.5.json (1,199 chars)
{"port":1,"amp":-0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0339,"1":0.4526,"2":-0.1618,"3":-0.4859,"4":0.0678,"5":-0.5059,"6":-0.7161,"7":-0.7624,"8":0.1019,"9":-0.5019,"10":0.3128,"11":0.1415,"12":-0.3757,"13":0.4165,"14":-0.0208,"15":0.427,"16":0.6594,"17":-0.2806,"18":-0.1199,"19":-0.4854,"20":-0.1816,"21":-0.498,"22":-0.4118,"23":0.3676,"24":-0.0577,"25":-0.021,"26":-0.3743,"27":-0.5323,"28":0.6281,"29":-0.3018},
"y_short":{"0":-0.1359,"1":0.2864,"2":-0.1545,"3":-0.4839,"4":0.0698,"5":-0.5175,"6":-0.7344,"7":-0.7567,"8":0.0951,"9":-0.5044,"10":0.2194,"11":0.0374,"12":-0.355,"13":0.4178,"14":-0.0265,"15":0.4212,"16":0.6575,"17":-0.2933,"18":-0.1195,"19":-0.4795,"20":-0.1743,"21":-0.496,"22":-0.4122,"23":0.3723,"24":-0.1396,"25":-0.0143,"26":-0.3694,"27":-0.5229,"28":0.6248,"29":-0.312},
"y_long":{"0":-0.1201,"1":0.3519,"2":-0.3809,"3":-0.4854,"4":0.0726,"5":-0.5165,"6":-0.7299,"7":-0.7511,"8":0.0499,"9":-0.5005,"10":0.3712,"11":0.1005,"12":-0.3668,"13":0.4703,"14":-0.0646,"15":0.332,"16":0.4838,"17":-0.2849,"18":-0.125,"19":-0.4859,"20":-0.1931,"21":-0.4289,"22":-0.4072,"23":0.3629,"24":-0.0197,"25":-0.1801,"26":-0.3754,"27":-0.5169,"28":0.6249,"29":-0.31}}
app/data/port_steps/u1_neg1.json (1,203 chars)
{"port":1,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0402,"1":0.4441,"2":-0.1498,"3":-0.4842,"4":0.0617,"5":-0.5159,"6":-0.7317,"7":-0.7651,"8":0.1137,"9":-0.5141,"10":0.3045,"11":0.1519,"12":-0.3617,"13":0.4201,"14":-0.022,"15":0.4418,"16":0.6672,"17":-0.282,"18":-0.1241,"19":-0.4769,"20":-0.1592,"21":-0.4902,"22":-0.4137,"23":0.3833,"24":-0.051,"25":-0.0148,"26":-0.377,"27":-0.5214,"28":0.621,"29":-0.3071},
"y_short":{"0":-0.6248,"1":-0.1616,"2":-0.154,"3":-0.4876,"4":0.0658,"5":-0.5177,"6":-0.7224,"7":-0.7486,"8":0.1013,"9":-0.5191,"10":-0.0581,"11":-0.2999,"12":-0.3589,"13":0.4077,"14":-0.0298,"15":0.4405,"16":0.6685,"17":-0.2813,"18":-0.1113,"19":-0.487,"20":-0.1585,"21":-0.4975,"22":-0.419,"23":0.3667,"24":-0.4166,"25":-0.0165,"26":-0.3691,"27":-0.5132,"28":0.6221,"29":-0.2959},
"y_long":{"0":-0.9052,"1":-0.4266,"2":-0.2625,"3":-0.4802,"4":0.0576,"5":-0.5158,"6":-0.7322,"7":-0.7591,"8":0.0847,"9":-0.5063,"10":-0.2386,"11":-0.4903,"12":-0.373,"13":0.4406,"14":-0.0443,"15":0.4009,"16":0.6035,"17":-0.2768,"18":-0.1153,"19":-0.4867,"20":-0.1656,"21":-0.4792,"22":-0.4086,"23":0.3598,"24":-0.5784,"25":-0.0928,"26":-0.3825,"27":-0.5284,"28":0.614,"29":-0.3167}}
app/data/port_steps/u1_pos0.5.json (1,199 chars)
{"port":1,"amp":0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0288,"1":0.4408,"2":-0.1517,"3":-0.4704,"4":0.0624,"5":-0.5036,"6":-0.7283,"7":-0.7661,"8":0.1261,"9":-0.5172,"10":0.3204,"11":0.1541,"12":-0.3617,"13":0.4099,"14":-0.0348,"15":0.4257,"16":0.6679,"17":-0.2793,"18":-0.1154,"19":-0.4834,"20":-0.1467,"21":-0.507,"22":-0.42,"23":0.3755,"24":-0.051,"25":-0.0227,"26":-0.3694,"27":-0.5312,"28":0.614,"29":-0.3076},
"y_short":{"0":0.1459,"1":0.5444,"2":-0.1584,"3":-0.4815,"4":0.0655,"5":-0.5322,"6":-0.7435,"7":-0.7547,"8":0.1122,"9":-0.5057,"10":0.3651,"11":0.224,"12":-0.348,"13":0.4303,"14":-0.0324,"15":0.4424,"16":0.6774,"17":-0.2802,"18":-0.1205,"19":-0.4798,"20":-0.1465,"21":-0.4898,"22":-0.414,"23":0.3572,"24":-0.0184,"25":-0.0212,"26":-0.3789,"27":-0.5158,"28":0.6368,"29":-0.2962},
"y_long":{"0":-0.5116,"1":-0.2045,"2":-0.1643,"3":-0.4748,"4":0.0661,"5":-0.5065,"6":-0.7305,"7":-0.767,"8":0.0397,"9":-0.5167,"10":-0.2047,"11":-0.2987,"12":-0.3566,"13":0.4157,"14":-0.1292,"15":0.4318,"16":0.6555,"17":-0.2763,"18":-0.1211,"19":-0.4717,"20":-0.121,"21":-0.4192,"22":-0.4057,"23":0.3733,"24":-0.5642,"25":-0.0353,"26":-0.3535,"27":-0.5212,"28":0.6209,"29":-0.292}}
app/data/port_steps/u1_pos1.json (1,198 chars)
{"port":1,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0439,"1":0.4437,"2":-0.1506,"3":-0.4949,"4":0.0747,"5":-0.5161,"6":-0.7312,"7":-0.7451,"8":0.1098,"9":-0.4954,"10":0.3232,"11":0.1469,"12":-0.3673,"13":0.4222,"14":-0.0296,"15":0.4278,"16":0.6703,"17":-0.2768,"18":-0.1088,"19":-0.4915,"20":-0.1533,"21":-0.5061,"22":-0.4083,"23":0.364,"24":-0.0471,"25":-0.0043,"26":-0.383,"27":-0.5313,"28":0.6176,"29":-0.2979},
"y_short":{"0":0.2353,"1":0.5892,"2":-0.1619,"3":-0.4833,"4":0.0655,"5":-0.5153,"6":-0.7339,"7":-0.7573,"8":0.1058,"9":-0.504,"10":0.3932,"11":0.2757,"12":-0.3627,"13":0.4225,"14":-0.0202,"15":0.422,"16":0.6564,"17":-0.2794,"18":-0.1213,"19":-0.483,"20":-0.1673,"21":-0.4891,"22":-0.4075,"23":0.3585,"24":-0.0094,"25":-0.0338,"26":-0.3759,"27":-0.528,"28":0.6252,"29":-0.3013},
"y_long":{"0":-0.8087,"1":-0.396,"2":-0.0657,"3":-0.4809,"4":0.0722,"5":-0.5146,"6":-0.7347,"7":-0.7529,"8":-0.0222,"9":-0.5028,"10":-0.2377,"11":-0.4687,"12":-0.3754,"13":0.3834,"14":-0.0959,"15":0.4615,"16":0.6985,"17":-0.2756,"18":-0.1234,"19":-0.4662,"20":-0.2023,"21":-0.3876,"22":-0.399,"23":0.3617,"24":-0.595,"25":0.0431,"26":-0.353,"27":-0.5326,"28":0.6322,"29":-0.2816}}
app/data/port_steps/u1_pos1_then_neg1.json (878 chars)
{"port":1,"seq":[{"u":[0,0,0,0,0,0],"t":200},{"u":[0,1,0,0,0,0],"t":2000},{"u":[0,-1,0,0,0,0],"t":2000}],
"y_after_pos":{"0":-0.8126,"1":-0.3946,"2":-0.0354,"3":-0.474,"4":0.063,"5":-0.5075,"6":-0.7403,"7":-0.7544,"8":-0.0054,"9":-0.502,"10":-0.2408,"11":-0.4536,"12":-0.3704,"13":0.34,"14":-0.0985,"15":0.4859,"16":0.6982,"17":-0.2869,"18":-0.1389,"19":-0.48,"20":-0.1971,"21":-0.414,"22":-0.4175,"23":0.3606,"24":-0.5918,"25":0.0716,"26":-0.3615,"27":-0.5265,"28":0.6221,"29":-0.2892},
"y_after_neg":{"0":-0.9062,"1":-0.4318,"2":-0.1743,"3":-0.4812,"4":0.0632,"5":-0.516,"6":-0.7307,"7":-0.7494,"8":-0.1242,"9":-0.5048,"10":-0.2252,"11":-0.4879,"12":-0.3782,"13":0.4085,"14":-0.2341,"15":0.4193,"16":0.6641,"17":-0.276,"18":-0.1127,"19":-0.4893,"20":-0.2473,"21":-0.2688,"22":-0.4103,"23":0.3652,"24":-0.6013,"25":-0.0391,"26":-0.3775,"27":-0.5286,"28":0.6326,"29":-0.218}}
app/data/port_steps/u1_pos1_then_neg1_relax.json (2,630 chars)
{
"port": 1,
"warmup": {"t": 200, "u": [0,0,0,0,0,0]},
"pos": {"t": 2000, "u": [0,1,0,0,0,0]},
"neg_stages": [
{"t": 200, "u": [0,-1,0,0,0,0]},
{"t": 300, "u": [0,-1,0,0,0,0]},
{"t": 500, "u": [0,-1,0,0,0,0]},
{"t": 1000, "u": [0,-1,0,0,0,0]}
],
"y_after_pos": {"0": -0.8088, "1": -0.3924, "2": -0.031, "3": -0.4813, "4": 0.0698, "5": -0.5177, "6": -0.7224, "7": -0.7497, "8": 0.035, "9": -0.5024, "10": -0.2321, "11": -0.4743, "12": -0.3682, "13": 0.3371, "14": -0.1071, "15": 0.4979, "16": 0.68, "17": -0.2732, "18": -0.1199, "19": -0.4862, "20": -0.1775, "21": -0.4125, "22": -0.4156, "23": 0.3723, "24": -0.5912, "25": 0.0798, "26": -0.3733, "27": -0.5235, "28": 0.622, "29": -0.3034},
"y_after_neg": [
{"neg_t_total": 200, "tail_mean": {"0": -0.8081, "1": -0.3975, "2": -0.0568, "3": -0.4651, "4": 0.0674, "5": -0.513, "6": -0.7267, "7": -0.7665, "8": -0.0046, "9": -0.5073, "10": -0.2272, "11": -0.457, "12": -0.3667, "13": 0.3547, "14": -0.1237, "15": 0.4852, "16": 0.6717, "17": -0.2779, "18": -0.1271, "19": -0.4668, "20": -0.1784, "21": -0.4001, "22": -0.3934, "23": 0.3636, "24": -0.5995, "25": 0.0546, "26": -0.3623, "27": -0.5233, "28": 0.6128, "29": -0.2973}},
{"neg_t_total": 500, "tail_mean": {"0": -0.8618, "1": -0.408, "2": -0.0913, "3": -0.4882, "4": 0.0585, "5": -0.5172, "6": -0.7274, "7": -0.7635, "8": -0.0115, "9": -0.5228, "10": -0.2323, "11": -0.4685, "12": -0.3656, "13": 0.3766, "14": -0.141, "15": 0.4677, "16": 0.6776, "17": -0.2816, "18": -0.1171, "19": -0.4817, "20": -0.1752, "21": -0.3751, "22": -0.4143, "23": 0.3629, "24": -0.586, "25": 0.0389, "26": -0.3516, "27": -0.5199, "28": 0.6164, "29": -0.2915}},
{"neg_t_total": 1000, "tail_mean": {"0": -0.8805, "1": -0.4179, "2": -0.1121, "3": -0.4745, "4": 0.0672, "5": -0.5084, "6": -0.7347, "7": -0.7523, "8": -0.0416, "9": -0.5199, "10": -0.2317, "11": -0.4822, "12": -0.3609, "13": 0.3843, "14": -0.1699, "15": 0.4506, "16": 0.6658, "17": -0.2844, "18": -0.117, "19": -0.4863, "20": -0.1797, "21": -0.3445, "22": -0.4013, "23": 0.3627, "24": -0.5972, "25": 0.0061, "26": -0.3685, "27": -0.5302, "28": 0.6196, "29": -0.2587}},
{"neg_t_total": 2000, "tail_mean": {"0": -0.9118, "1": -0.4232, "2": -0.2056, "3": -0.478, "4": 0.0641, "5": -0.5139, "6": -0.727, "7": -0.7496, "8": -0.0653, "9": -0.5173, "10": -0.2328, "11": -0.4946, "12": -0.3703, "13": 0.4302, "14": -0.2433, "15": 0.4256, "16": 0.6111, "17": -0.2767, "18": -0.13, "19": -0.4766, "20": -0.1743, "21": -0.2827, "22": -0.3899, "23": 0.3657, "24": -0.6003, "25": -0.0568, "26": -0.3713, "27": -0.541, "28": 0.6251, "29": -0.2336}}
]
}
app/data/port_steps/u2_neg1.json (1,199 chars)
{"port":2,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0352,"1":0.4519,"2":-0.1465,"3":-0.491,"4":0.079,"5":-0.5172,"6":-0.7296,"7":-0.7471,"8":0.1138,"9":-0.5151,"10":0.3203,"11":0.1628,"12":-0.3636,"13":0.4185,"14":-0.0292,"15":0.4275,"16":0.6684,"17":-0.2871,"18":-0.1187,"19":-0.4919,"20":-0.1539,"21":-0.5069,"22":-0.4027,"23":0.3662,"24":-0.0476,"25":-0.0321,"26":-0.3701,"27":-0.5184,"28":0.6139,"29":-0.2917},
"y_short":{"0":0.0386,"1":0.4414,"2":-0.4679,"3":-0.4722,"4":0.0653,"5":-0.5142,"6":-0.7255,"7":-0.7667,"8":0.1244,"9":-0.5126,"10":0.3215,"11":0.1514,"12":-0.3679,"13":-0.1005,"14":-0.0292,"15":0.5657,"16":-0.0026,"17":-0.2842,"18":-0.1225,"19":-0.4871,"20":-0.152,"21":-0.5036,"22":-0.401,"23":0.3569,"24":-0.0632,"25":0.3291,"26":-0.3687,"27":-0.516,"28":0.6193,"29":-0.299},
"y_long":{"0":0.0229,"1":0.4535,"2":-0.5686,"3":-0.4842,"4":0.0769,"5":-0.5143,"6":-0.7292,"7":-0.7534,"8":0.0756,"9":-0.5156,"10":0.3357,"11":0.1275,"12":-0.3522,"13":-0.2669,"14":-0.0632,"15":0.6226,"16":-0.2491,"17":-0.2912,"18":-0.1145,"19":-0.4743,"20":-0.1552,"21":-0.4537,"22":-0.4067,"23":0.3579,"24":-0.0141,"25":0.4584,"26":-0.36,"27":-0.5293,"28":0.6295,"29":-0.3108}}
app/data/port_steps/u2_pos1.json (1,194 chars)
{"port":2,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0327,"1":0.4484,"2":-0.1566,"3":-0.4708,"4":0.0555,"5":-0.5059,"6":-0.7282,"7":-0.7554,"8":0.1246,"9":-0.5044,"10":0.314,"11":0.1481,"12":-0.3767,"13":0.4225,"14":-0.0443,"15":0.4248,"16":0.6716,"17":-0.2964,"18":-0.1317,"19":-0.486,"20":-0.1346,"21":-0.4916,"22":-0.4143,"23":0.3659,"24":-0.0441,"25":-0.0291,"26":-0.3746,"27":-0.5262,"28":0.6281,"29":-0.292},
"y_short":{"0":0.03,"1":0.4471,"2":-0.0328,"3":-0.4864,"4":0.058,"5":-0.5099,"6":-0.7261,"7":-0.7523,"8":0.1211,"9":-0.5098,"10":0.3349,"11":0.1594,"12":-0.3633,"13":0.5073,"14":-0.0398,"15":0.4174,"16":0.8256,"17":-0.2778,"18":-0.1176,"19":-0.4813,"20":-0.1489,"21":-0.4864,"22":-0.416,"23":0.3779,"24":-0.0583,"25":-0.0829,"26":-0.3663,"27":-0.5124,"28":0.639,"29":-0.2985},
"y_long":{"0":0.0334,"1":0.2879,"2":-0.5241,"3":-0.4743,"4":0.0635,"5":-0.5036,"6":-0.7329,"7":-0.7695,"8":0.0915,"9":-0.5122,"10":0.2809,"11":0.2796,"12":-0.3699,"13":-0.2801,"14":-0.0932,"15":0.6233,"16":-0.2441,"17":-0.2892,"18":-0.1077,"19":-0.1277,"20":-0.1341,"21":-0.4501,"22":-0.3937,"23":0.3624,"24":-0.2912,"25":0.464,"26":-0.379,"27":-0.529,"28":0.6341,"29":-0.3059}}
app/data/port_steps/u3_neg1.json (1,195 chars)
{"port":3,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0342,"1":0.446,"2":-0.1571,"3":-0.4754,"4":0.0774,"5":-0.523,"6":-0.7246,"7":-0.7694,"8":0.1317,"9":-0.5109,"10":0.3249,"11":0.1556,"12":-0.3659,"13":0.43,"14":-0.0222,"15":0.4363,"16":0.6728,"17":-0.2725,"18":-0.1181,"19":-0.4924,"20":-0.1419,"21":-0.5006,"22":-0.4104,"23":0.3758,"24":-0.067,"25":-0.0258,"26":-0.3813,"27":-0.5398,"28":0.615,"29":-0.3018},
"y_short":{"0":0.0407,"1":0.4523,"2":-0.169,"3":-0.4841,"4":0.0564,"5":-0.5025,"6":-0.7327,"7":-0.7509,"8":0.1232,"9":-0.5056,"10":0.3177,"11":0.1719,"12":-0.3603,"13":0.431,"14":-0.0245,"15":0.4332,"16":0.654,"17":-0.2857,"18":-0.1119,"19":-0.4922,"20":-0.1735,"21":-0.494,"22":-0.3987,"23":0.3737,"24":-0.0599,"25":-0.0152,"26":-0.3687,"27":-0.5192,"28":0.6315,"29":-0.3099},
"y_long":{"0":0.0587,"1":0.3987,"2":-0.3153,"3":-0.4839,"4":0.0617,"5":-0.5108,"6":-0.7336,"7":-0.7524,"8":0.0776,"9":-0.5122,"10":0.2607,"11":0.1634,"12":-0.3608,"13":0.4856,"14":-0.0756,"15":0.3381,"16":0.5789,"17":-0.2854,"18":-0.1118,"19":-0.4782,"20":-0.1514,"21":-0.4607,"22":-0.3928,"23":0.3691,"24":-0.1876,"25":-0.1459,"26":-0.3745,"27":-0.5124,"28":0.6216,"29":-0.2939}}
app/data/port_steps/u3_pos1.json (1,192 chars)
{"port":3,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0295,"1":0.4453,"2":-0.15,"3":-0.4764,"4":0.0589,"5":-0.5126,"6":-0.7508,"7":-0.7465,"8":0.12,"9":-0.5084,"10":0.3134,"11":0.1535,"12":-0.3596,"13":0.4159,"14":-0.0332,"15":0.4325,"16":0.6598,"17":-0.2812,"18":-0.1352,"19":-0.4782,"20":-0.1546,"21":-0.4869,"22":-0.4049,"23":0.3727,"24":-0.0679,"25":-0.0227,"26":-0.3724,"27":-0.5249,"28":0.6238,"29":-0.298},
"y_short":{"0":0.0487,"1":0.4453,"2":-0.1568,"3":-0.4804,"4":0.07,"5":-0.5131,"6":-0.7412,"7":-0.7588,"8":0.1128,"9":-0.5139,"10":0.3109,"11":0.161,"12":-0.3633,"13":0.4298,"14":-0.0315,"15":0.423,"16":0.6738,"17":-0.2834,"18":-0.1242,"19":-0.4895,"20":-0.1487,"21":-0.5044,"22":-0.4083,"23":0.3686,"24":-0.0646,"25":-0.027,"26":-0.3775,"27":-0.524,"28":0.6245,"29":-0.3044},
"y_long":{"0":0.0621,"1":0.3953,"2":-0.2875,"3":-0.481,"4":0.0609,"5":-0.5188,"6":-0.7236,"7":-0.7517,"8":0.0684,"9":-0.5068,"10":0.2463,"11":0.1499,"12":-0.3681,"13":0.4723,"14":-0.0617,"15":0.3628,"16":0.5889,"17":-0.2918,"18":-0.1212,"19":-0.4948,"20":-0.1603,"21":-0.4477,"22":-0.3977,"23":0.3855,"24":-0.1666,"25":-0.1272,"26":-0.3671,"27":-0.5301,"28":0.6224,"29":-0.3132}}
app/data/port_steps/u4_neg1.json (1,193 chars)
{"port":4,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0319,"1":0.446,"2":-0.1466,"3":-0.4817,"4":0.0725,"5":-0.5086,"6":-0.7339,"7":-0.7688,"8":0.1257,"9":-0.5036,"10":0.3285,"11":0.148,"12":-0.3693,"13":0.4214,"14":-0.0304,"15":0.4256,"16":0.6814,"17":-0.2922,"18":-0.1213,"19":-0.4854,"20":-0.1394,"21":-0.4905,"22":-0.4153,"23":0.3749,"24":-0.0522,"25":-0.0246,"26":-0.3731,"27":-0.5172,"28":0.6193,"29":-0.3051},
"y_short":{"0":0.03,"1":0.4577,"2":-0.1519,"3":-0.4867,"4":0.0675,"5":-0.5148,"6":-0.7417,"7":-0.7644,"8":0.113,"9":-0.5026,"10":0.3225,"11":0.1584,"12":-0.3614,"13":0.434,"14":-0.0322,"15":0.4278,"16":0.6701,"17":-0.2802,"18":-0.1137,"19":-0.4729,"20":-0.1524,"21":-0.4964,"22":-0.406,"23":0.3713,"24":-0.0441,"25":-0.0196,"26":-0.3659,"27":-0.5349,"28":0.6231,"29":-0.3055},
"y_long":{"0":0.0612,"1":0.3995,"2":-0.2894,"3":-0.4815,"4":0.067,"5":-0.5105,"6":-0.7302,"7":-0.757,"8":0.0919,"9":-0.4982,"10":0.262,"11":0.192,"12":-0.3655,"13":0.4548,"14":-0.1074,"15":0.3794,"16":0.5865,"17":-0.2842,"18":-0.1182,"19":-0.4749,"20":-0.1162,"21":-0.4474,"22":-0.408,"23":0.3645,"24":-0.1575,"25":-0.1102,"26":-0.3746,"27":-0.5164,"28":0.6231,"29":-0.2847}}
app/data/port_steps/u4_pos1.json (1,195 chars)
{"port":4,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.029,"1":0.4437,"2":-0.1612,"3":-0.4862,"4":0.0742,"5":-0.5127,"6":-0.7158,"7":-0.759,"8":0.1153,"9":-0.5018,"10":0.3138,"11":0.16,"12":-0.3588,"13":0.4325,"14":-0.0073,"15":0.4109,"16":0.6703,"17":-0.2868,"18":-0.1177,"19":-0.4876,"20":-0.1507,"21":-0.4917,"22":-0.4131,"23":0.3673,"24":-0.0577,"25":-0.0277,"26":-0.3743,"27":-0.5279,"28":0.6187,"29":-0.3018},
"y_short":{"0":0.0269,"1":0.4423,"2":-0.1737,"3":-0.473,"4":0.0638,"5":-0.5122,"6":-0.7258,"7":-0.7542,"8":0.1115,"9":-0.5101,"10":0.3357,"11":0.1559,"12":-0.3562,"13":0.4298,"14":-0.017,"15":0.4195,"16":0.6691,"17":-0.2769,"18":-0.1204,"19":-0.4794,"20":-0.1565,"21":-0.501,"22":-0.4025,"23":0.3467,"24":-0.044,"25":-0.0415,"26":-0.3776,"27":-0.5209,"28":0.6229,"29":-0.3078},
"y_long":{"0":0.0664,"1":0.3865,"2":-0.2967,"3":-0.4726,"4":0.0632,"5":-0.5115,"6":-0.7279,"7":-0.7596,"8":0.0484,"9":-0.5095,"10":0.2523,"11":0.171,"12":-0.3669,"13":0.4756,"14":-0.0452,"15":0.3613,"16":0.5726,"17":-0.2783,"18":-0.1123,"19":-0.4852,"20":-0.1868,"21":-0.4612,"22":-0.3976,"23":0.3695,"24":-0.1664,"25":-0.1307,"26":-0.3662,"27":-0.5238,"28":0.6204,"29":-0.2998}}
app/data/port_steps/u5_neg0.5.json (1,198 chars)
{"port":5,"amp":-0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0179,"1":0.4514,"2":-0.1559,"3":-0.475,"4":0.0562,"5":-0.5223,"6":-0.7464,"7":-0.754,"8":0.1148,"9":-0.5183,"10":0.3161,"11":0.1267,"12":-0.3716,"13":0.4019,"14":-0.0315,"15":0.4365,"16":0.6548,"17":-0.2976,"18":-0.1183,"19":-0.4887,"20":-0.1527,"21":-0.4972,"22":-0.4003,"23":0.3513,"24":-0.0409,"25":-0.0212,"26":-0.3788,"27":-0.5154,"28":0.632,"29":-0.2975},
"y_short":{"0":0.0254,"1":0.4461,"2":-0.15,"3":-0.474,"4":0.0662,"5":-0.5116,"6":-0.7169,"7":-0.7622,"8":0.0741,"9":-0.5124,"10":0.3229,"11":0.1469,"12":-0.3692,"13":0.4211,"14":-0.1222,"15":0.436,"16":0.6503,"17":-0.2895,"18":-0.1178,"19":-0.4834,"20":-0.2157,"21":-0.5421,"22":-0.4057,"23":0.3634,"24":-0.0454,"25":-0.0116,"26":-0.3753,"27":-0.5212,"28":0.6208,"29":-0.1886},
"y_long":{"0":0.0579,"1":0.4111,"2":-0.3032,"3":-0.4753,"4":0.0577,"5":-0.5049,"6":-0.7214,"7":-0.751,"8":0.2296,"9":-0.5069,"10":0.2489,"11":0.1443,"12":-0.3699,"13":0.4696,"14":-0.1046,"15":0.3578,"16":0.5529,"17":-0.2842,"18":-0.1088,"19":-0.4964,"20":-0.1525,"21":-0.5809,"22":-0.4124,"23":0.3648,"24":-0.1324,"25":-0.1474,"26":-0.367,"27":-0.5232,"28":0.6243,"29":-0.1606}}
app/data/port_steps/u5_neg1.json (1,197 chars)
{"port":5,"amp":-1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0301,"1":0.4469,"2":-0.1497,"3":-0.4872,"4":0.0707,"5":-0.5266,"6":-0.731,"7":-0.7609,"8":0.1124,"9":-0.5151,"10":0.3189,"11":0.1445,"12":-0.3523,"13":0.4118,"14":-0.0528,"15":0.4506,"16":0.6542,"17":-0.2757,"18":-0.1046,"19":-0.4823,"20":-0.164,"21":-0.4921,"22":-0.3929,"23":0.3803,"24":-0.0536,"25":-0.0223,"26":-0.3676,"27":-0.5243,"28":0.6166,"29":-0.2923},
"y_short":{"0":0.0337,"1":0.4306,"2":-0.1627,"3":-0.4778,"4":0.0645,"5":-0.5233,"6":-0.7231,"7":-0.753,"8":-0.025,"9":-0.5112,"10":0.3239,"11":0.1332,"12":-0.3568,"13":0.4163,"14":-0.264,"15":0.4424,"16":0.6479,"17":-0.2743,"18":-0.1265,"19":-0.4721,"20":-0.3306,"21":-0.5723,"22":-0.4062,"23":0.3565,"24":-0.0464,"25":-0.0205,"26":-0.384,"27":-0.524,"28":0.6188,"29":0.0105},
"y_long":{"0":0.0491,"1":0.4233,"2":-0.2911,"3":-0.4812,"4":0.0747,"5":-0.5039,"6":-0.7278,"7":-0.756,"8":-0.4338,"9":-0.5124,"10":0.2747,"11":0.1758,"12":-0.3674,"13":0.4713,"14":-0.7854,"15":0.3602,"16":0.5674,"17":-0.2749,"18":-0.1269,"19":-0.4769,"20":-0.7321,"21":-0.6564,"22":-0.4085,"23":0.3641,"24":-0.1111,"25":-0.1436,"26":-0.3754,"27":-0.5336,"28":0.6196,"29":0.6463}}
app/data/port_steps/u5_pos0.5.json (1,195 chars)
{"port":5,"amp":0.5,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0371,"1":0.4452,"2":-0.1634,"3":-0.4755,"4":0.0685,"5":-0.5168,"6":-0.7152,"7":-0.7552,"8":0.1221,"9":-0.504,"10":0.3176,"11":0.1636,"12":-0.3618,"13":0.439,"14":-0.0336,"15":0.4301,"16":0.6798,"17":-0.2722,"18":-0.1125,"19":-0.4814,"20":-0.1446,"21":-0.4842,"22":-0.4056,"23":0.3674,"24":-0.0465,"25":-0.0278,"26":-0.3762,"27":-0.5181,"28":0.6169,"29":-0.2918},
"y_short":{"0":0.0426,"1":0.4395,"2":-0.1811,"3":-0.4818,"4":0.0678,"5":-0.5138,"6":-0.7417,"7":-0.7608,"8":0.1294,"9":-0.5103,"10":0.3133,"11":0.1524,"12":-0.3672,"13":0.4337,"14":0.0155,"15":0.4096,"16":0.6609,"17":-0.2933,"18":-0.127,"19":-0.4864,"20":-0.1176,"21":-0.4475,"22":-0.4054,"23":0.363,"24":-0.0562,"25":-0.0459,"26":-0.369,"27":-0.5211,"28":0.6228,"29":-0.388},
"y_long":{"0":0.0522,"1":0.3619,"2":-0.28,"3":-0.4745,"4":0.0573,"5":-0.5237,"6":-0.7295,"7":-0.7478,"8":-0.32,"9":-0.5154,"10":0.2261,"11":0.1923,"12":-0.3594,"13":0.4748,"14":-0.3294,"15":0.3756,"16":0.5694,"17":-0.2841,"18":-0.1192,"19":-0.4906,"20":-0.4844,"21":-0.1237,"22":-0.4161,"23":0.3643,"24":-0.2072,"25":-0.1296,"26":-0.3724,"27":-0.526,"28":0.6252,"29":-0.0209}}
app/data/port_steps/u5_pos1.json (1,193 chars)
{"port":5,"amp":1,"warmup_t":200,"short_t":40,"long_t":2000,
"y0":{"0":0.0316,"1":0.4499,"2":-0.1445,"3":-0.4925,"4":0.0603,"5":-0.5122,"6":-0.7226,"7":-0.7508,"8":0.1197,"9":-0.5178,"10":0.3287,"11":0.1374,"12":-0.3627,"13":0.4167,"14":-0.0339,"15":0.4393,"16":0.6704,"17":-0.2777,"18":-0.1275,"19":-0.4935,"20":-0.1468,"21":-0.4907,"22":-0.4081,"23":0.3718,"24":-0.0437,"25":-0.0077,"26":-0.3723,"27":-0.5281,"28":0.6209,"29":-0.3093},
"y_short":{"0":0.0265,"1":0.4477,"2":-0.1586,"3":-0.4795,"4":0.0687,"5":-0.5106,"6":-0.7411,"7":-0.7662,"8":0.1257,"9":-0.5,"10":0.3022,"11":0.1324,"12":-0.3722,"13":0.423,"14":0.0672,"15":0.4313,"16":0.6619,"17":-0.2782,"18":-0.12,"19":-0.4667,"20":-0.0958,"21":-0.4243,"22":-0.4004,"23":0.3632,"24":-0.0475,"25":-0.002,"26":-0.3823,"27":-0.5354,"28":0.6207,"29":-0.4431},
"y_long":{"0":0.0576,"1":0.3216,"2":-0.3088,"3":-0.4836,"4":0.079,"5":-0.51,"6":-0.7482,"7":-0.7682,"8":-0.4079,"9":-0.5038,"10":0.2385,"11":0.2056,"12":-0.3601,"13":0.4733,"14":-0.5438,"15":0.3586,"16":0.5818,"17":-0.2899,"18":-0.1275,"19":-0.4852,"20":-0.6281,"21":-0.0156,"22":-0.4125,"23":0.3471,"24":-0.2636,"25":-0.1474,"26":-0.3767,"27":-0.5107,"28":0.6173,"29":0.2267}}
app/fit_model.py (7,095 chars)
from __future__ import annotations
import json
from pathlib import Path
from typing import Any, Dict, List, Tuple
import numpy as np
from model import Params, simulate_tail_mean
DATA_DIR = Path("data")
PORT_DIR = DATA_DIR / "port_steps"
def _load_json(path: Path) -> Dict[str, Any]:
return json.loads(path.read_text())
def _dict_to_vec(d: Dict[str, float]) -> np.ndarray:
v = np.zeros(30, dtype=float)
for k, val in d.items():
v[int(k)] = float(val)
return v
def _mean_y0_from_port_steps() -> np.ndarray:
y0s = []
for p in sorted(PORT_DIR.glob("u*.json")):
raw = _load_json(p)
if "y0" in raw:
y0s.append(_dict_to_vec(raw["y0"]))
if not y0s:
raise RuntimeError("no y0 entries found under data/port_steps")
return np.mean(np.stack(y0s, axis=0), axis=0)
def _k(beta: float, T: int) -> float:
return 1.0 - (1.0 - beta) ** T
def _fit_ABC_for_beta(beta: float) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
"""
Fit per-sensor bilinear model:
delta = A*u + B*m + C*(u*m)
m_T = k(T)*u (for constant u from m0=0)
Uses per-port step datasets in data/port_steps/*.json.
Returns (b, A, B, C).
"""
b = _mean_y0_from_port_steps()
A = np.zeros((30, 6), dtype=float)
B = np.zeros((30, 6), dtype=float)
C = np.zeros((30, 6), dtype=float)
# For each port, build regression across all amplitudes/signs and both durations
for port in range(6):
X_rows: List[List[float]] = []
Y_rows: List[np.ndarray] = []
for p in sorted(PORT_DIR.glob(f"u{port}_*.json")):
raw = _load_json(p)
if "amp" not in raw:
continue
amp = float(raw["amp"])
y0 = _dict_to_vec(raw["y0"])
# observation 1: after short segment (40 ticks)
T_short = int(raw.get("short_t", 40))
k_short = _k(beta, T_short)
ys = _dict_to_vec(raw["y_short"])
d_short = ys - y0
m_short = k_short * amp
X_rows.append([amp, m_short, amp * m_short])
Y_rows.append(d_short)
# observation 2: after long segment (short + long ticks total)
T_long_total = int(raw.get("short_t", 40)) + int(raw.get("long_t", 2000))
k_long = _k(beta, T_long_total)
yl = _dict_to_vec(raw["y_long"])
d_long = yl - y0
m_long = k_long * amp
X_rows.append([amp, m_long, amp * m_long])
Y_rows.append(d_long)
# Add sequence constraints (absolute y, referenced to mean baseline b)
seq_path = PORT_DIR / f"u{port}_pos1_then_neg1.json"
if seq_path.exists():
raw = _load_json(seq_path)
seq = raw["seq"]
if len(seq) >= 3:
T_pos = int(seq[1]["t"])
T_neg = int(seq[2]["t"])
a_pow_pos = (1.0 - beta) ** T_pos
a_pow_neg = (1.0 - beta) ** T_neg
m_pos_end = 1.0 - a_pow_pos # starting from 0, driven by +1
m_neg_end = -1.0 + (m_pos_end + 1.0) * a_pow_neg
y_obs_pos = _dict_to_vec(raw["y_after_pos"]) - b
y_obs_neg = _dict_to_vec(raw["y_after_neg"]) - b
# pos observation
X_rows.append([1.0, m_pos_end, 1.0 * m_pos_end])
Y_rows.append(y_obs_pos)
# neg observation (note u=-1)
X_rows.append([-1.0, m_neg_end, (-1.0) * m_neg_end])
Y_rows.append(y_obs_neg)
# Add relaxation traces (absolute y, referenced to mean baseline b)
neg_relax = PORT_DIR / f"u{port}_neg1_relax.json"
if neg_relax.exists():
raw = _load_json(neg_relax)
for item in raw.get("y_after_neg", []):
t_total = int(item["neg_t_total"])
m_end = -_k(beta, t_total) # starts from 0, driven by -1
y_obs = _dict_to_vec(item["tail_mean"]) - b
X_rows.append([-1.0, m_end, (-1.0) * m_end])
Y_rows.append(y_obs)
posneg_relax = PORT_DIR / f"u{port}_pos1_then_neg1_relax.json"
if posneg_relax.exists():
raw = _load_json(posneg_relax)
T_pos = int(raw["pos"]["t"])
a_pow_pos = (1.0 - beta) ** T_pos
m_pos_end = 1.0 - a_pow_pos
for item in raw.get("y_after_neg", []):
t_total = int(item["neg_t_total"])
a_pow = (1.0 - beta) ** t_total
m_end = -1.0 + (m_pos_end + 1.0) * a_pow
y_obs = _dict_to_vec(item["tail_mean"]) - b
X_rows.append([-1.0, m_end, (-1.0) * m_end])
Y_rows.append(y_obs)
if len(X_rows) < 3:
raise RuntimeError(f"not enough observations to fit port {port}: {len(X_rows)}")
X = np.asarray(X_rows, dtype=float) # (n,3)
Y = np.stack(Y_rows, axis=0) # (n,30)
# Solve X * Theta ~= Y for Theta (3,30)
Theta, *_ = np.linalg.lstsq(X, Y, rcond=None)
A[:, port] = Theta[0, :]
B[:, port] = Theta[1, :]
C[:, port] = Theta[2, :]
return b, A, B, C
def _score_beta(beta: float, params: Params) -> float:
mse = 0.0
n = 0
# sequence validation: pos then neg
for path in sorted(PORT_DIR.glob("u*_pos1_then_neg1.json")):
raw = _load_json(path)
segments = [{"t": int(s["t"]), "u": s["u"]} for s in raw["seq"]]
y_pred_pos = simulate_tail_mean(params, segments[:2], tail=20)
y_pred_neg = simulate_tail_mean(params, segments, tail=20)
y_obs_pos = _dict_to_vec(raw["y_after_pos"])
y_obs_neg = _dict_to_vec(raw["y_after_neg"])
mse += float(np.mean((y_pred_pos - y_obs_pos) ** 2))
mse += float(np.mean((y_pred_neg - y_obs_neg) ** 2))
n += 2
# long-hold validation: subset sensors from time-series run
tail_path = DATA_DIR / "long_u0_1_4000_tail.json"
if tail_path.exists():
raw = _load_json(tail_path)
y_pred = simulate_tail_mean(params, raw["protocol"], tail=20)
for k, obs in raw["tail_mean"].items():
idx = int(k)
mse += float((y_pred[idx] - float(obs)) ** 2)
n += 1
if n == 0:
return float("inf")
return mse / n
def main() -> None:
betas = np.logspace(-5.0, -2.2, 55) # ~[1e-5, 6e-3]
best = None
for beta in betas:
try:
b, A, B, C = _fit_ABC_for_beta(float(beta))
params = Params(beta=float(beta), b=b, A=A, B=B, C=C)
score = _score_beta(float(beta), params)
except Exception:
continue
if best is None or score < best[0]:
best = (score, float(beta), params)
if best is None:
raise SystemExit("failed to fit any beta")
score, beta, params = best
out_path = Path("model_params.json")
params.to_json(out_path)
print(json.dumps({"beta": beta, "score": score, "out": str(out_path)}, indent=2))
if __name__ == "__main__":
main()
app/model.py (2,823 chars)
from __future__ import annotations
import json
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Dict, List
import numpy as np
@dataclass(frozen=True)
class Params:
beta: float
b: np.ndarray # (30,)
A: np.ndarray # (30,6) coefficient on u
B: np.ndarray # (30,6) coefficient on state m
C: np.ndarray # (30,6) coefficient on u*m (bilinear)
@staticmethod
def from_json(path: str | Path) -> "Params":
raw = json.loads(Path(path).read_text())
return Params(
beta=float(raw["beta"]),
b=np.asarray(raw["b"], dtype=float),
A=np.asarray(raw["A"], dtype=float),
B=np.asarray(raw["B"], dtype=float),
C=np.asarray(raw["C"], dtype=float),
)
def to_json(self, path: str | Path) -> None:
raw = {
"beta": float(self.beta),
"b": self.b.tolist(),
"A": self.A.tolist(),
"B": self.B.tolist(),
"C": self.C.tolist(),
}
Path(path).write_text(json.dumps(raw, indent=2, sort_keys=True) + "\n")
def simulate_tail_mean(params: Params, segments: List[Dict[str, Any]], tail: int = 20) -> np.ndarray:
"""
Simulate and return mean y over the final `tail` ticks.
Supports hold segments (u) and linear ramps (u_start/u_end).
"""
beta = float(params.beta)
a = 1.0 - beta
m = np.zeros(6, dtype=float)
y_tail: List[np.ndarray] = []
def tick(u: np.ndarray) -> np.ndarray:
nonlocal m
u = np.asarray(u, dtype=float)
m = a * m + beta * u
um = u * m
y = params.b + params.A @ u + params.B @ m + params.C @ um
return np.clip(y, -1.0, 1.0)
total_ticks = sum(int(seg["t"]) for seg in segments)
record_from = max(0, total_ticks - int(tail))
t_now = 0
for seg in segments:
T = int(seg["t"])
if "u" in seg:
u = np.asarray(seg["u"], dtype=float)
for _ in range(T):
y = tick(u)
if t_now >= record_from:
y_tail.append(y)
t_now += 1
else:
u0 = np.asarray(seg["u_start"], dtype=float)
u1 = np.asarray(seg["u_end"], dtype=float)
if T <= 1:
y = tick(u1)
if t_now >= record_from:
y_tail.append(y)
t_now += 1
else:
for k in range(T):
w = k / (T - 1)
u = (1 - w) * u0 + w * u1
y = tick(u)
if t_now >= record_from:
y_tail.append(y)
t_now += 1
if not y_tail:
return np.zeros(30, dtype=float)
return np.mean(np.stack(y_tail, axis=0), axis=0)
app/model_params.json (17,219 chars)
{
"A": [
[
-0.01759915026831874,
0.5585571755590073,
-0.005801539075854963,
0.007012674332404867,
-0.0012956949910783249,
-0.004369802767429676
],
[
0.014653214390654071,
0.5294971920036099,
0.029277415900207042,
-0.0036686146949255418,
-0.0068957431299503415,
0.02170620416868188
],
[
0.0023273722906224908,
-0.05957517305354836,
0.27886969439942116,
0.00030266965532258454,
-0.0056888647434501435,
-0.0057765752484114875
],
[
-0.00322818876418285,
-0.0010896109526679285,
-0.020671837263251534,
0.0024652477099834378,
0.00979148625990076,
-0.000434891755940448
],
[
-0.0035054136926454637,
-0.005763029115962821,
0.008978763788623837,
0.01812445877970216,
-0.0026855940362520785,
0.0038037229389851035
],
[
-0.005086784246685413,
-0.003374627284694503,
-0.004421981679867628,
-0.010874555057446294,
0.0038686146949255683,
0.0009032129405515923
],
[
-0.008677125712979104,
-0.005225809033704368,
-0.0005534151238141028,
0.006184896706632656,
0.0008592110697187337,
-0.022445723874401555
],
[
0.002025598609739073,
-0.006349476376047876,
0.015743818943119218,
-0.016638912882322086,
0.002043963359735248,
-0.009018970648968566
],
[
0.32736010971469437,
0.01670686001725178,
-0.009815945039602902,
0.00047712843502480687,
0.010500504774131317,
0.11619958409043067
],
[
-0.002128647475892746,
0.0006511690021475064,
-0.004036435782487661,
-0.007373617033466652,
-0.004102573377578576,
0.004030456908869299
],
[
0.01692074938153161,
0.32332662086579506,
0.019674867276089414,
0.003444853244842819,
0.017248965698276334,
-0.012388273319349113
],
[
-0.016403827964019107,
0.39162509359619363,
-0.00940899376076966,
-0.004025444942553776,
-0.004584896706632629,
-0.009735593762642084
],
[
0.0027338760067843935,
-0.0006311920659444406,
0.012062529915788772,
-0.004030543558838954,
-0.0016992063926365194,
-0.006665925784054066
],
[
0.005376788698451282,
0.03560106541134661,
0.39136103487465596,
0.008193121613499766,
-0.011251490936982914,
-0.0032119192361390095
],
[
0.4045237057433765,
0.011177233198226425,
0.005044756967098743,
-0.0010108464233177464,
-0.010720802961527926,
0.18409484224901843
],
[
0.003850270405602879,
-0.02287604066440286,
-0.0942648859844182,
-0.00822768134802818,
0.004611784447297271,
-0.007561827635477151
],
[
0.010270633902169098,
-0.02055820154122602,
0.5310898935729736,
0.01781178444729718,
0.006908369323483164,
-0.004146079828444522
],
[
-0.00035727815726704747,
0.0007649722512289155,
0.00848386240490899,
0.0067533188460700685,
-0.0014245550574462206,
-0.005545483453651404
],
[
-0.0036567203708330167,
-0.007466646466684141,
0.008676286688789305,
0.0019822270513099732,
-0.0069651514322394,
0.009647407366872598
],
[
-0.009978522516930636,
-0.0003882349578657888,
-0.04914552445295134,
-0.002969648996649142,
-0.0016025733775786022,
0.005651803702846117
],
[
0.29665043896949406,
-0.004940742278239799,
-0.010693073474627723,
0.02360480978305297,
0.013179965892374612,
0.14489265811227825
],
[
-0.07143391496634201,
0.009696962068960306,
0.0029092110697187326,
-0.015420995517016017,
-0.00037465133519025325,
-0.0027284812998461774
],
[
-0.0026119851878957847,
0.0010011120115635769,
-0.0057336698494208594,
-0.008227080296152786,
-0.0003440114986072701,
0.010879922977804778
],
[
-0.005466890825007119,
-0.00039778049496179657,
0.013026984018408752,
-0.004097282205805297,
-0.012764165269387801,
0.005517133112107034
],
[
0.03795802778535495,
0.3048810240819364,
0.04132481776916751,
-0.00560233268321848,
0.004096536737313831,
0.01569643001096538
],
[
0.01524130003214756,
-0.05327662671630784,
-0.26765930461136284,
-0.01184381894311922,
-0.009601683492471067,
-0.00441217891243795
],
[
-0.004552931426901615,
-0.009819838014879102,
0.006532876242057404,
-0.01118376612716491,
-0.008145598713334246,
0.004319942233353592
],
[
0.0029642598986829543,
-0.003092047873525494,
0.006175396803681793,
-0.007991630676516766,
0.01543287624205743,
-0.006265887272956408
],
[
-0.0034568939720908583,
0.010287369605964726,
0.004925300525937721,
-0.009023665172338607,
0.0005601490936982794,
0.0030074266224214352
],
[
-0.5764659644573208,
0.005854094745511077,
-0.00023386240490901958,
0.004422679009487058,
-0.0009560366402647294,
-0.23911867136713197
]
],
"B": [
[
0.01992396186240407,
-0.5536136216497493,
0.01230156942987694,
-0.002962681642797598,
0.005345708181569544,
0.0021898081707634283
],
[
-0.025876542416505024,
-0.561569026824845,
-0.11032768813287534,
0.002318620416102477,
0.0015457469440683018,
-0.07218638228798993
],
[
0.010865969539922998,
0.126171763680785,
-0.25157031514711675,
0.010047355136444112,
0.00933888778707941,
0.0027565820502551655
],
[
0.0024419987210750863,
0.004792007870677498,
0.01552187556335258,
-0.000515248981356079,
-0.0030914938881366665,
0.0018548963328819928
],
[
0.0012851252041904309,
0.00621482664599434,
-0.003928773482840281,
-0.009274481664409834,
-6.440612266950333e-05,
-0.0004637240832204878
],
[
0.004379357730670149,
0.0052931039760116495,
0.004121991850848791,
0.0016745591894073632,
-0.002318620416102491,
-0.01396324739475035
],
[
0.0071240620446009414,
0.002829785309965213,
-0.00199658980275496,
0.011915132693859836,
-0.008759232683053772,
0.0030657314390688407
],
[
-0.002340621512601431,
0.002693206212103775,
-0.01964386741420145,
0.005538926549578057,
-0.008243983701697658,
0.0009789730645765945
],
[
-0.34759024417536477,
-0.008405585946303445,
0.012365975552546465,
0.0007728734720341808,
-0.027050571521195332,
-0.22014012728439472
],
[
0.0007979364018278338,
0.0009707908216844727,
0.00038643673601710754,
0.008823638805723205,
-0.0024474326614415025,
-0.004070466952713216
],
[
-0.017552714738166532,
-0.37623916643558475,
-0.0439249756606077,
-0.004894865322882969,
-0.014749002091318379,
-0.010871753506613761
],
[
0.03316181214424887,
-0.4129993890844692,
0.09280922276676792,
-0.0016745591894073255,
-0.011915132693859866,
0.026715659683313905
],
[
6.798127589055405e-05,
0.0005370190021276203,
-0.014362565355301341,
-0.00276946327478903,
-0.004250804096187837,
0.013885960047546969
],
[
-0.005953268593449398,
-0.05966898923125632,
-0.39996202177767404,
-0.007793140843011068,
0.016101530667378183,
-0.004328091443391252
],
[
-0.46371983929868976,
0.01807253176445551,
-0.012494787797885458,
0.013460879637928184,
0.030270877654671013,
-0.13955518660030022
],
[
-0.0038198940526970038,
0.0496165537529983,
0.0959651227775739,
0.02247773681165998,
-0.00631180002161221,
0.016281867810852817
],
[
-0.000532770778203677,
0.05506208060696076,
-0.5301912018154287,
-0.006311800021612152,
-0.008308389824367112,
0.001726084087542917
],
[
-0.0028497121287299134,
-0.0025374148215685103,
-0.002833869397458569,
-0.005603332672247634,
0.0016745591894073268,
-0.004714528179408332
],
[
0.007581765696006387,
-0.0010832198265759935,
0.0012237163307207382,
0.001867777557415867,
0.008115171456358608,
-0.003967417156441986
],
[
0.009339321715691426,
0.008371152568404268,
0.21949606605769945,
-0.01243038167521599,
-0.002447432661441502,
-0.0047918155266117625
],
[
-0.17929350781972797,
0.0037249725862886635,
0.011593102080512308,
-0.02170486333962578,
-0.04283007157522599,
-0.17817309775294005
],
[
0.3411126736652393,
-0.029683513019934105,
-0.008759232683053774,
0.015071032704665964,
-0.0059253632855951754,
0.3473293383321486
],
[
0.0093735296770436,
-0.002352222579916898,
0.018033714347463554,
0.003027087765467085,
0.004444022464196351,
-0.006079937980002036
],
[
0.008027773145445732,
0.0017094799559051127,
-0.010627010240469612,
0.013847316373945252,
0.01906421231017579,
-0.012237163307207411
],
[
-0.0598827902448443,
-0.35112289022997883,
-0.181625265928026,
0.016552373526064805,
-0.005796551040256106,
-0.0944966631807091
],
[
-0.006655213954979505,
0.09791302891370987,
0.26895996826788515,
0.019643867414201453,
0.0009016857173732144,
0.001932183680085386
],
[
0.0027619666676664935,
0.0191700826515937,
-0.013782910251275753,
0.010433791872461065,
0.01294563065657203,
-0.004559953485001513
],
[
-0.0029299287167648385,
0.0050726276661038835,
-0.0021254020480939687,
-0.008308389824367166,
-0.01378291025127579,
0.016925929037547888
],
[
0.008162111633152754,
-0.005864500772500184,
-0.009725324523096426,
0.005023677568221872,
-0.0016101530667378566,
-0.0024474326614415333
],
[
0.5825788540986697,
-0.0157458123171075,
0.0028338693974585766,
-0.015972718422039157,
-0.008243983701697629,
0.10487893015503463
]
],
"C": [
[
0.02133994609291573,
-0.9248281072209806,
-0.005449107980519382,
0.029927036839876544,
0.03133503360809461,
0.02651646967666432
],
[
-0.08462401693109592,
-0.9011464526085708,
-0.07692147909880162,
-0.045661108426468144,
-0.0482826120469799,
-0.08405519072675274
],
[
-0.11816876406977593,
0.038556739084393214,
-0.3970362438510228,
-0.14279753250705468,
-0.13441617836783798,
-0.16958496629335548
],
[
-0.0009833028048347216,
0.005274612115282794,
0.0019122153870971448,
-0.007590592873615017,
0.007444627814530129,
0.008868758162905405
],
[
-0.0093649090987754,
-0.0037923179493085605,
0.0016165512576528,
-0.007578074987545051,
-0.009497171652889616,
0.009540197780897758
],
[
0.004179078465376072,
0.0014707083269749044,
0.0023696165014015394,
0.004987243746995715,
-0.0009404247450502685,
0.013170337589048509
],
[
-0.0017490396910876313,
-0.0035437161373088606,
-0.001387210569832797,
0.008826201776540359,
-0.005895751441658778,
-0.009827502735407011
],
[
0.0013178307772045673,
0.0008129393872313593,
-0.011471425316945706,
0.006279254319057476,
0.006313073965992834,
-0.005534525220830969
],
[
-0.5734231357349446,
-0.14441698535293263,
-0.03319527485436388,
-0.05200419684630029,
-0.04970851417271522,
-0.5319225800066899
],
[
-0.0011554175523527238,
-0.0027665232685205967,
-0.004261152462845724,
0.00012155162215737713,
-0.0018727235414284097,
0.00964965819143421
],
[
-0.06477240431583803,
-0.59043598599489,
-0.006074505022718767,
-0.06355529937161733,
-0.05925728676759561,
-0.08010733815464065
],
[
0.04716597589731595,
-0.6527002209637865,
0.0457976672755452,
0.004534856905301525,
0.02686079235477339,
0.04837178010672716
],
[
0.0013259729481681643,
-0.005798212142507712,
0.009635668689425428,
-0.0014166382793704684,
-0.0009292227112267449,
-0.006621314601830733
],
[
0.027615033493993815,
-0.03519833058762046,
-0.7071811082909334,
0.054918910846317504,
0.037482049833651214,
0.06505955453864276
],
[
-0.8013408407299742,
-0.10924718770525785,
-0.03899586188916232,
-0.03906287884782063,
-0.05593769694749281,
-0.6102596860596943
],
[
-0.044848754916562844,
0.022000232133910072,
0.2013549901318838,
-0.08129228763294719,
-0.044467551891882666,
-0.09375565692770049
],
[
-0.0943805897617843,
-8.389354756631413e-05,
-0.9279944576950433,
-0.07898536733462777,
-0.09304323195472501,
-0.10446509405157636
],
[
-0.003589870339446861,
0.0006337026687283299,
0.003766090917599177,
-0.01283041725675494,
0.010189478881015056,
-0.005176618838829476
],
[
0.0032808344720164574,
-0.008383739893117057,
0.014525258688711191,
0.011498363685633659,
0.0045694056601815825,
-0.011474777576559722
],
[
0.0010290515874276597,
0.00916785096517789,
0.1800071225686749,
-0.0023250747922119747,
0.008347427719549043,
0.007962917585154371
],
[
-0.434522672170614,
-0.03895867740077628,
-0.0017016515283821163,
-0.009975181011025474,
-0.00814506099132778,
-0.5208467183325648
],
[
0.2861591878624024,
0.12927804199151816,
0.045999376077643296,
0.03650472935651416,
0.03342776280915674,
0.16871478018537803
],
[
0.0034043999924739674,
0.003825462795028374,
0.007904553860594939,
0.012693236072465468,
0.012976382315839889,
-0.01218717646899349
],
[
0.0009245577557497127,
-0.007541304453012784,
-0.005331325960547287,
0.002244330867969602,
-0.006482172200669666,
-0.020219737453592918
],
[
-0.15769984974295656,
-0.5817724422514058,
-0.10488557108117794,
-0.1033181314246662,
-0.09958018795526909,
-0.1525936537923358
],
[
-0.08747054503174385,
0.027840933687035187,
0.5011094315875368,
-0.10627856062247636,
-0.09074443760507785,
-0.14197844817026886
],
[
0.0012045103025149165,
0.014782000492982388,
0.0037473496794049725,
0.006560569147705341,
0.0035581587633768553,
-0.006098069000428476
],
[
0.004096286484714946,
-0.0006846774217130881,
-0.004798195194610688,
0.012861089636717447,
0.0011936277164069664,
0.0009488582719300423
],
[
0.003098436279700371,
0.004236367542907621,
0.012021537088171488,
0.0043080767401527205,
0.003471049123367216,
-0.0001340109474009546
],
[
0.9516755757445071,
0.026614727765312447,
-0.01718369363222046,
-0.005020476649629451,
0.00998472958467634,
0.7238178730042208
]
],
"b": [
0.03272105263157895,
0.4479263157894737,
-0.15377894736842107,
-0.4795894736842105,
0.06766315789473683,
-0.5144736842105263,
-0.7300947368421052,
-0.7577684210526315,
0.11754210526315789,
-0.5083157894736843,
0.31744210526315786,
0.1490157894736842,
-0.36347894736842096,
0.4207894736842106,
-0.031199999999999995,
0.43061052631578944,
0.6662894736842105,
-0.28174736842105264,
-0.11910526315789471,
-0.48598421052631574,
-0.15203684210526316,
-0.49541578947368425,
-0.4079052631578947,
0.3681736842105264,
-0.0518578947368421,
-0.023057894736842104,
-0.37551052631578946,
-0.5266684210526316,
0.6219684210526315,
-0.30024736842105265
],
"beta": 0.00630957344480193
}
app/predict_contracts.py (4,545 chars)
from __future__ import annotations
import json
from pathlib import Path
from typing import Any, Dict, List, Tuple
import numpy as np
from model import Params, simulate_tail_mean
DATA_DIR = Path("data")
PORT_DIR = DATA_DIR / "port_steps"
def _load_json(path: Path) -> Dict[str, Any]:
return json.loads(path.read_text())
def _dict_to_vec(d: Dict[str, float]) -> np.ndarray:
v = np.zeros(30, dtype=float)
for k, val in d.items():
v[int(k)] = float(val)
return v
def _build_step_protocol(port: int, amp: float, total_t: int) -> List[Dict[str, Any]]:
u = [0.0] * 6
u[port] = float(amp)
return [{"t": 200, "u": [0.0] * 6}, {"t": int(total_t), "u": u}]
def _collect_validation_cases() -> List[Tuple[List[Dict[str, Any]], np.ndarray]]:
cases: List[Tuple[List[Dict[str, Any]], np.ndarray]] = []
# step cases
for p in sorted(PORT_DIR.glob("u*_*.json")):
raw = _load_json(p)
if "amp" not in raw or "y0" not in raw:
continue
port = int(raw["port"])
amp = float(raw["amp"])
y_short = _dict_to_vec(raw["y_short"])
T_short = int(raw.get("short_t", 40))
cases.append((_build_step_protocol(port, amp, T_short), y_short))
y_long = _dict_to_vec(raw["y_long"])
T_long = int(raw.get("short_t", 40)) + int(raw.get("long_t", 2000))
cases.append((_build_step_protocol(port, amp, T_long), y_long))
# sequence + relax cases
for p in sorted(PORT_DIR.glob("u*_pos1_then_neg1.json")):
raw = _load_json(p)
segs = [{"t": int(s["t"]), "u": s["u"]} for s in raw["seq"]]
cases.append((segs[:2], _dict_to_vec(raw["y_after_pos"])))
cases.append((segs, _dict_to_vec(raw["y_after_neg"])))
for p in sorted(PORT_DIR.glob("u*_pos1_then_neg1_relax.json")):
raw = _load_json(p)
warm = {"t": int(raw["warmup"]["t"]), "u": raw["warmup"]["u"]}
pos = {"t": int(raw["pos"]["t"]), "u": raw["pos"]["u"]}
base = [warm, pos]
cases.append((base, _dict_to_vec(raw["y_after_pos"])))
for item in raw.get("y_after_neg", []):
t_total = int(item["neg_t_total"])
segs = base + [{"t": t_total, "u": raw["neg_stages"][0]["u"]}]
cases.append((segs, _dict_to_vec(item["tail_mean"])))
for p in sorted(PORT_DIR.glob("u*_neg1_relax.json")):
raw = _load_json(p)
warm = {"t": int(raw["warmup"]["t"]), "u": raw["warmup"]["u"]}
base = [warm]
for item in raw.get("y_after_neg", []):
t_total = int(item["neg_t_total"])
segs = base + [{"t": t_total, "u": raw["neg_stages"][0]["u"]}]
cases.append((segs, _dict_to_vec(item["tail_mean"])))
# long-series tail subset
long_tail = DATA_DIR / "long_u0_1_4000_tail.json"
if long_tail.exists():
raw = _load_json(long_tail)
y_obs = np.full(30, np.nan, dtype=float)
for k, v in raw["tail_mean"].items():
y_obs[int(k)] = float(v)
cases.append((raw["protocol"], y_obs))
return cases
def estimate_sensor_sigmas(params: Params) -> np.ndarray:
cases = _collect_validation_cases()
se = np.zeros(30, dtype=float)
n = np.zeros(30, dtype=int)
for protocol, y_obs in cases:
y_pred = simulate_tail_mean(params, protocol, tail=20)
mask = ~np.isnan(y_obs)
err = (y_pred - y_obs)[mask]
idxs = np.nonzero(mask)[0]
se[idxs] += err**2
n[idxs] += 1
rmse = np.sqrt(np.where(n > 0, se / np.maximum(n, 1), 0.0))
# floor uncertainty at typical sensor noise (~0.03) and add a bit for misspecification
sigma = np.maximum(0.05, 1.25 * rmse)
return sigma
def main() -> None:
params = Params.from_json("model_params.json")
sigmas = estimate_sensor_sigmas(params)
contracts_path = Path("contracts.json")
contracts = json.loads(contracts_path.read_text())
answers = []
for c in contracts:
cid = int(c["id"])
sensor = int(c["sensor"])
protocol = c["protocol"]
y_mean = float(simulate_tail_mean(params, protocol, tail=20)[sensor])
s = float(sigmas[sensor])
low = max(-1.0, y_mean - 2.0 * s)
high = min(1.0, y_mean + 2.0 * s)
answers.append({"id": cid, "mean": y_mean, "low": low, "high": high})
Path("answers.json").write_text(json.dumps(answers, indent=2, sort_keys=True) + "\n")
print(json.dumps({"n_contracts": len(answers), "out": "answers.json"}, indent=2))
if __name__ == "__main__":
main()
Preparation contracts
| id | channel | band | success | released finals |
|---|
| 100 | 15 | [-0.04, +0.86] | 100% | +0.40, +0.40, +0.40, +0.44 |
| 101 | 21 | [-0.88, -0.11] | 100% | -0.48, -0.48, -0.49, -0.49 |
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.301 | 0.200 | 0.0 | 0.996 | ✓ |
| 1 | S1 | +0.115 | 0.212 | 0.0 | 0.987 | ✓ |
| 2 | S1 | +0.666 | 0.232 | 0.0 | 0.999 | ✓ |
| 3 | S1 | +0.144 | 0.190 | 0.0 | 0.973 | ✓ |
| 4 | S2 | -0.066 | 0.200 | 0.5 | 0.594 | ✓ |
| 5 | S2 | +0.658 | 0.232 | 0.2 | 0.858 | ✓ |
| 6 | S2 | -0.482 | 0.229 | 0.0 | 0.992 | ✓ |
| 7 | S2 | -0.486 | 0.229 | 0.0 | 0.999 | ✓ |
| 8 | S3 | -0.032 | 0.200 | 0.0 | 1.000 | ✓ |
| 9 | S3 | -0.768 | 0.255 | 3.1 | 0.045 | ✗ |
| 10 | S3 | -0.435 | 0.212 | 2.7 | 0.069 | ✗ |
| 11 | S3 | -0.758 | 0.201 | 0.0 | 0.996 | ✓ |
| 12 | S4 | +0.080 | 0.212 | 0.2 | 0.841 | ✓ |
| 13 | S4 | +0.095 | 0.212 | 0.1 | 0.902 | ✓ |
| 14 | S4 | -0.513 | 0.216 | 0.0 | 0.978 | ✓ |
| 15 | S4 | -0.058 | 0.200 | 0.1 | 0.937 | ✓ |
Verbatim log (117 entries)
{"budget_left": 120000, "phase": "explore"}
{"ticks_run": 200, "budget_left": 119800}
{"budget_left": 119600}
{"ticks_run": 300, "budget_left": 119300}
{"budget_left": 119100}
{"ticks_run": 120, "budget_left": 118980}
{"budget_left": 118780}
{"ticks_run": 150, "budget_left": 118630}
{"budget_left": 118430}
{"ticks_run": 200, "budget_left": 118230}
{"budget_left": 118030}
{"ticks_run": 300, "budget_left": 117730}
{"budget_left": 117530}
{"ticks_run": 500, "budget_left": 117030}
{"budget_left": 116830}
{"ticks_run": 2100, "budget_left": 114730}
{"budget_left": 114530}
{"ticks_run": 4100, "budget_left": 110430}
{"budget_left": 110230}
{"ticks_run": 200, "budget_left": 110030}
{"ticks_run": 40, "budget_left": 109990}
{"ticks_run": 2000, "budget_left": 107990}
{"budget_left": 107790}
{"ticks_run": 200, "budget_left": 107590}
{"ticks_run": 40, "budget_left": 107550}
{"ticks_run": 2000, "budget_left": 105550}
{"budget_left": 105350}
{"ticks_run": 200, "budget_left": 105150}
{"ticks_run": 40, "budget_left": 105110}
{"ticks_run": 2000, "budget_left": 103110}
{"budget_left": 102910}
{"ticks_run": 200, "budget_left": 102710}
{"ticks_run": 40, "budget_left": 102670}
{"ticks_run": 2000, "budget_left": 100670}
{"budget_left": 100470}
{"ticks_run": 200, "budget_left": 100270}
{"ticks_run": 40, "budget_left": 100230}
{"ticks_run": 2000, "budget_left": 98230}
{"budget_left": 98030}
{"ticks_run": 200, "budget_left": 97830}
{"ticks_run": 40, "budget_left": 97790}
{"ticks_run": 2000, "budget_left": 95790}
{"budget_left": 95590}
{"ticks_run": 200, "budget_left": 95390}
{"ticks_run": 40, "budget_left": 95350}
{"ticks_run": 2000, "budget_left": 93350}
{"budget_left": 93150}
{"ticks_run": 200, "budget_left": 92950}
{"ticks_run": 40, "budget_left": 92910}
{"ticks_run": 2000, "budget_left": 90910}
{"budget_left": 90710}
{"ticks_run": 200, "budget_left": 90510}
{"ticks_run": 40, "budget_left": 90470}
{"ticks_run": 2000, "budget_left": 88470}
{"budget_left": 88270}
{"ticks_run": 200, "budget_left": 88070}
{"ticks_run": 40, "budget_left": 88030}
{"ticks_run": 2000, "budget_left": 86030}
{"budget_left": 85830}
{"ticks_run": 200, "budget_left": 85630}
{"ticks_run": 40, "budget_left": 85590}
{"ticks_run": 2000, "budget_left": 83590}
{"budget_left": 83390}
{"ticks_run": 200, "budget_left": 83190}
{"ticks_run": 40, "budget_left": 83150}
{"ticks_run": 2000, "budget_left": 81150}
{"budget_left": 80950}
{"ticks_run": 200, "budget_left": 80750}
{"ticks_run": 40, "budget_left": 80710}
{"ticks_run": 2000, "budget_left": 78710}
{"budget_left": 78510}
{"ticks_run": 200, "budget_left": 78310}
{"ticks_run": 40, "budget_left": 78270}
{"ticks_run": 2000, "budget_left": 76270}
{"budget_left": 76070}
{"ticks_run": 200, "budget_left": 75870}
{"ticks_run": 40, "budget_left": 75830}
{"ticks_run": 2000, "budget_left": 73830}
{"budget_left": 73630}
{"ticks_run": 200, "budget_left": 73430}
{"ticks_run": 40, "budget_left": 73390}
{"ticks_run": 2000, "budget_left": 71390}
{"budget_left": 71190}
{"ticks_run": 200, "budget_left": 70990}
{"ticks_run": 40, "budget_left": 70950}
{"ticks_run": 2000, "budget_left": 68950}
{"budget_left": 68750}
{"ticks_run": 200, "budget_left": 68550}
{"ticks_run": 40, "budget_left": 68510}
{"ticks_run": 2000, "budget_left": 66510}
{"budget_left": 66310}
{"ticks_run": 2200, "budget_left": 64110}
{"ticks_run": 2000, "budget_left": 62110}
{"budget_left": 61910}
{"ticks_run": 2200, "budget_left": 59710}
{"ticks_run": 2000, "budget_left": 57710}
{"budget_left": 57510}
{"ticks_run": 2200, "budget_left": 55310}
{"ticks_run": 200, "budget_left": 55110}
{"ticks_run": 300, "budget_left": 54810}
{"ticks_run": 500, "budget_left": 54310}
{"ticks_run": 1000, "budget_left": 53310}
{"budget_left": 53110}
{"ticks_run": 200, "budget_left": 52910}
{"ticks_run": 200, "budget_left": 52710}
{"ticks_run": 300, "budget_left": 52410}
{"ticks_run": 500, "budget_left": 51910}
{"ticks_run": 1000, "budget_left": 50910}
{"budget_left": 50710}
{"ticks_run": 2200, "budget_left": 48510}
{"ticks_run": 200, "budget_left": 48310}
{"ticks_run": 300, "budget_left": 48010}
{"ticks_run": 500, "budget_left": 47510}
{"ticks_run": 1000, "budget_left": 46510}
{"phase": "answer"}
{"received": 16}
Submitted predictions for all 16 contracts via `physim_answer` and submitted both preparation policies (`id` 100 and 101) via `physim_answer_prep`.
Artifacts saved in the workspace:
- `model_params.json` (fitted model parameters)
- `contracts.json` (parsed contracts)
- `answers.json` (generated predictions + intervals)
- `predict_contracts.py`, `fit_model.py`, `model.py` (model + tooling)
- `data
anthropic/claude-fable-5 · C1 seed 2 · tier tools · accuracy 0.96 · preparation 0.80 · theory 0.96 · budget 19%
S1=0.98 · S2=0.98 · S3=0.96 · S4=0.93 · coverage 1.00 · 345 nodes
Narrative experiment log
- 2× free run (600 ticks; 200 ticks, all inputs 0).
- ✗ single-port probe rejected: series observation limited to <=6 channels.
- Single-port probe (150 ticks; port 0 at +0.06, 150t).
- 2× drive → release (800 ticks; drive +0.12 for 200t, release 200t).
- Free run (600 ticks; 600 ticks, all inputs 0).
- 8× drive → release (3,300 ticks; drive -0.12 for 200t, release 300t).
- 8× single-port probe (1,200 ticks; port 5 at +0.12, 150t).
- Drive → release (400 ticks; drive -0.12 for 200t, release 200t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (100 ticks; 100 ticks, all inputs 0).
- 4× drive → release (1,300 ticks; drive +0.04 for 100t, release 150t).
- Free run (500 ticks; 500 ticks, all inputs 0).
- Multi-port probe (150 ticks; ports [4, 5, 6, 7] at +0.50, 150t).
- 17× drive → release (2,050 ticks; drive +0.12 for 50t, release 50t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (230 ticks; drive -0.12 for 150t, release 80t).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (700 ticks; drive -0.06 for 100t, release 100t) — ch16 -0.54→+0.63, ch33 -0.54→+0.33, ch14 -0.33→+0.52.
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (540 ticks; drive +0.06 for 260t, release 40t).
- Reset to fresh initial conditions (−200 ticks).
- 8× drive → release (2,410 ticks; drive -0.12 for 150t, release 100t).
- Reset to fresh initial conditions (−200 ticks).
- 5× drive → release (1,900 ticks; drive -0.09 for 380t, release 40t) — ch1 +0.27→-0.14, ch32 +0.21→-0.16.
- Single-port probe (500 ticks; port 1 at -0.09, 500t).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,240 ticks; drive -0.09 for 250t, release 60t).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,530 ticks; drive -0.50 for 100t, release 50t) — ch16 -0.51→+0.66, ch33 -0.56→+0.34, ch1 +0.28→-0.53.
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,840 ticks; drive -0.07 for 500t, release 60t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (120 ticks; 120 ticks, all inputs 0).
- 2× drive → release (750 ticks; drive -0.09 for 400t, release 60t) — ch13 +0.81→-0.16, ch35 -0.32→+0.55, ch14 -0.33→+0.52.
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (460 ticks; drive -0.12 for 120t, release 60t) — ch13 +0.83→-0.18, ch35 -0.29→+0.57, ch2 -0.31→+0.46.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- 9× drive → release (1,650 ticks; drive +0.12 for 100t, release 50t).
- Reset to fresh initial conditions (−200 ticks).
- 6× drive → release (1,600 ticks; drive +0.12 for 50t, release 50t).
- Reset to fresh initial conditions (−200 ticks).
- 6× drive → release (910 ticks; drive -0.12 for 90t, release 30t) — ch16 -0.50→+0.63, ch33 -0.53→+0.34.
- Submitted an executable theory (5,143 chars).
- Submitted an executable theory (5,143 chars).
- Reset to fresh initial conditions (−200 ticks).
- 3× ramp sweep (1,220 ticks; 300 ticks, peak mean drive -0.06).
- Submitted an executable theory (5,263 chars).
- Ended exploration → received 0 prediction contracts.
- Ended exploration → received 0 prediction contracts.
- Submitted 16 contract answers.
- Submitted preparation policy for contract 100 (414 chars).
- Submitted preparation policy for contract 101 (413 chars).
- Submitted preparation policy for contract 101 (413 chars).
- Submitted preparation policy for contract 102 (413 chars).
- Submitted preparation policy for contract 103 (414 chars).
- Submitted preparation policy for contract 104 (1135 chars).
Agent-written files (its instruments & theories)
app/physim/MODEL.md (3,941 chars)
# PHYSIM system model (discovered by experiment)
## Architecture
8 inputs, 36 sensors, additive white noise sd≈0.05/tick on every sensor.
4 independent latent subsystems driven by ports 0-3. Ports 4-7 INERT (both signs, anywhere).
Sensors = fixed offsets + nonlinear readouts of one latent each. Sensor mapping:
- s0 (port0, "fuse"): ch14, ch16, ch25, ch33
- s1 (port1, integrator): ch20
- s2 (port2, "fuse"): ch0, ch1, ch13, ch32
- s3 (port3, "fuse"): ch2, ch30, ch31, ch35 (+ch18 tiny +0.05 when fired)
- All other channels: constant (fresh-draw baseline), never moved in any condition.
## Fresh draw
Always starts at state A (armed fuses, s=0; ch20≈-0.01±0.02). Baselines repeatable ±0.02.
## Fuse ports (0, 2, 3) — one-way latent s∈[0(A)..1(fired/floor)]
- Rest: ANY s is stable at u=0 (continuum, no decay over ≥600 ticks).
- Strong NEGATIVE u ≤ -0.85: fires immediately; transit to floor takes ~40-55 ticks (sigmoid path, see transit series). Min -1 pulse to latch: ~8-10 ticks (6 returns, 10 fires); once past ~1/4 of transit, completes autonomously after release.
- u in [-0.8,-0.7]: relaxation oscillations period ≈45-50 ticks, amplitude large (e.g. ch16 swings -0.65..+0.05); fires stochastically ~p≈0.3-0.4 per cycle (mean latency 100-350 ticks).
- u ≈ -0.6: sustained oscillation, no fire ≤500 ticks; during-drive mean e.g. ch16 ≈ -0.35 (A=-0.50); small permanent s advance (~0.05-0.1 of path).
- u in [-0.5,-0.2]: single damped excursion at onset (peak ~half-way to fired values, decays in ~40 ticks), settles to small during-drive shift; fully returns to A on release.
- POSITIVE u: elastic during-drive shift (relaxes τ≈15 on release) + slow creep of s toward 1:
port0 λ(u): 0.7→~0.0001, 0.8→0.0008, 1.0→0.0030 /tick (exp approach in ch16-space)
port2: initial rate ~0.0014/tick@u=1 (accelerates late, see staircase); scales ≈u² (0.5→~0.0004)
port3: similar; traverses non-monotone path (ch30/31 rise then fall)
- Elastic during-drive shifts at s=0 (scale ~linearly with u, sd noted):
port0 u=+0.5: ch16 -0.08, ch33 -0.10, ch25 +0.12, ch14 -0.05
port0 u=-0.25..-0.5: transient excursions instead (see above)
port2 u=+1: ch1 +0.15 early bump; port3 u=+1: ch30 +0.10, ch31 +0.06
- Fired floor is ABSORBING: no response to any port-0..3 input afterwards (elastic also dead).
## Port 1 — bounded integrator (no threshold, no elastic)
d(ch20)/dt = -0.0042*u1 (linear in u), bounds ch20∈[-0.37..-0.30(soft floor), +0.21±0.02 ceiling].
Holds position at rest indefinitely. Fresh ch20≈-0.01.
## Rest-state readout tables (see staircase_port0.csv)
s0 path (T=+1-equiv ticks, λ=0.003 ⇒ s=1-exp(-0.003T)):
A(T=0): 14:-0.35 16:-0.50 25:-0.14 33:-0.56
T=205: 14:-0.15 16:-0.05 25:-0.01 33:-0.40
T=405: 14:+0.10 16:+0.24 25:-0.10 33:-0.11
T=705: 14:+0.34 16:+0.52 25:-0.28 33:+0.14
fired: 14:+0.51 16:+0.65 25:-0.54 33:+0.35
s2 path (T units of +1 ticks; ch0 & ch13 lag ch1/ch32):
A: 0:+0.08 1:+0.28 13:+0.81 32:+0.18 ... fired: 0:-0.53 1:-0.55 13:-0.18 32:-0.39
s3 path: A: 2:-0.31 30:+0.14 31:+0.25 35:-0.31; mid(+650): 2:+0.18 30:-0.14 31:+0.25 35:+0.23
(ch30 peaks +0.35 & ch31 +0.42 around T~350-400) ... fired: 2:+0.455 30:-0.61 31:-0.11 35:+0.57
ch18: A:+0.21, fired:+0.25
## Baseline A (all 36, mean of many draws)
0:0.08 1:0.28 2:-0.31 3:-0.47 4:0.22 5:-0.23 6:-0.12 7:0.06 8:-0.31 9:-0.645 10:0.02
11:-0.707 12:-0.334 13:0.815 14:-0.35 15:0.185 16:-0.50 17:-0.452 18:0.21 19:-0.740
20:-0.01 21:0.735 22:-0.53 23:-0.472 24:-0.535 25:-0.14 26:0.126 27:0.485 28:-0.594
29:0.483 30:0.135 31:0.245 32:0.17 33:-0.56 34:-0.716 35:-0.315
## Transits (fire trajectories, ticks from fire onset under -1; free transit ~1.3x slower)
port0 ch16: -0.5,-0.65(dip,t~10),-0.3(t~20),+0.1(t~28),+0.5(t~38),0.65(t>45)
port2 ch1: 0.28(0),0.1(t~15),-0.25(t~28),-0.5(t~40); ch13 lags ~5 ticks; ch0 similar
port3 ch30: 0.15(0),0.05(t~18),-0.35(t~27),-0.6(t~38); ch2/ch35 rise sigmoid center t~25
app/physim/log.md (629 chars)
# Physim exploration log
- 8 inputs, 36 sensors, noise sd ~0.05 per tick, tail = last 20 ticks
- Baseline A (initial draw, u=0): ch0..35 =
0.077,0.278,-0.306,-0.462,0.215,-0.223,-0.115,0.057,-0.302,-0.642,0.017,-0.708,-0.340,0.822,-0.333,0.170,-0.483,-0.449,0.201,-0.740,-0.008,0.731,-0.527,-0.472,-0.542,-0.156,0.126,0.486,-0.595,0.492,0.153,0.239,0.169,-0.552,-0.709,-0.327
- u0=+0.5 x150: ch14 -0.43, ch16 -0.59, ch25 -0.03, ch33 -0.67 (shift while driven)
- u0=+1.0 x200 then 0: state SWITCHED to new attractor B:
ch14 -0.25, ch16 -0.21, ch25 +0.02, ch33 -0.50 (stable over 600 ticks)
- => multistability / branch memory
app/.vf-claude/73c9e1b148d44291bac02325491ba400/.claude.json (389 chars)
{
"firstStartTime": "2026-08-13T14:08:38.564Z",
"machineID": "ccb73738dbf98f81ffcfdb8d1f0749ac7901dc104e3d2c6baa1919d0038899d2",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "dae828c7ad6542ef8544c062254d383825a3680c33096999599eb013cb0cb160"
}
app/physim/staircase_port0.csv (1,197 chars)
# Port0 staircase: rest-state tail means after cumulative +1 drive (50-tick steps unless noted)
# T_cum = ticks of u0=+1 since ~A (after initial 0.8x200 which ~= 55 equiv ticks); columns: T,ch14,ch16,ch25,ch33
0,-0.355,-0.495,-0.143,-0.563
55,-0.352,-0.330,-0.027,-0.601
105,-0.280,-0.235,-0.029,-0.501
155,-0.220,-0.156,-0.010,-0.451
205,-0.154,-0.051,-0.009,-0.405
255,-0.093,0.038,-0.017,-0.321
305,-0.025,0.101,-0.043,-0.252
355,0.016,0.179,-0.075,-0.183
405,0.096,0.242,-0.098,-0.114
455,0.143,0.336,-0.139,-0.058
505,0.217,0.358,-0.173,-0.017
555,0.227,0.411,-0.208,0.047
605,0.273,0.441,-0.236,0.074
655,0.313,0.492,-0.257,0.107
705,0.343,0.516,-0.278,0.135
805,0.385,0.526,-0.315,0.171
905,0.390,0.576,-0.350,0.191
1205,0.453,0.620,-0.397,0.290
99999,0.51,0.65,-0.55,0.35
# Port2 staircase: T_cum(+1 ticks),ch0,ch1,ch13,ch32 (rest tails; fresh draw start)
0,0.075,0.28,0.81,0.18
100,0.076,0.171,0.745,0.065
200,0.060,0.032,0.692,-0.048
300,0.026,-0.105,0.590,-0.160
400,-0.092,-0.220,0.392,-0.246
500,-0.160,-0.334,0.291,-0.329
600,-0.246,-0.402,0.168,-0.346
700,-0.293,-0.457,0.093,-0.375
900,-0.401,-0.494,-0.036,-0.369
1200,-0.463,-0.522,-0.097,-0.394
99999,-0.53,-0.545,-0.175,-0.39
app/physim/theory.py (5,932 chars)
import math
BASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,
-0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,
-0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.126,0.485,-0.594,
0.483,0.135,0.245,0.17,-0.56,-0.716,-0.315]
# fuse port -> {channel: (A_value, fired_value)}
FUSE = {
0: {14:(-0.35,0.51), 16:(-0.50,0.65), 25:(-0.14,-0.54), 33:(-0.56,0.35)},
2: {0:(0.08,-0.53), 1:(0.28,-0.55), 13:(0.815,-0.18), 32:(0.17,-0.39)},
3: {2:(-0.31,0.455), 30:(0.135,-0.61), 31:(0.245,-0.11), 35:(-0.315,0.57), 18:(0.21,0.25)},
}
# rest-path tables: progress q in [0,1] measured in T-equiv (+1 ticks), per channel piecewise
# port0: T pts and channel values
P0_T = [0,105,205,305,405,505,605,705,905,1205,3000]
P0 = {
14:[-0.35,-0.28,-0.15,-0.03,0.10,0.22,0.27,0.34,0.39,0.45,0.51],
16:[-0.50,-0.235,-0.05,0.10,0.24,0.36,0.44,0.52,0.58,0.62,0.65],
25:[-0.14,-0.03,-0.01,-0.04,-0.10,-0.17,-0.24,-0.28,-0.35,-0.40,-0.54],
33:[-0.56,-0.50,-0.40,-0.25,-0.11,-0.02,0.07,0.14,0.19,0.29,0.35],
}
P2_T = [0,100,200,300,400,500,600,700,900,1200,3000]
P2 = {
0:[0.08,0.076,0.060,0.026,-0.092,-0.160,-0.246,-0.293,-0.401,-0.463,-0.53],
1:[0.28,0.171,0.032,-0.105,-0.220,-0.334,-0.402,-0.457,-0.494,-0.522,-0.55],
13:[0.815,0.745,0.692,0.590,0.392,0.291,0.168,0.093,-0.036,-0.097,-0.18],
32:[0.17,0.065,-0.048,-0.160,-0.246,-0.329,-0.346,-0.375,-0.369,-0.394,-0.39],
}
P3_T = [0,50,150,350,650,950,1350,3000]
P3 = {
2:[-0.31,-0.26,-0.24,-0.15,0.18,0.34,0.40,0.455],
30:[0.135,0.13,0.15,0.13,-0.14,-0.36,-0.47,-0.61],
31:[0.245,0.25,0.31,0.37,0.25,0.11,0.02,-0.11],
35:[-0.315,-0.26,-0.27,-0.15,0.23,0.42,0.53,0.57],
18:[0.21,0.21,0.21,0.22,0.23,0.24,0.245,0.25],
}
TABLES = {0:(P0_T,P0), 2:(P2_T,P2), 3:(P3_T,P3)}
# transit shapes: fraction of (A->fired) gap vs ticks since fire onset (sigmoid)
def transit_frac(tau, dur):
# dur ~ 40 under drive; sigmoid centered mid
x = (tau - dur*0.55)/(dur*0.16)
return 1.0/(1.0+math.exp(-x))
def interp(T, xs, ys):
if T<=xs[0]: return ys[0]
for i in range(1,len(xs)):
if T<=xs[i]:
w=(T-xs[i-1])/(xs[i]-xs[i-1]); return ys[i-1]*(1-w)+ys[i]*w
return ys[-1]
def creep_rate(p,u):
if u<0.65:
if p==0: return 0.0
return 1.0*u*u if p!=0 else 0.0
if p==0:
# port0 thresholded: T-equiv ticks per tick
if u<0.72: return 0.03
if u<0.82: return 0.27 # 0.0008/0.003
return (u-0.82)/0.18*(1.0-0.35)+0.35 if u<1 else 1.0
return u*u # ports 2,3 approx quadratic scaling of table-T per tick
# per-cycle osc params
OSC_PER = 48.0
def fire_latency(u):
au=abs(u)
if au>=0.85: return 0
if au>=0.80: return 60
if au>=0.75: return 140
if au>=0.72: return 200
if au>=0.68: return 260
return 10**9
def elastic_target(p,u,q):
# during-drive additive shifts (vanish as q->1), linear in u for u>0
e={}
if p==0 and u>0:
e={14:-0.10*u,16:-0.16*u,25:0.24*u,33:-0.20*u}
elif p==0 and u<0:
e={14:0.10*u,16:0.10*u,25:-0.05*u,33:0.10*u}
elif p==2 and u>0:
e={1:0.15*u,32:0.05*u}
elif p==3 and u>0:
e={30:0.10*u,31:0.06*u}
return e
def init(y_history):
st={'t':0,'ch20':-0.01,
'fuse':{p:{'T':0.0,'fired':False,'transit':-1.0,'oscT':0.0,'phase':0.0} for p in (0,2,3)},
'el':{p:{} for p in (0,2,3)}}
try:
if y_history and len(y_history)>0:
n=min(len(y_history),20)
s=0.0
for row in y_history[-n:]: s+=row[20]
st['ch20']=s/n
except Exception: pass
return st
def step(state,a):
st=state
st['t']+=1
u1 = a[1] if len(a)>1 else 0.0
st['ch20'] = min(0.21, max(-0.37, st['ch20'] - 0.0042*u1))
y=[b for b in BASE]
y[20]=st['ch20']
for p in (0,2,3):
u = a[p] if len(a)>p else 0.0
f=st['fuse'][p]; el=st['el'][p]
chans=TABLES[p][1]; Ts=TABLES[p][0]
if f['fired']:
if f['transit']>=0:
f['transit']+=1.0
dur=45.0
fr=transit_frac(f['transit'],dur)
if f['transit']>dur*1.6: f['transit']=-1.0
for c in chans:
A,_=None,None
rest0=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest0*(1-fr)+fired*fr
else:
for c in chans: y[c]=chans[c][-1]
continue
# not fired
if u<=-0.85 or (u<=-0.67 and f['oscT']>=fire_latency(u)):
f['fired']=True; f['transit']=0.0
for c in chans: y[c]=interp(f['T'],Ts,chans[c])
continue
if u<=-0.55:
# oscillating regime: mean elevated toward mid-path
f['oscT']+=1.0
f['phase']+=2*math.pi/OSC_PER
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
amp=(fired-rest)*0.30*min(1.0,(abs(u)-0.45)/0.3)
mean=rest+(fired-rest)*0.15
y[c]=mean+amp*math.sin(f['phase'])
# slow advance
f['T']+=0.06
continue
f['oscT']=0.0
if u<=-0.15:
# damped excursion at onset then small shift; approximate steady small shift
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest+(fired-rest)*0.05*abs(u)/0.5
continue
if u>=0.15:
f['T']+=creep_rate(p,u)
et=elastic_target(p,u,0.0)
for c in chans:
cur=el.get(c,0.0); tgt=et.get(c,0.0)
el[c]=cur+(tgt-cur)/15.0
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
continue
# u ~ 0: relax elastic
for c in list(el.keys()): el[c]*=(1-1/15.0)
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
return st,y
app/physim/theory_final.py (6,139 chars)
BASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,
-0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,
-0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.126,0.485,-0.594,
0.483,0.135,0.245,0.17,-0.56,-0.716,-0.315]
# fuse port -> {channel: (A_value, fired_value)}
FUSE = {
0: {14:(-0.35,0.51), 16:(-0.50,0.65), 25:(-0.14,-0.54), 33:(-0.56,0.35)},
2: {0:(0.08,-0.53), 1:(0.28,-0.55), 13:(0.815,-0.18), 32:(0.17,-0.39)},
3: {2:(-0.31,0.455), 30:(0.135,-0.61), 31:(0.245,-0.11), 35:(-0.315,0.57), 18:(0.21,0.25)},
}
# rest-path tables: progress q in [0,1] measured in T-equiv (+1 ticks), per channel piecewise
# port0: T pts and channel values
P0_T = [0,105,205,305,405,505,605,705,905,1205,3000]
P0 = {
14:[-0.35,-0.28,-0.15,-0.03,0.10,0.22,0.27,0.34,0.39,0.45,0.51],
16:[-0.50,-0.235,-0.05,0.10,0.24,0.36,0.44,0.52,0.58,0.62,0.65],
25:[-0.14,-0.03,-0.01,-0.04,-0.10,-0.17,-0.24,-0.28,-0.35,-0.40,-0.54],
33:[-0.56,-0.50,-0.40,-0.25,-0.11,-0.02,0.07,0.14,0.19,0.29,0.35],
}
P2_T = [0,100,200,300,400,500,600,700,900,1200,3000]
P2 = {
0:[0.08,0.076,0.060,0.026,-0.092,-0.160,-0.246,-0.293,-0.401,-0.463,-0.53],
1:[0.28,0.171,0.032,-0.105,-0.220,-0.334,-0.402,-0.457,-0.494,-0.522,-0.55],
13:[0.815,0.745,0.692,0.590,0.392,0.291,0.168,0.093,-0.036,-0.097,-0.18],
32:[0.17,0.065,-0.048,-0.160,-0.246,-0.329,-0.346,-0.375,-0.369,-0.394,-0.39],
}
P3_T = [0,50,150,350,650,950,1350,3000]
P3 = {
2:[-0.31,-0.26,-0.24,-0.15,0.18,0.34,0.40,0.455],
30:[0.135,0.13,0.15,0.13,-0.14,-0.36,-0.47,-0.61],
31:[0.245,0.25,0.31,0.37,0.25,0.11,0.02,-0.11],
35:[-0.315,-0.26,-0.27,-0.15,0.23,0.42,0.53,0.57],
18:[0.21,0.21,0.21,0.22,0.23,0.24,0.245,0.25],
}
TABLES = {0:(P0_T,P0), 2:(P2_T,P2), 3:(P3_T,P3)}
# transit shapes: fraction of (A->fired) gap vs ticks since fire onset (sigmoid)
def transit_frac(tau, dur):
# dur ~ 40 under drive; sigmoid centered mid
x = (tau - dur*0.55)/(dur*0.16)
return 1.0/(1.0+math.exp(-x))
def interp(T, xs, ys):
if T<=xs[0]: return ys[0]
for i in range(1,len(xs)):
if T<=xs[i]:
w=(T-xs[i-1])/(xs[i]-xs[i-1]); return ys[i-1]*(1-w)+ys[i]*w
return ys[-1]
def creep_rate(p,u):
# T-table-units advanced per tick under continuous positive drive u
if p==0:
if u<0.68: return 0.0
if u<0.76: return 0.02+(u-0.68)/0.08*0.10
if u<0.85: return 0.12+(u-0.76)/0.09*0.16
return 0.28+(min(u,1.0)-0.85)/0.15*0.32
if u<0.2: return 0.0
return 0.8*(u**1.6) # ports 2,3
# per-cycle osc params
OSC_PER = 48.0
def fire_latency(u):
au=abs(u)
if au>=0.95: return 8
if au>=0.85: return 18
if au>=0.80: return 60
if au>=0.75: return 140
if au>=0.72: return 200
if au>=0.68: return 260
return 10**9
def elastic_target(p,u,q):
# during-drive additive shifts (vanish as q->1), linear in u for u>0
e={}
if p==0 and u>0:
e={14:-0.10*u,16:-0.16*u,25:0.24*u,33:-0.20*u}
elif p==0 and u<0:
e={14:0.10*u,16:0.10*u,25:-0.05*u,33:0.10*u}
elif p==2 and u>0:
e={1:0.15*u,32:0.05*u}
elif p==3 and u>0:
e={30:0.10*u,31:0.06*u}
return e
def init(y_history):
st={'t':0,'ch20':-0.01,
'fuse':{p:{'T':0.0,'fired':False,'transit':-1.0,'oscT':0.0,'phase':0.0,'uslow':0.0,'cycling':False} for p in (0,2,3)},
'el':{p:{} for p in (0,2,3)}}
try:
if y_history and len(y_history)>0:
n=min(len(y_history),20)
s=0.0
for row in y_history[-n:]: s+=row[20]
st['ch20']=s/n
except Exception: pass
return st
def step(state,a):
st=state
st['t']+=1
u1 = a[1] if len(a)>1 else 0.0
st['ch20'] = min(0.21, max(-0.37, st['ch20'] - 0.0042*u1))
y=[b for b in BASE]
y[20]=st['ch20']
for p in (0,2,3):
u = a[p] if len(a)>p else 0.0
f=st['fuse'][p]; el=st['el'][p]
chans=TABLES[p][1]; Ts=TABLES[p][0]
if f['fired']:
if f['transit']>=0:
f['transit']+=1.0
dur=45.0
fr=transit_frac(f['transit'],dur)
if f['transit']>dur*1.6: f['transit']=-1.0
for c in chans:
A,_=None,None
rest0=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest0*(1-fr)+fired*fr
else:
for c in chans: y[c]=chans[c][-1]
continue
# not fired: accommodation — uslow tracks u (tau=25); shock = uslow - u
us = f.get('uslow',0.0)
shock = us - u
f['uslow'] = us + (u-us)/25.0
if u < -0.15:
if shock >= 0.55 and u <= -0.55:
f['cycling']=True
if f.get('cycling') and u <= -0.55:
f['oscT']=f.get('oscT',0.0)+1.0
if f['oscT']>=fire_latency(u):
f['fired']=True; f['transit']=0.0
for c in chans: y[c]=interp(f['T'],Ts,chans[c])
continue
f['phase']+=2*math.pi/OSC_PER
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
amp=(fired-rest)*0.30*min(1.0,(abs(u)-0.45)/0.3)
mean=rest+(fired-rest)*0.15
y[c]=mean+amp*math.sin(f['phase'])
f['T']+=0.06
continue
f['cycling']=False; f['oscT']=0.0
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest+(fired-rest)*0.22*abs(u)
continue
f['cycling']=False; f['oscT']=0.0
if u>=0.15:
f['T']+=creep_rate(p,u)
et=elastic_target(p,u,0.0)
for c in chans:
cur=el.get(c,0.0); tgt=et.get(c,0.0)
el[c]=cur+(tgt-cur)/15.0
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
continue
# u ~ 0: relax elastic
for c in list(el.keys()): el[c]*=(1-1/15.0)
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
return st,y
app/physim/theory_local.py (6,151 chars)
import math
BASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,
-0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,
-0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.126,0.485,-0.594,
0.483,0.135,0.245,0.17,-0.56,-0.716,-0.315]
# fuse port -> {channel: (A_value, fired_value)}
FUSE = {
0: {14:(-0.35,0.51), 16:(-0.50,0.65), 25:(-0.14,-0.54), 33:(-0.56,0.35)},
2: {0:(0.08,-0.53), 1:(0.28,-0.55), 13:(0.815,-0.18), 32:(0.17,-0.39)},
3: {2:(-0.31,0.455), 30:(0.135,-0.61), 31:(0.245,-0.11), 35:(-0.315,0.57), 18:(0.21,0.25)},
}
# rest-path tables: progress q in [0,1] measured in T-equiv (+1 ticks), per channel piecewise
# port0: T pts and channel values
P0_T = [0,105,205,305,405,505,605,705,905,1205,3000]
P0 = {
14:[-0.35,-0.28,-0.15,-0.03,0.10,0.22,0.27,0.34,0.39,0.45,0.51],
16:[-0.50,-0.235,-0.05,0.10,0.24,0.36,0.44,0.52,0.58,0.62,0.65],
25:[-0.14,-0.03,-0.01,-0.04,-0.10,-0.17,-0.24,-0.28,-0.35,-0.40,-0.54],
33:[-0.56,-0.50,-0.40,-0.25,-0.11,-0.02,0.07,0.14,0.19,0.29,0.35],
}
P2_T = [0,100,200,300,400,500,600,700,900,1200,3000]
P2 = {
0:[0.08,0.076,0.060,0.026,-0.092,-0.160,-0.246,-0.293,-0.401,-0.463,-0.53],
1:[0.28,0.171,0.032,-0.105,-0.220,-0.334,-0.402,-0.457,-0.494,-0.522,-0.55],
13:[0.815,0.745,0.692,0.590,0.392,0.291,0.168,0.093,-0.036,-0.097,-0.18],
32:[0.17,0.065,-0.048,-0.160,-0.246,-0.329,-0.346,-0.375,-0.369,-0.394,-0.39],
}
P3_T = [0,50,150,350,650,950,1350,3000]
P3 = {
2:[-0.31,-0.26,-0.24,-0.15,0.18,0.34,0.40,0.455],
30:[0.135,0.13,0.15,0.13,-0.14,-0.36,-0.47,-0.61],
31:[0.245,0.25,0.31,0.37,0.25,0.11,0.02,-0.11],
35:[-0.315,-0.26,-0.27,-0.15,0.23,0.42,0.53,0.57],
18:[0.21,0.21,0.21,0.22,0.23,0.24,0.245,0.25],
}
TABLES = {0:(P0_T,P0), 2:(P2_T,P2), 3:(P3_T,P3)}
# transit shapes: fraction of (A->fired) gap vs ticks since fire onset (sigmoid)
def transit_frac(tau, dur):
# dur ~ 40 under drive; sigmoid centered mid
x = (tau - dur*0.55)/(dur*0.16)
return 1.0/(1.0+math.exp(-x))
def interp(T, xs, ys):
if T<=xs[0]: return ys[0]
for i in range(1,len(xs)):
if T<=xs[i]:
w=(T-xs[i-1])/(xs[i]-xs[i-1]); return ys[i-1]*(1-w)+ys[i]*w
return ys[-1]
def creep_rate(p,u):
# T-table-units advanced per tick under continuous positive drive u
if p==0:
if u<0.68: return 0.0
if u<0.76: return 0.02+(u-0.68)/0.08*0.10
if u<0.85: return 0.12+(u-0.76)/0.09*0.16
return 0.28+(min(u,1.0)-0.85)/0.15*0.32
if u<0.2: return 0.0
return 0.8*(u**1.6) # ports 2,3
# per-cycle osc params
OSC_PER = 48.0
def fire_latency(u):
au=abs(u)
if au>=0.95: return 8
if au>=0.85: return 18
if au>=0.80: return 60
if au>=0.75: return 140
if au>=0.72: return 200
if au>=0.68: return 260
return 10**9
def elastic_target(p,u,q):
# during-drive additive shifts (vanish as q->1), linear in u for u>0
e={}
if p==0 and u>0:
e={14:-0.10*u,16:-0.16*u,25:0.24*u,33:-0.20*u}
elif p==0 and u<0:
e={14:0.10*u,16:0.10*u,25:-0.05*u,33:0.10*u}
elif p==2 and u>0:
e={1:0.15*u,32:0.05*u}
elif p==3 and u>0:
e={30:0.10*u,31:0.06*u}
return e
def init(y_history):
st={'t':0,'ch20':-0.01,
'fuse':{p:{'T':0.0,'fired':False,'transit':-1.0,'oscT':0.0,'phase':0.0,'uslow':0.0,'cycling':False} for p in (0,2,3)},
'el':{p:{} for p in (0,2,3)}}
try:
if y_history and len(y_history)>0:
n=min(len(y_history),20)
s=0.0
for row in y_history[-n:]: s+=row[20]
st['ch20']=s/n
except Exception: pass
return st
def step(state,a):
st=state
st['t']+=1
u1 = a[1] if len(a)>1 else 0.0
st['ch20'] = min(0.21, max(-0.37, st['ch20'] - 0.0042*u1))
y=[b for b in BASE]
y[20]=st['ch20']
for p in (0,2,3):
u = a[p] if len(a)>p else 0.0
f=st['fuse'][p]; el=st['el'][p]
chans=TABLES[p][1]; Ts=TABLES[p][0]
if f['fired']:
if f['transit']>=0:
f['transit']+=1.0
dur=45.0
fr=transit_frac(f['transit'],dur)
if f['transit']>dur*1.6: f['transit']=-1.0
for c in chans:
A,_=None,None
rest0=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest0*(1-fr)+fired*fr
else:
for c in chans: y[c]=chans[c][-1]
continue
# not fired: accommodation — uslow tracks u (tau=25); shock = uslow - u
us = f.get('uslow',0.0)
shock = us - u
f['uslow'] = us + (u-us)/25.0
if u < -0.15:
if shock >= 0.55 and u <= -0.55:
f['cycling']=True
if f.get('cycling') and u <= -0.55:
f['oscT']=f.get('oscT',0.0)+1.0
if f['oscT']>=fire_latency(u):
f['fired']=True; f['transit']=0.0
for c in chans: y[c]=interp(f['T'],Ts,chans[c])
continue
f['phase']+=2*math.pi/OSC_PER
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
amp=(fired-rest)*0.30*min(1.0,(abs(u)-0.45)/0.3)
mean=rest+(fired-rest)*0.15
y[c]=mean+amp*math.sin(f['phase'])
f['T']+=0.06
continue
f['cycling']=False; f['oscT']=0.0
for c in chans:
rest=interp(f['T'],Ts,chans[c]); fired=chans[c][-1]
y[c]=rest+(fired-rest)*0.22*abs(u)
continue
f['cycling']=False; f['oscT']=0.0
if u>=0.15:
f['T']+=creep_rate(p,u)
et=elastic_target(p,u,0.0)
for c in chans:
cur=el.get(c,0.0); tgt=et.get(c,0.0)
el[c]=cur+(tgt-cur)/15.0
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
continue
# u ~ 0: relax elastic
for c in list(el.keys()): el[c]*=(1-1/15.0)
for c in chans:
y[c]=interp(f['T'],Ts,chans[c])+el.get(c,0.0)
return st,y
Preparation contracts
| id | channel | band | success | released finals |
|---|
| 100 | 16 | [+0.35, +0.94] | 100% | +0.66, +0.65, +0.66, +0.65 |
| 101 | 13 | [-0.42, +0.08] | 100% | -0.17, -0.18, -0.18, -0.16 |
| 102 | 33 | [+0.09, +0.61] | 100% | +0.34, +0.34, +0.34, +0.34 |
| 103 | 35 | [+0.28, +0.88] | 100% | +0.59, +0.58, +0.57, +0.57 |
| 104 | 23 | [+0.07, +0.57] | 0% | -0.48, -0.45, -0.46 |
Executable theory
accuracy 0.955 · per-stratum {'S1': 0.98, 'S2': 0.97, 'S3': 0.95, 'S4': 0.92} · 5,263 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | +0.195 | 0.232 | 0.0 | 0.960 | ✓ |
| 1 | S1 | +0.279 | 0.182 | 0.0 | 0.995 | ✓ |
| 2 | S1 | +0.820 | 0.208 | 0.0 | 0.995 | ✓ |
| 3 | S1 | -0.531 | 0.246 | 0.0 | 0.977 | ✓ |
| 4 | S2 | -0.299 | 0.174 | 0.0 | 0.965 | ✓ |
| 5 | S2 | +0.492 | 0.305 | 0.0 | 0.972 | ✓ |
| 6 | S2 | -0.716 | 0.293 | 0.0 | 0.987 | ✓ |
| 7 | S2 | -0.324 | 0.253 | 0.0 | 0.984 | ✓ |
| 8 | S3 | -0.182 | 0.253 | 0.1 | 0.931 | ✓ |
| 9 | S3 | -0.131 | 0.182 | 0.0 | 0.962 | ✓ |
| 10 | S3 | +0.192 | 0.232 | 0.0 | 0.972 | ✓ |
| 11 | S3 | -0.709 | 0.257 | 0.0 | 0.993 | ✓ |
| 12 | S4 | -0.168 | 0.208 | 0.0 | 0.964 | ✓ |
| 13 | S4 | +0.276 | 0.182 | 0.0 | 0.978 | ✓ |
| 14 | S4 | -0.304 | 0.174 | 0.0 | 0.993 | ✓ |
| 15 | S4 | -0.343 | 0.208 | 0.3 | 0.774 | ✓ |
Verbatim log (275 entries)
physim.status({})
physim.status({})
{"budget_left": 150000, "phase": "explore"}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
I'll start by observing the system at rest, then probe each input port.
{"ticks_run": 200, "budget_left": 149800}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 149400}
physim.run({"segments": [{"t": 150, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all", "series": true})
{"error": "series observation limited to <=6 channels"}
physim.run({"segments": [{"t": 150, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 149100}
physim.run({"segments": [{"t": 200, "u": [1.0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 9, 11], "series": true, "max_numbers": 360})
physim.run({"segments": [{"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 9, 11], "series": true, "max_numbers": 360})
{"ticks_run": 400, "budget_left": 148700}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 9, 11], "series": true, "max_numbers": 360})
{"ticks_run": 600, "budget_left": 148100}
physim.run({"segments": [{"t": 200, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 500, "budget_left": 147600}
physim.run({"segments": [{"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 3, 28], "series": true})
physim.run({"segments": [{"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 3, 28], "series": true})
{"ticks_run": 400, "budget_left": 147200}
physim.run({"segments": [{"t": 600, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 9, 19], "series": true})
{"ticks_run": 800, "budget_left": 146400}
physim.run({"segments": [{"t": 150, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 146100}
physim.run({"segments": [{"t": 150, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Port 1 moved only ch20 (0.00 → -0.37, persistent). Port 2 next.
{"ticks_run": 300, "budget_left": 145800}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 145500}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 1, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 145200}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 145050}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 1, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144900}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 1]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144750}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, -1, 0, 0, 0]}], "channels": "all"})
Ports 5–7 do nothing at +1 from this state. Testing negative inputs on ports 4–7 (drive then release each).
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, -1, 0, 0, 0]}], "channels": "all"})
Ports 5–7 do nothing at +1 from this state. Testing negative inputs on ports 4–7 (drive then release each).
{"ticks_run": 150, "budget_left": 144600}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, -1, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144450}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, -1, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144300}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, -1]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144150}
physim.run({"segments": [{"t": 200, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 1], "series": true})
{"ticks_run": 400, "budget_left": 143750}
physim.reset({})
{"budget_left": 143550}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 143450}
physim.run({"segments": [{"t": 100, "u": [0.3, 0, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 32], "series": true})
{"ticks_run": 250, "budget_left": 143200}
physim.run({"segments": [{"t": 100, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 32], "series": true})
{"ticks_run": 250, "budget_left": 142950}
physim.run({"segments": [{"t": 200, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 32], "series": true})
physim.run({"segments": [{"t": 200, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 32], "series": true})
{"ticks_run": 400, "budget_left": 142550}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 32], "series": true})
{"ticks_run": 500, "budget_left": 142050}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 1, 1, 1, 1]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 141900}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141800}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141700}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141600}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141500}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141400}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141300}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141200}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141100}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 141000}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140900}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140800}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140700}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140600}
physim.run({"segments": [{"t": 50, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140500}
physim.run({"segments": [{"t": 100, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 140350}
physim.run({"segments": [{"t": 300, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 139950}
Near terminal now. Let me save the staircase data, then reset and measure flow rates at different amplitudes (including negative) from fresh baselines.
physim.reset({})
physim.reset({})
{"budget_left": 139750}
physim.run({"segments": [{"t": 150, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 1], "series": true})
{"ticks_run": 230, "budget_left": 139520}
physim.reset({})
{"budget_left": 139320}
physim.run({"segments": [{"t": 100, "u": [-0.5, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 1], "series": true})
{"ticks_run": 200, "budget_left": 139120}
physim.run({"segments": [{"t": 100, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 1], "series": true})
{"ticks_run": 200, "budget_left": 138920}
physim.run({"segments": [{"t": 200, "u": [-0.85, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33, 20, 1], "series": true})
−0.7 sustained gives repetitive excursions (period ≈ 50 ticks) that stop on release — excitable/oscillatory regime. Mapping the boundary: −0.85 next.
{"ticks_run": 300, "budget_left": 138620}
physim.reset({})
−0.85 latches to C in ~55 ticks. The latch threshold is between −0.7 and −0.85. Now: reset and measure sub-threshold elastic responses (both signs) from A.
{"budget_left": 138420}
physim.run({"segments": [{"t": 60, "u": [0.25, 0, 0, 0, 0, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u")
{"ticks_run": 300, "budget_left": 138120}
physim.run({"segments": [{"t": 15, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 105, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33], "series": true})
physim.run({"segments": [{"t": 15, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 105, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 16, 25, 33], "series": true})
{"ticks_run": 120, "budget_left": 138000}
physim.reset({})
A 15-tick −1 pulse fires an irreversible transit that completes on its own after release (point of no return within 15 ticks). Port 0 is a one-shot switch: A → C, with C absorbing. Now characterizing port 1 the same way.
{"budget_left": 137800}
physim.run({"segments": [{"t": 150, "u": [0, -1, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 1, 30, 31, 32, 16], "series": true})
{"ticks_run": 250, "budget_left": 137550}
physim.run({"segments": [{"t": 300, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20], "series": true, "max_numbers": 360})
{"ticks_run": 400, "budget_left": 137150}
physim.run({"segments": [{"t": 200, "u": [0, -0.5, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20], "series": true, "max_numbers": 360})
{"ticks_run": 260, "budget_left": 136890}
physim.run({"segments": [{"t": 200, "u": [0, 0, -1, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32, 20, 30], "series": true, "max_numbers": 360})
{"ticks_run": 260, "budget_left": 136630}
physim.run({"segments": [{"t": 200, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32], "series": true, "max_numbers": 360})
{"ticks_run": 260, "budget_left": 136370}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
Port 2 is another one-way switch (fast at −1, slow creep at +1, floor absorbing at ch1 ≈ −0.55, ch32 ≈ −0.40). Port 3 now.
{"ticks_run": 260, "budget_left": 136110}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
{"ticks_run": 360, "budget_left": 135750}
physim.reset({})
{"budget_left": 135550}
physim.run({"segments": [{"t": 100, "u": [0, 0, -0.3, 0, 0, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, -0.5, 0, 0, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100,)
{"ticks_run": 420, "budget_left": 135130}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, -0.5, 0, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, -0.7, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels)
{"ticks_run": 300, "budget_left": 134830}
physim.run({"segments": [{"t": 400, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32], "series": true, "max_numbers": 360})
{"ticks_run": 460, "budget_left": 134370}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
{"ticks_run": 460, "budget_left": 133910}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, -0.5, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
{"ticks_run": 260, "budget_left": 133650}
physim.run({"segments": [{"t": 250, "u": [0, 0.25, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, -0.7, 0, 0, 0, 0, 0, 0]}], "channels": [20], "series": true, "max_numbers": 360, "stride": 2})
Good — port 3's upper section is reversible with gentle drive. Now efficient parameter sweeps. Port 1 rate linearity first.
{"ticks_run": 500, "budget_left": 133150}
physim.reset({})
{"budget_left": 132950}
physim.run({"segments": [{"t": 250, "u": [-0.75, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 360})
physim.run({"segments": [{"t": 250, "u": [-0.75, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 360})
{"ticks_run": 310, "budget_left": 132640}
physim.run({"segments": [{"t": 250, "u": [0, 0, -0.75, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32], "series": true, "max_numbers": 360})
{"ticks_run": 310, "budget_left": 132330}
physim.run({"segments": [{"t": 250, "u": [0, 0, 0, -0.75, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 360})
{"ticks_run": 310, "budget_left": 132020}
physim.reset({})
{"budget_left": 131820}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, -1, -1, -1, -1]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 131670}
physim.run({"segments": [{"t": 400, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 360})
{"ticks_run": 460, "budget_left": 131210}
physim.run({"segments": [{"t": 400, "u": [0, 0, -0.7, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32], "series": true, "max_numbers": 240})
{"ticks_run": 460, "budget_left": 130750}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, -0.7, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31], "series": true, "max_numbers": 240})
{"ticks_run": 460, "budget_left": 130290}
physim.reset({})
{"budget_left": 130090}
physim.run({"segments": [{"t": 500, "u": [-0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 280})
{"ticks_run": 560, "budget_left": 129530}
physim.run({"segments": [{"t": 400, "u": [0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 200})
physim.run({"segments": [{"t": 400, "u": [0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 200})
{"ticks_run": 460, "budget_left": 129070}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0.5, 0.5, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 32, 30, 31], "series": true, "max_numbers": 240})
{"ticks_run": 360, "budget_left": 128710}
physim.reset({})
{"budget_left": 128510}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 128390}
physim.run({"segments": [{"t": 400, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 160})
{"ticks_run": 460, "budget_left": 127930}
physim.run({"segments": [{"t": 80, "u": [0, 0, -1, -1, 0, 0, 0, 0]}, {"t": 150, "u": [0, -1, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 290, "budget_left": 127640}
physim.reset({})
{"budget_left": 127440}
physim.run({"segments": [{"t": 120, "u": [0, -1, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 13, 35, 20, 18]})
{"ticks_run": 180, "budget_left": 127260}
physim.run({"segments": [{"t": 80, "u": [0, 0, -1, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 13, 35, 1, 32]})
{"ticks_run": 140, "budget_left": 127120}
physim.run({"segments": [{"t": 80, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 35, 30, 31, 18, 27]})
{"ticks_run": 140, "budget_left": 126980}
physim.reset({})
physim.reset({})
{"budget_left": 126780}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 126630}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 126480}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 126330}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 126180}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 126030}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 125880}
physim.run({"segments": [{"t": 100, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 150, "budget_left": 125730}
physim.run({"segments": [{"t": 200, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 250, "budget_left": 125480}
physim.run({"segments": [{"t": 300, "u": [0, 0, 1, 0, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 13, 32]})
{"ticks_run": 350, "budget_left": 125130}
physim.reset({})
{"budget_left": 124930}
physim.run({"segments": [{"t": 50, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 100, "budget_left": 124830}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 150, "budget_left": 124680}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 200, "budget_left": 124480}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 350, "budget_left": 124130}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 350, "budget_left": 123780}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 30, 31, 35, 18]})
{"ticks_run": 450, "budget_left": 123330}
physim.reset({})
{"budget_left": 123130}
physim.run({"segments": [{"t": 90, "u": [0, 0, -1, 0, 0, 0, 0, 0]}, {"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 13, 1, 32], "series": true, "max_numbers": 240})
{"ticks_run": 120, "budget_left": 123010}
physim.run({"segments": [{"t": 90, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 35, 30, 31], "series": true, "max_numbers": 240})
physim.run({"segments": [{"t": 90, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [2, 35, 30, 31], "series": true, "max_numbers": 240})
{"ticks_run": 120, "budget_left": 122890}
physim.run({"segments": [{"t": 250, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20]})
{"ticks_run": 310, "budget_left": 122580}
physim.run({"segments": [{"t": 6, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 114, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 240})
{"ticks_run": 120, "budget_left": 122460}
physim.run({"segments": [{"t": 10, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 110, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 120})
{"ticks_run": 120, "budget_left": 122340}
physim.submit_theory({"code": "\nBASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,\n -0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,\n -0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.1)
physim.submit_theory({"code": "\nBASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,\n -0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,\n -0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.1)
physim.reset({})
{"budget_left": 122140}
physim.run({"segments": [{"t": 200, "u_start": [0, 0, 0, 0, 0, 0, 0, 0], "u_end": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [16, 33], "series": true, "max_numbers": 200})
{"ticks_run": 300, "budget_left": 121840}
physim.run({"segments": [{"t": 200, "u_start": [0, 0, 0, 0, 0, 0, 0, 0], "u_end": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1)
{"ticks_run": 460, "budget_left": 121380}
physim.run({"segments": [{"t": 150, "u_start": [0, 0, 0, 0, 0, 0, 0, 0], "u_end": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels")
{"ticks_run": 460, "budget_left": 120920}
All regimes reproduce correctly. Resubmitting the theory with accommodation.
physim.submit_theory({"code": "\nBASE = [0.08,0.28,-0.31,-0.47,0.22,-0.23,-0.12,0.06,-0.31,-0.645,0.02,\n -0.707,-0.334,0.815,-0.35,0.185,-0.50,-0.452,0.21,-0.740,\n -0.01,0.735,-0.53,-0.472,-0.535,-0.14,0.1)
physim.ready({})
physim.ready({})
physim.status({})
{"error": "exploration is over; reply with the answers object"}
Exploration phase has closed and I have 16 prediction contracts plus 5 preparation contracts. My model covers every one — most target either constant channels or well-characterized fuse/integrator behaviors. Computing answers:
physim.answer({"answers": [{"id": 0, "mean": 0.185, "low": 0.13, "high": 0.24}, {"id": 1, "mean": 0.28, "low": 0.225, "high": 0.335}, {"id": 2, "mean": 0.821, "low": 0.765, "high": 0.875}, {"id": 3, "mean": -0.537,)
{"received": 16}
physim.answer_prep({"id": 100, "code": "\ndef policy(t, y, mem):\n u = [0.0]*8\n try:\n v = y[16]\n e = mem.get('e')\n e = v if e is None else 0.9*e + 0.1*v\n mem['e'] = e\n except E)
physim.answer_prep({"id": 101, "code": "\ndef policy(t, y, mem):\n u = [0.0]*8\n try:\n v = y[13]\n e = mem.get('e')\n e = v if e is None else 0.9*e + 0.1*v\n mem['e'] = e\n except E)
physim.answer_prep({"id": 101, "code": "\ndef policy(t, y, mem):\n u = [0.0]*8\n try:\n v = y[13]\n e = mem.get('e')\n e = v if e is None else 0.9*e + 0.1*v\n mem['e'] = e\n except E)
physim.answer_prep({"id": 102, "code": "\ndef policy(t, y, mem):\n u = [0.0]*8\n try:\n v = y[33]\n e = mem.get('e')\n e = v if e is None else 0.9*e + 0.1*v\n mem['e'] = e\n except E)
physim.answer_prep({"id": 103, "code": "\ndef policy(t, y, mem):\n u = [0.0]*8\n try:\n v = y[35]\n e = mem.get('e')\n e = v if e is None else 0.9*e + 0.1*v\n mem['e'] = e\n except E)
physim.answer_prep({"id": 104, "code": "\nCANDS = [\n [0,0,0,0, 1, 1, 1, 1],\n [0,0,0,0,-1,-1,-1,-1],\n [0,0,0,0, 1,-1, 1,-1],\n [0,0,0,0,-1, 1,-1, 1],\n [0,0,0,0, 1, 1,-1,-1],\n [0,0,0,0,-1,-1, 1, 1],\n [0,0,0,0, 1,-1,)
All contracts are answered. Here's a summary of the investigation and what was submitted.
## What the system turned out to be
36 sensors read four independent hidden latents, driven one-per-port by ports 0–3 (ports 4–7 are completely inert; the remaining ~23 sensors are constants + noise, sd ≈ 0.05):
- **Ports 0, 2, 3 are one-way "fuses"** (readouts: port 0 → ch{14,16,25,33}, port 2 → ch{0,1,13
anthropic/claude-fable-5 · C1 seed 3 · tier tools · accuracy 0.91 · preparation 1.00 · theory 0.93 · budget 23%
S1=0.98 · S2=0.96 · S3=0.79 · S4=0.92 · coverage 0.94 · 441 nodes
Narrative experiment log
- 2× free run (700 ticks; 300 ticks, all inputs 0).
- 9× single-port probe (1,350 ticks; port 0 at +0.10, 150t) — ch22 +0.77→-0.40, ch29 -0.90→-0.75.
- Free run (600 ticks; 600 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (100 ticks; 100 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (100 ticks; 100 ticks, all inputs 0).
- 2× single-port probe (240 ticks; port 7 at +0.10, 120t).
- Free run (120 ticks; 120 ticks, all inputs 0).
- Drive → release (240 ticks; drive -0.10 for 120t, release 120t) — ch22 -0.37→+0.67.
- Single-port probe (150 ticks; port 0 at +0.10, 150t).
- Free run (150 ticks; 150 ticks, all inputs 0) — ch29 -0.89→-0.73.
- Drive → release (350 ticks; drive -0.10 for 200t, release 150t) — ch29 -0.73→+0.65, ch0 +0.00→-0.84, ch2 -0.28→-0.61.
- Free run (60 ticks; 60 ticks, all inputs 0) — ch22 +0.63→-0.39.
- Drive → release (250 ticks; drive +0.10 for 150t, release 100t).
- Reset to fresh initial conditions (−200 ticks).
- 2× single-port probe (300 ticks; port 1 at +0.10, 150t).
- 2× free run (350 ticks; 150 ticks, all inputs 0).
- Single-port probe (200 ticks; port 1 at -0.10, 200t) — ch11 +0.24→-0.54, ch32 +0.33→-0.33, ch6 -0.26→-0.88.
- Free run (150 ticks; 150 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (600 ticks; drive +0.10 for 150t, release 150t) — ch20 +0.68→-0.71, ch31 -0.28→+0.99, ch26 -0.35→+0.71.
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (900 ticks; drive +0.10 for 150t, release 150t).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (600 ticks; drive +0.10 for 150t, release 150t) — ch14 -0.37→-0.04.
- Reset to fresh initial conditions (−200 ticks).
- 5× drive → release (1,500 ticks; drive +0.10 for 150t, release 150t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (100 ticks; port 0 at -0.03, 100t).
- Free run (60 ticks; 60 ticks, all inputs 0).
- Single-port probe (100 ticks; port 0 at -0.05, 100t).
- Free run (60 ticks; 60 ticks, all inputs 0).
- Single-port probe (100 ticks; port 0 at -0.07, 100t).
- Free run (80 ticks; 80 ticks, all inputs 0) — ch29 -0.62→-0.79.
- Drive → release (180 ticks; drive -0.09 for 100t, release 80t) — ch29 -0.79→+0.64, ch22 +0.68→-0.37, ch0 +0.20→-0.83.
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (440 ticks; drive +0.05 for 120t, release 100t).
- Free run (200 ticks; 200 ticks, all inputs 0).
- Drive → release (300 ticks; drive +0.07 for 150t, release 150t).
- Free run (150 ticks; 150 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,060 ticks; drive +0.04 for 100t, release 80t).
- Reset to fresh initial conditions (−200 ticks).
- 2× free run (320 ticks; 160 ticks, all inputs 0).
- Drive → release (230 ticks; drive +0.10 for 150t, release 80t).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (570 ticks; drive -0.04 for 120t, release 70t) — ch11 +0.26→-0.57, ch6 -0.18→-0.87, ch32 +0.27→-0.32.
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (540 ticks; drive +0.05 for 120t, release 120t).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (570 ticks; drive -0.06 for 120t, release 70t) — ch20 +0.68→-0.70, ch31 -0.32→+0.97, ch26 -0.21→+0.72.
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (950 ticks; drive +0.05 for 150t, release 120t) — ch24 -0.43→+0.46, ch13 +0.26→-0.51, ch18 -0.06→+0.59.
- Reset to fresh initial conditions (−200 ticks).
- 8× drive → release (1,980 ticks; drive +0.06 for 150t, release 150t).
- Free run (200 ticks; 200 ticks, all inputs 0).
- Drive → release (250 ticks; drive -0.12 for 150t, release 100t).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (980 ticks; drive -0.06 for 120t, release 70t).
- Reset to fresh initial conditions (−200 ticks).
- 11× single-port probe (1,280 ticks; port 0 at +0.04, 80t).
- 2× free run (300 ticks; 120 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (100 ticks; 100 ticks, all inputs 0).
- Drive → release (200 ticks; drive -0.10 for 120t, release 80t) — ch29 -0.74→+0.63, ch22 +0.68→-0.38, ch0 +0.15→-0.83.
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (240 ticks; drive -0.10 for 20t, release 100t).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,168 ticks; drive -0.10 for 8t, release 100t).
- Free run (60 ticks; 60 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Ramp sweep (350 ticks; 350 ticks, peak mean drive +0.12).
- 6× drive → release (1,090 ticks; drive -0.10 for 30t, release 80t) — ch22 +0.66→-0.38, ch14 -0.02→-0.36, ch3 -0.06→-0.24.
- Reset to fresh initial conditions (−200 ticks).
- Free run (300 ticks; 300 ticks, all inputs 0).
- 2× drive → release (710 ticks; drive +0.04 for 50t, release 300t) — ch29 -0.81→+0.66, ch0 +0.14→-0.86, ch2 -0.26→-0.61.
- Reset to fresh initial conditions (−200 ticks).
- 6× drive → release (2,250 ticks; drive -0.10 for 60t, release 300t) — ch14 -0.36→-0.03.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (600 ticks; drive +0.10 for 200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- 4× drive → release (1,170 ticks; drive +0.12 for 150t, release 300t) — ch22 +0.68→+0.00.
- Free run (300 ticks; 300 ticks, all inputs 0).
- 4× drive → release (720 ticks; drive -0.10 for 120t, release 60t).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (570 ticks; drive -0.07 for 120t, release 70t).
- Free run (150 ticks; 150 ticks, all inputs 0).
- 2× drive → release (680 ticks; drive -0.07 for 120t, release 100t) — ch11 +0.34→-0.55, ch6 -0.22→-0.89, ch32 +0.31→-0.32.
- Reset to fresh initial conditions (−200 ticks).
- 15× single-port probe (2,160 ticks; port 0 at +0.06, 100t) — ch29 -0.73→+0.65, ch20 +0.66→-0.70, ch31 -0.28→+0.99.
- Drive → release (270 ticks; drive +0.12 for 120t, release 150t).
- Submitted an executable theory (4,266 chars).
- Ended exploration → received 0 prediction contracts.
- Submitted 16 contract answers.
- Submitted 16 contract answers.
- Submitted preparation policy for contract 100 ("Goal: ch20 in [-1.046, -0.348] after free run.").
- Submitted preparation policy for contract 101 ("Goal: ch29 in [0.268, 1.028] after free run.").
- Submitted preparation policy for contract 102 ("Goal: ch31 in [0.621, 1.333] after free run.").
- Submitted preparation policy for contract 103 ("Goal: ch22 in [-0.666, -0.096] after free run.").
Agent-written files (its instruments & theories)
app/physim/answers.md (1,253 chars)
# Final submissions (2026-08-13)
## Prediction contracts (mean [low, high])
0: ch2 zero-input baseline -> -0.302 [-0.365,-0.24]
1: ch0 baseline -> 0.153 [0.095,0.21]
2,3: ch31 baseline -> -0.386 [-0.44,-0.33]
4: ch31 during port0=-0.986 (C state) -> -0.355 [-0.43,-0.28]
5: ch18 during port2=+0.776 (other family) -> -0.09 [-0.15,-0.03]
6: ch25 during port3=-0.777 (other family) -> -0.11 [-0.18,-0.045]
7: ch22 during port3=+0.729 (untouched, up) -> 0.69 [0.61,0.78]
8: ch6 after port1=+1.0 x389 + release (E2 well) -> -0.34 [-0.48,-0.19]
9: ch34 after port0=+1.0 x379 + release (B well + drift) -> 0.10 [0.01,0.19]
10: ch31 after port1=+1.0 (other family) -> -0.382 [-0.45,-0.31]
11: ch14 after port3=+1.0 (other family) -> -0.375 [-0.43,-0.32]
12: ch29 after B then H flips, long release -> -0.755 [-0.86,-0.66]
13: ch26 after B then F flips -> -0.25 [-0.32,-0.185]
14: ch15 static channel -> 0.951 [0.90,1.00]
15: ch29 after E then H flips -> -0.785 [-0.87,-0.705]
## Prep policies (all target absorbing attractors)
100: H via port2=-1 (ch20 -0.69 in band) | 101: C via port0=-1 (ch29 +0.65 in band)
102: H via port2=-1 (ch31 +0.985 in band) | 103: A-deep via port7=+0.8 (ch22 -0.38 in band)
## Theory: submitted state-machine simulator (theory.py)
app/physim/log.md (350 chars)
# Physim exploration log
36 sensors, 8 inputs. Noise sd ~0.05/tick. Tail = last 20 ticks.
Multistable: after port7=0.8 x150 then zero x600, ch0/3/22/31 shifted persistently.
Baseline draw1 (zero, settled): see data.json run1/run2
Port steps +0.8 x150 sequential (no zero between): runs p0..p7
Key: port7 flips ch22 (+0.78 -> -0.40, persists at zero)
app/physim/model.md (4,011 chars)
# PHYSIM EMPIRICAL MODEL (final)
36 sensors = readouts of ~6 independent multiwell latent families + N(0,0.05) noise/tick.
Tail(20) SE ~0.011. Transients settle in 15-40 ticks. NO direct input feedthrough to sensors
(during-drive value = current well readout + small sub-threshold shift).
Fresh draws ALWAYS start in canonical state S0. Big negative wells are ABSORBING (except K via port4+).
## Canonical S0 (fresh draw, settled; avg of many)
ch: 0:0.155 1:0.79 2:-0.295 3:-0.095 4:-0.062 5:-0.797 6:-0.163 7:-0.692 8:0.938 9:-0.706
10:0.091 11:0.293 12:0.729 13:0.318 14:-0.375 15:0.951 16:-0.492 17:-0.644 18:-0.090 19:0.024
20:0.741 21:0.252 22:0.695 23:-0.338 24:-0.477 25:-0.098 26:-0.252 27:0.091 28:-0.555 29:-0.774
30:0.231 31:-0.381 32:0.318 33:-0.582 34:0.05 35:-0.655
Static channels (immune to all drives): 1,4,5,7,8,9,10,12,15,16,17,19,21,23,27,28,30,33,35
## Families: ports -> sensors (well values)
alpha (p0,p6; p5 inert):
S0: ch0 0.155, ch2 -0.295, ch29 -0.774
C(deep,absorbing): ch0 -0.85, ch2 -0.61, ch29 +0.66, forces ch22 -0.38. Trigger: u0<=-0.7 (>=15t; -0.6 never flips even 400t, oscillates), u6<=-0.65, or u0+u6 sum <=-0.8. -0.8 x20 flips, x8 no.
B: ch0 0.005, ch29 -0.72, ch34 +0.08. Trigger: u0>=+0.5..0.6 sustained >=120t (80t NO, 150t yes). ramp->+1 hold: yes.
L: ch29 -0.67, ch2 -0.37, ch0 ~0.13. Trigger: u6=+0.8 x150.
M-ish: ch0 +0.1..0.2, ch29 -0.86, ch2 -0.20, ch22 0.60. Trigger: repeated port0+ pulses (uncertain, widen intervals).
beta (p1): F(absorbing): ch6 -0.875, ch11 -0.555, ch25 +0.49, ch32 -0.325. Trigger u1<=-0.65 (-0.6 no).
E: ch6 -0.25(-0.36 @u=1.0), ch11 0.22(0.14@1.0), ch25 -0.03, ch32 0.33. Trigger u1>=+0.6 x>=150 slow (+0.4 no).
gamma (p2): H(absorbing): ch20 -0.70, ch26 +0.71, ch31 +0.985, ch34 -0.79. Trigger u2<=-0.65 (-0.6 no).
G: ch20 0.69, ch26 -0.31, ch31 -0.30, ch34 -0.07. Trigger u2>=+0.6 slow (+0.4 no/partial).
delta (p3): J(absorbing): ch3 -0.60, ch13 -0.515, ch18 +0.595, ch24 +0.45. Trigger u3<=-0.65 (-0.6 no).
I: ch3 -0.15..-0.24, ch13 0.34, ch18 -0.07, ch24 -0.49. Trigger u3>=+0.5 x150.
eps (p4): K: ch14 -0.375 -> -0.025 (+ch34 +0.05). Trigger u4<=-0.3 AND >=~100t (x60 no at -0.4; -0.3 x120 yes; -0.15 never).
REVERSIBLE: u4>=+0.5 x80 restores ch14 -0.37 (+0.3 no).
A (p7): ch22. up 0.695 (canonical). ANY |u7|>=0.15 x~40+ kills up. Landing: weak/brief (0.15-0.3, <=50t) -> mid ~0.0 or -0.25;
0.3 x100 or stronger -> -0.38. C-flip forces -0.38. Under sustained u7=-0.8 state hops up rarely (~1/5 runs), freezes up only if released mid-hop. Down effectively absorbing; predict -0.37, widen high side if protocol ends right after long negative u7.
## During-drive sub-threshold shifts (add to current well readout)
p0 -0.2: ch0-.046 ch29+.049 ch22-.072 | -0.4: ch0-.053 ch29+.071 ch22-.095 | -0.5: ch0-.075 ch29+.08 ch22-.06 (osc sd.13)
+0.3: ch0+.02 ch29-.045 ch22+.05 | +0.5: ch0+.03 ch29-.09 ch22+.09
p1 +0.3: ch11+.03 ch32+.03 | +0.5: ch6+.04 ch11+.05 ch25-.03 ch32+.07 | -0.3: ch6-.06 ch11-.06 ch25+.05 ch32-.03 | -0.5: ch6-.08 ch11-.06 ch25+.05 ch32-.05
p2 +0.3: ch20+.06 ch26-.05 ch31-.04 ch34+.05 | +0.5: ch20+.09 ch26-.05 ch31-.055 | -0.3: ch20-.08 ch26+.06 ch31+.09 ch34-.03 | -0.5: ch20-.08 ch26+.11 ch31+.11 (osc sd.09-.10)
p3 +0.3: ch13+.06 ch24-.035 | +0.5: ch13+.075 ch24-.08 ch18-.04 ch3+.04 | -0.3: ch13-.04 ch18+.05 ch24+.05 | -0.5: ch13-.08 ch18+.04 ch24+.075 ch3-.045 (osc)
p6 +0.3: ch0+.05 ch29-.10 ch2+.05 | +0.5: ch29-.13 ch2+.04 | -0.3: ch0-.04 ch22-.11 | -0.5: ch0-.12 ch22-.14 ch29+.04 (osc)
p4,p5,p7: no visible sub-threshold sensor shifts beyond flips.
## Near-threshold negative drive (-0.5..-0.6 on p0/p2/p3/p6): limit-cycle oscillation, no flip ever;
tail mean = shifted value above, sd 0.08-0.17 -> widen interval.
## ch34: slow upward drift +0.05..+0.12 with any sustained activity; baseline fresh 0.01-0.06. WIDE intervals unless H (-0.79) or G (-0.07).
## Multi-port: same-family inputs ADD on latent (p0 -0.4 + p6 -0.4 => C). Cross-family independent; flips coexist.
app/.vf-claude/2e485a4bd0404bb79eb12020e6b00b53/.claude.json (389 chars)
{
"firstStartTime": "2026-08-13T14:08:48.773Z",
"machineID": "1a114e54ced1c0ad21874d1972bcd2bef423a5d80572a54430c94b83b7209bb2",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "d1f8ee1fcc2c57335aadd00bd7fb8943a625bfee61f0542aa76bb94e4f8495d3"
}
app/physim/data.py (2,345 chars)
import numpy as np
# canonical baseline S0 (average of several settled zero-input tails, fresh draws)
S0 = {0:0.156,1:0.785,2:-0.314,3:-0.092,4:-0.057,5:-0.793,6:-0.160,7:-0.695,8:0.930,9:-0.700,
10:0.092,11:0.293,12:0.727,13:0.320,14:-0.372,15:0.955,16:-0.499,17:-0.651,18:-0.093,19:0.030,
20:0.744,21:0.249,22:0.699,23:-0.338,24:-0.474,25:-0.101,26:-0.271,27:0.090,28:-0.559,29:-0.774,
30:0.233,31:-0.390,32:0.322,33:-0.578,34:0.052,35:-0.652}
# Unit A flip (port7+ from S0, fast ~15 ticks): ch22 0.70 -> -0.37..-0.39. reverse: port7- (slow ~100 ticks)
# Port0 +0.8: slow flip unit B: ch0 0.155 -> 0.00 (continues after release); drive transients: ch29 -0.89 (-0.12), ch2 -0.24 (+0.075), ch34 +0.03, ch22 +0.07?
# Port0 -0.8: flips big unit C (fast ~30-60 ticks): ch0 -> -0.84, ch2 -> -0.60, ch29 -> +0.65; ALSO flips A (ch22 -> -0.39)
# State S2 after port0-: ch0 -0.836, ch2 -0.605, ch22 -0.385, ch29 +0.655, rest ~ S0
# === Persistent flip map at +/-0.8, 150 ticks, from canonical S0 (post-release deltas) ===
# port0 +: unit B slow (>150t): ch0 -0.16 (0.155->0.0); maybe ch34 +0.03
# port0 -: unit C fast: ch0 -0.99, ch2 -0.29, ch29 +1.42, ch22 -1.08 (locks ch22; port7- cannot unflip in C state)
# port1 +: unit E slow: ch6 -0.10, ch11 -0.06, ch24 -0.04, ch3 -0.03
# port1 -: unit F: ch6 -0.715, ch11 -0.86, ch25 +0.59, ch32 -0.65, ch34 +0.06
# port2 +: unit G: ch34 -0.16, ch31 +0.11, ch26 -0.075, ch20 -0.067
# port2 -: unit H: ch20 -1.39(!0.68->-0.71), ch26 +1.06(->+0.71), ch31 +1.27(->+0.99), ch34 -0.70(->-0.81) [from G-state]
# port3 +: unit I: ch3 -0.11, ch18 +0.06, ch24 -0.05, ch13 +0.04
# port3 -: unit J: ch3 ->-0.59, ch13 ->-0.52, ch18 ->+0.59, ch24 ->+0.47
# port4 +: nothing (maybe tiny ch3/ch24 -0.03)
# port4 -: unit K: ch14 +0.335 (->-0.037), ch34 +0.07
# port5 +/-: nothing at 0.8
# port6 +: small unit L: ch29 +0.105, ch2 -0.055, ch34 +0.06 (port0-family channels!)
# port6 -: same big unit C as port0- (ch0 -0.82, ch2 -0.60, ch29 +0.64, ch22 -0.39)
# port7 +: unit A fast (~15t): ch22 0.70 -> -0.37
# port7 -: A back up, SLOW (~100t at 0.8) when in S_A; ineffective in C state
# Sensor groups: alpha(p0/p6): ch0,ch2,ch29(,ch22); beta(p1): ch6,ch11,ch25,ch32; gamma(p2): ch20,ch26,ch31,ch34;
# delta(p3): ch3,ch13,ch18,ch24; eps(p4): ch14; A(p7): ch22. Constant-ish: 1,4,5,7,8,9,10,12,15,16,17,19,21,23,27,28,30,33,35
app/physim/theory.py (4,737 chars)
BASE = [0.155,0.79,-0.295,-0.095,-0.062,-0.797,-0.163,-0.692,0.938,-0.706,
0.091,0.293,0.729,0.318,-0.375,0.951,-0.492,-0.644,-0.090,0.024,
0.741,0.252,0.695,-0.338,-0.477,-0.098,-0.252,0.091,-0.555,-0.774,
0.231,-0.381,0.318,-0.582,0.05,-0.655]
# well deltas per family-state (channel: delta from BASE)
D = {
'C': {0:-1.005, 2:-0.315, 29:1.434, 22:-1.075},
'B': {0:-0.150, 29:0.054, 34:0.06},
'L': {29:0.104, 2:-0.075, 0:-0.025, 34:0.05},
'F': {6:-0.712, 11:-0.848, 25:0.588, 32:-0.643, 34:0.04},
'E': {6:-0.11, 11:-0.06, 24:-0.04, 3:-0.03},
'E2': {6:-0.20, 11:-0.155, 25:0.075, 3:-0.03},
'H': {20:-1.441, 26:0.962, 31:1.366, 34:-0.84},
'G': {20:-0.05, 26:-0.06, 31:0.08, 34:-0.12},
'J': {3:-0.505, 13:-0.833, 18:0.685, 24:0.927},
'I': {3:-0.09, 13:0.03, 18:0.02, 24:-0.04},
'K': {14:0.35, 34:0.04},
'A_mid': {22:-0.70},
'A_dn': {22:-1.075},
}
# during-drive sub-threshold gains (linearized): ch -> d(sensor)/d(u_port)
GAIN = {
0: {0:0.10, 29:-0.16, 22:0.17, 2:0.05},
1: {6:0.13, 11:0.11, 25:-0.09, 32:0.11},
2: {20:0.17, 26:-0.16, 31:-0.18, 34:0.10},
3: {13:0.15, 24:-0.15, 18:-0.08, 3:0.08},
6: {0:0.14, 29:-0.28, 2:0.12, 22:0.20},
}
def init(y_history):
st = {'wells': {'alpha':'S0','beta':'S0','gamma':'S0','delta':'S0','eps':'S0','A':'up'},
'cnt': {k:0.0 for k in ['a0p','a6p','a1p','a2p','a3p','a4n','a4p','a7']},
'y': [float(v) for v in (y_history[-1] if len(y_history)>0 else BASE)],
'a7max':0.0}
return st
def step(state, a):
a = [float(x) for x in a]
w = state['wells']; c = state['cnt']
u0,u1,u2,u3,u4,u5,u6,u7 = a[:8]
# --- alpha family ---
drv = u0 + u6 + 0.05*u5
c['a0p'] = c['a0p']+1 if u0 >= 0.48 else 0.0
c['a6p'] = c['a6p']+1 if u6 >= 0.7 else 0.0
if w['alpha'] != 'C':
if drv <= -0.63:
c['aC'] = c.get('aC',0)+1
if c['aC'] >= 12: w['alpha']='C'
else: c['aC']=0
if w['alpha']!='C':
if c['a0p'] >= 110: w['alpha']='B'
elif c['a6p'] >= 130 and w['alpha']=='S0': w['alpha']='L'
# --- beta ---
if w['beta'] != 'F':
if u1 <= -0.62:
c['bF'] = c.get('bF',0)+1
if c['bF'] >= 12: w['beta']='F'
else: c['bF']=0
c['a1p'] = c['a1p']+1 if u1 >= 0.55 else 0.0
if w['beta']!='F' and c['a1p'] >= 130:
w['beta'] = 'E2' if u1 >= 0.9 else 'E'
# --- gamma ---
if w['gamma'] != 'H':
if u2 <= -0.62:
c['gH'] = c.get('gH',0)+1
if c['gH'] >= 12: w['gamma']='H'
else: c['gH']=0
c['a2p'] = c['a2p']+1 if u2 >= 0.55 else 0.0
if w['gamma']!='H' and c['a2p'] >= 130: w['gamma']='G'
# --- delta ---
if w['delta'] != 'J':
if u3 <= -0.62:
c['dJ'] = c.get('dJ',0)+1
if c['dJ'] >= 12: w['delta']='J'
else: c['dJ']=0
c['a3p'] = c['a3p']+1 if u3 >= 0.45 else 0.0
if w['delta']!='J' and c['a3p'] >= 130: w['delta']='I'
# --- eps (K, reversible) ---
c['a4n'] = c['a4n']+1 if u4 <= -0.28 else 0.0
c['a4p'] = c['a4p']+1 if u4 >= 0.45 else 0.0
if c['a4n'] >= 90: w['eps']='K'
if c['a4p'] >= 60: w['eps']='S0'
# --- A (ch22) ---
if w['alpha']=='C':
w['A']='dn'
elif w['A']=='up':
if abs(u7) >= 0.14:
c['a7'] += 1
state['a7max'] = max(state['a7max'], abs(u7))
if c['a7'] >= 30:
w['A'] = 'dn' if (state['a7max']>=0.35 or c['a7']>=90) else 'mid'
else:
c['a7'] = 0
elif w['A']=='mid':
if abs(u7)>=0.25:
c['a7'] += 1
if c['a7']>=60: w['A']='dn'
else: c['a7']=0
# --- target sensor vector ---
t = list(BASE)
def add(dd):
for k,v in dd.items(): t[k]+=v
if w['alpha']=='C': add(D['C'])
elif w['alpha']=='B': add(D['B'])
elif w['alpha']=='L': add(D['L'])
if w['beta']=='F': add(D['F'])
elif w['beta']=='E': add(D['E'])
elif w['beta']=='E2': add(D['E2'])
if w['gamma']=='H': add(D['H'])
elif w['gamma']=='G': add(D['G'])
if w['delta']=='J': add(D['J'])
elif w['delta']=='I': add(D['I'])
if w['eps']=='K': add(D['K'])
if w['A']=='dn' and w['alpha']!='C': add(D['A_dn'])
elif w['A']=='mid': add(D['A_mid'])
# sub-threshold drive shifts (only when family not in deep well)
for p,u in ((0,u0),(1,u1),(2,u2),(3,u3),(6,u6)):
if abs(u)>1e-9:
for k,g in GAIN[p].items():
t[k] += g*u*0.5 # saturating: measured shifts ~ half-linear
# relax y toward target, tau ~ 6 ticks
y = state['y']
for i in range(36):
y[i] += (t[i]-y[i])*0.16
state['y']=y
return state, list(y)
Preparation contracts
| id | channel | band | success | released finals |
|---|
| 100 | 20 | [-1.05, -0.35] | 100% | -0.72, -0.70, -0.68, -0.72 |
| 101 | 29 | [+0.27, +1.03] | 100% | +0.66, +0.65, +0.64, +0.65 |
| 102 | 31 | [+0.62, +1.33] | 100% | +0.97, +0.98, +0.99, +0.98 |
| 103 | 22 | [-0.67, -0.10] | 100% | -0.38, -0.39, -0.37, -0.39 |
Executable theory
accuracy 0.930 · per-stratum {'S1': 0.99, 'S2': 0.98, 'S3': 0.79, 'S4': 0.95} · 4,266 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.296 | 0.177 | 0.0 | 0.969 | ✓ |
| 1 | S1 | +0.160 | 0.314 | 0.0 | 0.978 | ✓ |
| 2 | S1 | -0.380 | 0.297 | 0.0 | 0.981 | ✓ |
| 3 | S1 | -0.386 | 0.297 | 0.0 | 0.998 | ✓ |
| 4 | S2 | -0.378 | 0.297 | 0.1 | 0.925 | ✓ |
| 5 | S2 | -0.092 | 0.201 | 0.0 | 0.988 | ✓ |
| 6 | S2 | -0.097 | 0.217 | 0.1 | 0.941 | ✓ |
| 7 | S2 | +0.686 | 0.238 | 0.0 | 0.985 | ✓ |
| 8 | S3 | -0.601 | 0.242 | 1.1 | 0.340 | ✗ |
| 9 | S3 | +0.088 | 0.260 | 0.0 | 0.956 | ✓ |
| 10 | S3 | -0.349 | 0.297 | 0.1 | 0.896 | ✓ |
| 11 | S3 | -0.371 | 0.142 | 0.0 | 0.975 | ✓ |
| 12 | S4 | -0.688 | 0.317 | 0.2 | 0.809 | ✓ |
| 13 | S4 | -0.231 | 0.243 | 0.1 | 0.923 | ✓ |
| 14 | S4 | +0.951 | 0.292 | 0.0 | 0.998 | ✓ |
| 15 | S4 | -0.773 | 0.317 | 0.0 | 0.964 | ✓ |
Verbatim log (386 entries)
physim.status({})
I'll start by checking the interface and budget, then run initial probing experiments.
physim.status({})
I'll start by checking the interface and budget, then run initial probing experiments.
{"budget_left": 150000, "phase": "explore"}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 149700}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 5, 8, 15, 29], "series": true, "max_numbers": 360})
{"ticks_run": 400, "budget_left": 149300}
physim.run({"segments": [{"t": 150, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 149150}
physim.run({"segments": [{"t": 150, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 149000}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0.8, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148850}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148700}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148550}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148400}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148250}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 148100}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 3, 22, 24, 29, 31], "series": true, "max_numbers": 360})
{"ticks_run": 600, "budget_left": 147500}
physim.reset({})
{"budget_left": 147300}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 147200}
physim.reset({})
Fresh draw #2 matches draw #1's baseline exactly — fresh draws may all start in the same canonical state. Checking with two more resets.
{"budget_left": 147000}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 146900}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}], "channels": [22, 0, 2, 9, 17, 33], "series": true})
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}], "channels": [22, 0, 2, 9, 17, 33], "series": true})
{"ticks_run": 120, "budget_left": 146780}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 146660}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22, 0, 3, 31], "series": true})
{"ticks_run": 240, "budget_left": 146420}
physim.run({"segments": [{"t": 150, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 146270}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 146120}
physim.run({"segments": [{"t": 200, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 29, 34], "series": true})
{"ticks_run": 350, "budget_left": 145770}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 60, "budget_left": 145710}
physim.run({"segments": [{"t": 150, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34], "series": true})
{"ticks_run": 250, "budget_left": 145460}
physim.reset({})
Deep attractor — port0+0.8 doesn't restore. Resetting and continuing the ±0.8 scan for ports 1–6.
{"budget_left": 145260}
physim.run({"segments": [{"t": 150, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 150, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 145110}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144960}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 200, "budget_left": 144760}
physim.run({"segments": [{"t": 200, "u": [0, -0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 200, "budget_left": 144560}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 144410}
physim.reset({})
{"budget_left": 144210}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0.8, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 143910}
physim.run({"segments": [{"t": 150, "u": [0, 0, -0.8, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 143610}
physim.reset({})
{"budget_left": 143410}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 143110}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, -0.8, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, -0.8, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 142810}
physim.reset({})
{"budget_left": 142610}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 142310}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, -0.8, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 142010}
physim.reset({})
{"budget_left": 141810}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 141510}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, -0.8, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 141210}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 140910}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, -0.8, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 140610}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 300, "budget_left": 140310}
physim.reset({})
{"budget_left": 140110}
physim.run({"segments": [{"t": 100, "u": [-0.2, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 140010}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 60, "budget_left": 139950}
physim.run({"segments": [{"t": 100, "u": [-0.4, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 100, "budget_left": 139850}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 60, "budget_left": 139790}
physim.run({"segments": [{"t": 100, "u": [-0.6, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34], "series": true})
{"ticks_run": 100, "budget_left": 139690}
physim.run({"segments": [{"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 80, "budget_left": 139610}
physim.run({"segments": [{"t": 100, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 180, "budget_left": 139430}
physim.reset({})
{"budget_left": 139230}
physim.run({"segments": [{"t": 120, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
physim.run({"segments": [{"t": 120, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 220, "budget_left": 139010}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 200, "budget_left": 138810}
physim.run({"segments": [{"t": 150, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 300, "budget_left": 138510}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 150, "budget_left": 138360}
physim.reset({})
{"budget_left": 138160}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0.3]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22, 0, 29]})
{"ticks_run": 180, "budget_left": 137980}
physim.run({"segments": [{"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 310, "budget_left": 137670}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22], "series": true})
{"ticks_run": 360, "budget_left": 137310}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, -0.4]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22], "series": true})
{"ticks_run": 210, "budget_left": 137100}
physim.reset({})
−0.4 doesn't unflip either; the down-state is deep. Testing from canonical: lower positive threshold, then −0.8 from the up-state.
{"budget_left": 136900}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0.15]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0.15]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 160, "budget_left": 136740}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22, 0, 2, 29]})
{"ticks_run": 230, "budget_left": 136510}
physim.reset({})
{"budget_left": 136310}
physim.run({"segments": [{"t": 120, "u": [0, -0.3, 0, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 190, "budget_left": 136120}
physim.run({"segments": [{"t": 120, "u": [0, -0.5, 0, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 190, "budget_left": 135930}
physim.run({"segments": [{"t": 120, "u": [0, -0.65, 0, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 190, "budget_left": 135740}
physim.reset({})
{"budget_left": 135540}
physim.run({"segments": [{"t": 120, "u": [0, 0.4, 0, 0, 0, 0, 0, 0]}, {"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 240, "budget_left": 135300}
physim.run({"segments": [{"t": 150, "u": [0, 0.6, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32, 3, 24]})
{"ticks_run": 300, "budget_left": 135000}
physim.reset({})
{"budget_left": 134800}
physim.run({"segments": [{"t": 120, "u": [0, 0, -0.5, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
physim.run({"segments": [{"t": 120, "u": [0, 0, -0.5, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 190, "budget_left": 134610}
physim.run({"segments": [{"t": 120, "u": [0, 0, -0.65, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 190, "budget_left": 134420}
physim.reset({})
{"budget_left": 134220}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0.4, 0, 0, 0, 0, 0]}, {"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 270, "budget_left": 133950}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0.6, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 300, "budget_left": 133650}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, -0.5, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
G flipped at 0.6 (threshold (0.4,0.6]). Port 3 staircase next — its channels are independent of G's, so no reset needed.
{"ticks_run": 190, "budget_left": 133460}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, -0.65, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
{"ticks_run": 190, "budget_left": 133270}
physim.reset({})
{"budget_left": 133070}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0.5, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
{"ticks_run": 300, "budget_left": 132770}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, -0.5, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34]})
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, -0.5, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34]})
{"ticks_run": 190, "budget_left": 132580}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34]})
{"ticks_run": 220, "budget_left": 132360}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, -0.3, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34]})
{"ticks_run": 190, "budget_left": 132170}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}, {"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 120, "u": [0, 0, 0, 0, -0.15, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels)
{"ticks_run": 390, "budget_left": 131780}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1.0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 250, "budget_left": 131530}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 200, "budget_left": 131330}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, -1, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 250, "budget_left": 131080}
physim.reset({})
{"budget_left": 130880}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, -0.5, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 190, "budget_left": 130690}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, -0.65, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 190, "budget_left": 130500}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 1, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
In C-state now. Testing whether port5 +1.0 (which pushes the α axis up) can restore canonical from the deep C-state.
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 1, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
In C-state now. Testing whether port5 +1.0 (which pushes the α axis up) can restore canonical from the deep C-state.
{"ticks_run": 300, "budget_left": 130200}
physim.reset({})
C-state is irreversibly deep (port5+1.0 can't restore). Now measuring sub-threshold during-drive response curves per port. Resetting to canonical.
{"budget_left": 130000}
physim.run({"segments": [{"t": 80, "u": [0.3, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 80, "budget_left": 129920}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0.3, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129800}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, -0.3, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129680}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0.3, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129560}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, -0.3, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129440}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0.3, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129320}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, -0.3, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, -0.3, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129200}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0.5, 0, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 129080}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0.3, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 128960}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, -0.3, 0]}], "channels": "all"})
{"ticks_run": 120, "budget_left": 128840}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0.1, 0, 0, 0]}], "channels": [14, 34, 3, 24]})
{"ticks_run": 120, "budget_left": 128720}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, -0.1, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34]})
{"ticks_run": 180, "budget_left": 128540}
physim.reset({})
{"budget_left": 128340}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [34, 0, 22, 14, 6, 20, 3, 29]})
{"ticks_run": 100, "budget_left": 128240}
physim.run({"segments": [{"t": 120, "u": [-0.4, 0, 0, 0, 0, 0, -0.4, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 200, "budget_left": 128040}
physim.reset({})
Inputs on the same axis add. Testing pulse-duration threshold for the C flip.
{"budget_left": 127840}
physim.run({"segments": [{"t": 20, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
physim.run({"segments": [{"t": 20, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 120, "budget_left": 127720}
physim.reset({})
{"budget_left": 127520}
physim.run({"segments": [{"t": 8, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 108, "budget_left": 127412}
physim.run({"segments": [{"t": 400, "u": [-0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29]})
{"ticks_run": 480, "budget_left": 126932}
physim.run({"segments": [{"t": 50, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 34, 22, 29]})
{"ticks_run": 250, "budget_left": 126682}
physim.run({"segments": [{"t": 80, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 34, 22, 29]})
{"ticks_run": 330, "budget_left": 126352}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 60, "budget_left": 126292}
physim.reset({})
{"budget_left": 126092}
physim.run({"segments": [{"t": 100, "u_start": [0, 0, 0, 0, 0, 0, 0, 0], "u_end": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0,)
{"ticks_run": 350, "budget_left": 125742}
physim.run({"segments": [{"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 80, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 110, "budget_left": 125632}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, -0.3, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0.3, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": )
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, -0.3, 0, 0, 0]}, {"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, 0, 0, 0, 0.3, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": )
{"ticks_run": 240, "budget_left": 125392}
physim.run({"segments": [{"t": 80, "u": [0, 0, 0, 0, 0.5, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14]})
{"ticks_run": 140, "budget_left": 125252}
physim.run({"segments": [{"t": 50, "u": [0, 0, 0, -0.4, 0, 0, 0, 0]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [13, 18, 24, 3], "series": true, "max_numbers": 360})
{"ticks_run": 110, "budget_left": 125142}
physim.run({"segments": [{"t": 150, "u": [0, 1, 0, 1, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32, 3, 13, 18, 24]})
{"ticks_run": 250, "budget_left": 124892}
physim.reset({})
{"budget_left": 124692}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 124392}
physim.run({"segments": [{"t": 50, "u": [0, 0, 0, 0, 0, 0, 0, 0.3]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 124042}
physim.run({"segments": [{"t": 60, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 360, "budget_left": 123682}
physim.reset({})
{"budget_left": 123482}
physim.run({"segments": [{"t": 60, "u": [0, -0.8, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 360, "budget_left": 123122}
physim.run({"segments": [{"t": 60, "u": [0, 0, -0.8, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 60, "u": [0, 0, -0.8, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 360, "budget_left": 122762}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, -0.8, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 360, "budget_left": 122402}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, -0.4, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 360, "budget_left": 122042}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, -0.4, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [14, 34, 3, 24, 29]})
{"ticks_run": 450, "budget_left": 121592}
physim.reset({})
physim.status({})
{"budget_left": 121592, "phase": "explore"}
physim.reset({})
{"budget_left": 121392}
physim.run({"segments": [{"t": 200, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 600, "budget_left": 120792}
physim.reset({})
{"budget_left": 120592}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 450, "budget_left": 120142}
physim.run({"segments": [{"t": 60, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34, 26]})
Surprise: from a truly clean state, port5 +1.0 does nothing — the earlier "M" state must come from brief port0+ pulses. Confirming that cleanly.
physim.run({"segments": [{"t": 60, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34, 26]})
Surprise: from a truly clean state, port5 +1.0 does nothing — the earlier "M" state must come from brief port0+ pulses. Confirming that cleanly.
{"ticks_run": 310, "budget_left": 119832}
physim.run({"segments": [{"t": 40, "u": [0, 0, 0, 0, 0, 0, 0, 0.3]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 100, "budget_left": 119732}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22], "series": true})
{"ticks_run": 300, "budget_left": 119432}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 180, "budget_left": 119252}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 180, "budget_left": 119072}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 180, "budget_left": 118892}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, 0, 0, 0, 0, -0.8]}, {"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [22]})
{"ticks_run": 180, "budget_left": 118712}
physim.reset({})
{"budget_left": 118512}
physim.run({"segments": [{"t": 120, "u": [0, -0.6, 0, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [11, 25, 32, 6]})
{"ticks_run": 190, "budget_left": 118322}
physim.run({"segments": [{"t": 120, "u": [0, 0, -0.6, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
physim.run({"segments": [{"t": 120, "u": [0, 0, -0.6, 0, 0, 0, 0, 0]}, {"t": 70, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 190, "budget_left": 118132}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34, 11, 32]})
{"ticks_run": 150, "budget_left": 117982}
physim.run({"segments": [{"t": 120, "u": [0, 0, 0, -0.6, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [13, 18, 24, 3]})
{"ticks_run": 220, "budget_left": 117762}
physim.run({"segments": [{"t": 80, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 80, "u": [0, -0.8, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels)
{"ticks_run": 460, "budget_left": 117302}
physim.reset({})
{"budget_left": 117102}
physim.run({"segments": [{"t": 100, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 100, "budget_left": 117002}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [-0.5, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 160, "budget_left": 116842}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0.5, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 160, "budget_left": 116682}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, -0.5, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 160, "budget_left": 116522}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0.5, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 160, "budget_left": 116362}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, -0.5, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, -0.5, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 160, "budget_left": 116202}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0.5, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
{"ticks_run": 160, "budget_left": 116042}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, -0.5, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
{"ticks_run": 160, "budget_left": 115882}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, 0.5, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 160, "budget_left": 115722}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, 0, -0.5, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 160, "budget_left": 115562}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 100, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 22, 29, 34]})
{"ticks_run": 160, "budget_left": 115402}
physim.run({"segments": [{"t": 100, "u": [0, -1, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
{"ticks_run": 100, "budget_left": 115302}
physim.run({"segments": [{"t": 100, "u": [0, 0, -1, 0, 0, 0, 0, 0]}], "channels": [20, 26, 31, 34]})
{"ticks_run": 100, "budget_left": 115202}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, -1, 0, 0, 0, 0]}], "channels": [3, 13, 18, 24]})
{"ticks_run": 100, "budget_left": 115102}
physim.run({"segments": [{"t": 120, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 11, 25, 32]})
During-drive ≈ attractor values (no direct feedthrough). Testing reverse transitions: strong positive after strong negative (F→? via port1 +1.0).
{"ticks_run": 270, "budget_left": 114832}
Now building the executable theory (init/step simulator) for the bonus, testing it locally first.
Simulator reproduces all key behaviors. Submitting the theory, then requesting contracts.
physim.submit_theory({"code": "BASE = [0.155,0.79,-0.295,-0.095,-0.062,-0.797,-0.163,-0.692,0.938,-0.706,\n 0.091,0.293,0.729,0.318,-0.375,0.951,-0.492,-0.644,-0.090,0.024,\n 0.741,0.252,0.695,-0.338,-0.477,)
physim.ready({})
physim.status({})
physim.status({})
physim.status({})
{"error": "exploration is over; reply with the answers object"}
physim.answer({"answers": [{"id": 0, "mean": -0.302, "low": -0.365, "high": -0.24}, {"id": 1, "mean": 0.153, "low": 0.095, "high": 0.21}, {"id": 2, "mean": -0.386, "low": -0.44, "high": -0.33}, {"id": 3, "mean": -0)
physim.answer({"answers": [{"id": 0, "mean": -0.302, "low": -0.365, "high": -0.24}, {"id": 1, "mean": 0.153, "low": 0.095, "high": 0.21}, {"id": 2, "mean": -0.386, "low": -0.44, "high": -0.33}, {"id": 3, "mean": -0)
{"received": 16}
physim.answer_prep({"id": 100, "code": "def policy(t, y, mem):\n # Goal: ch20 in [-1.046, -0.348] after free run.\n # Drive port2 strongly negative -> absorbing H attractor (ch20 ~ -0.69 at rest).\n s = mem.get)
physim.answer_prep({"id": 101, "code": "def policy(t, y, mem):\n # Goal: ch29 in [0.268, 1.028] after free run.\n # Drive port0 strongly negative -> absorbing C attractor (ch29 ~ +0.65 at rest).\n s = mem.get(')
physim.answer_prep({"id": 102, "code": "def policy(t, y, mem):\n # Goal: ch31 in [0.621, 1.333] after free run.\n # Drive port2 strongly negative -> absorbing H attractor (ch31 ~ +0.985 at rest).\n s = mem.get()
physim.answer_prep({"id": 103, "code": "def policy(t, y, mem):\n # Goal: ch22 in [-0.666, -0.096] after free run.\n # Sustained positive port7 knocks ch22 from its canonical up-well (0.70)\n # into the deep dow)
Investigation complete — all 16 prediction contracts answered, all 4 preparation policies submitted, and an executable theory recorded for the bonus.
## What the system turned out to be
The hidden system is a **multistable attractor network**: roughly 6 independent "families" of hidden multi-well units, each coupled to specific input ports and read out (noise sd ≈0.05, no direct input feedthroug
anthropic/claude-opus-5 · C1 seed 0 · tier tools · accuracy 0.96 · preparation 1.00 · theory 0.96 · budget 84%
S1=0.97 · S2=0.97 · S3=0.96 · S4=0.95 · coverage 1.00 · 439 nodes
Narrative experiment log
- 2× free run (800 ticks; 300 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (500 ticks; 500 ticks, all inputs 0).
- 5× single-port probe (7,700 ticks; port 0 at +0.12, 200t).
- 2× free run (1,830 ticks; 1800 ticks, all inputs 0).
- Single-port probe (2,000 ticks; port 0 at -0.12, 2000t) — ch27 -0.15→-0.45.
- Reset to fresh initial conditions (−200 ticks).
- Free run (600 ticks; 600 ticks, all inputs 0).
- 2× single-port probe (3,200 ticks; port 1 at +0.12, 1600t).
- Free run (1,600 ticks; 1600 ticks, all inputs 0).
- 7× single-port probe (11,400 ticks; port 1 at -0.12, 1600t).
- Free run (1,200 ticks; 1200 ticks, all inputs 0).
- 4× single-port probe (11,800 ticks; port 4 at +0.12, 2400t).
- Free run (1,000 ticks; 1000 ticks, all inputs 0).
- 3× single-port probe (7,200 ticks; port 6 at -0.12, 2400t) — ch22 -0.50→-0.34.
- 2× multi-port probe (4,800 ticks; ports [2, 4, 6] at +0.38, 2400t).
- Reset to fresh initial conditions (−200 ticks).
- 8× multi-port probe (11,000 ticks; ports [0, 1, 3, 5] at +0.07, 1900t).
- Free run (1,300 ticks; 1300 ticks, all inputs 0).
- 3× multi-port probe (3,900 ticks; ports [0, 1, 3, 5] at -0.15, 1300t) — ch20 +0.47→+0.17, ch3 -0.22→-0.43, ch24 -0.13→+0.05.
- Free run (1,300 ticks; 1300 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (25 ticks; 25 ticks, all inputs 0).
- 9× multi-port probe (4,150 ticks; ports [0, 1, 3, 5] at +0.50, 150t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Multi-port probe (200 ticks; ports [0, 1, 3, 5] at -0.50, 200t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (25 ticks; 25 ticks, all inputs 0).
- 3× multi-port probe (70 ticks; ports [0, 1, 3, 5] at -0.50, 20t) — ch22 -0.23→-0.52, ch28 +0.15→+0.41, ch21 +0.05→+0.29.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Multi-port probe (500 ticks; ports [0, 1, 3, 5] at +0.50, 500t).
- 2× free run (1,200 ticks; 200 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 5× multi-port probe (2,500 ticks; ports [0, 1, 3, 5] at +0.25, 200t) — ch6 +0.84→+0.32, ch17 -0.20→+0.24, ch22 +0.55→+0.14.
- Reset to fresh initial conditions (−200 ticks).
- 3× multi-port probe (4,000 ticks; ports [0, 1, 3, 5] at +0.12, 700t) — ch22 +0.60→+0.25, ch10 -0.22→-0.57, ch28 -0.01→+0.29.
- Reset to fresh initial conditions (−200 ticks).
- 9× drive → release (6,000 ticks; drive +0.50 for 150t, release 200t).
- Reset to fresh initial conditions (−200 ticks).
- 5× drive → release (1,400 ticks; drive -0.15 for 25t, release 200t).
- Free run (20 ticks; 20 ticks, all inputs 0).
- 3× drive → release (1,150 ticks; drive -0.35 for 100t, release 150t).
- Multi-port probe (60 ticks; ports [0, 1, 3] at +0.38, 60t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (650 ticks; drive +0.38 for 500t, release 150t).
- Multi-port probe (100 ticks; ports [0, 1, 3] at -0.19, 100t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (320 ticks; drive -0.17 for 20t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (1,340 ticks; drive -0.21 for 20t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (600 ticks; drive -0.37 for 200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (600 ticks; drive -0.36 for 200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (30 ticks; drive -0.30 for 20t, release 10t).
- 2× free run (60 ticks; 30 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (3,000 ticks; drive +0.26 for 2800t, release 200t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (6,200 ticks; drive +0.07 for 6000t, release 200t).
- 2× multi-port probe (6,500 ticks; ports [0, 1, 3, 5] at +0.50, 3500t).
- 4× drive → release (6,280 ticks; drive +0.50 for 2500t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (4,320 ticks; drive -0.30 for 4020t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (4,640 ticks; drive +0.38 for 2020t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,700 ticks; drive +0.38 for 1400t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- 3× free run (2,300 ticks; 600 ticks, all inputs 0).
- Drive → release (1,300 ticks; drive -0.12 for 1000t, release 300t) — ch20 +0.32→+0.09, ch3 -0.26→-0.43, ch35 -0.50→-0.34.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,000 ticks; drive +0.09 for 1600t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Multi-port probe (2,100 ticks; ports [0, 1, 3, 5] at +0.24, 2100t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (500 ticks; drive -0.24 for 200t, release 300t).
- Ended exploration → received 16 prediction contracts + 2 preparation contracts.
- Submitted 16 contract answers.
- Submitted preparation policy for contract 100 ("ch24 baseline (~-0.16) sits at the centre of the target band [-0.514, 0.187].").
- Submitted preparation policy for contract 101 ("Channel 7 is one of the 20 inert sensors: no input port moves it.").
- Submitted an executable theory (5,625 chars).
Agent-written files (its instruments & theories)
app/sim/notes.md (2,045 chars)
# Hidden system — final discovered structure
## Topology
- 36 sensors, 8 inputs. Per-tick noise sd ≈ 0.05; 20-tick tail mean → sem ≈ 0.011.
- `reset()` always returns to the SAME baseline state A (verified across ~10 draws).
- 4 independent 4-sensor cells; ports 2, 4, 6 inert; 20 of 36 sensors inert.
cell0 ← port0 : ch 1, 17, 27, 33
cell1 ← port1 (+ port7 at 0.095× gain) : ch 13, 21, 22, 28
cell3 ← port3 : ch 0, 6, 10, 32
cell5 ← port5 : ch 3, 20, 24, 35
## Mechanism (cells 0, 1, 3)
Positive and negative inputs do completely different things.
**Positive = slow progress along a line attractor.**
`dσ/dt = R(u)`, R(u) ≈ u^1.55 (measured table in model.py). At u=0 the state
FREEZES indefinitely — verified by holding σ=500 for 1200 ticks with no change.
Sensors trace a fixed 1-D curve F_ch(σ), saturating at an absorbing endpoint P
by σ ≈ 4000.
**Negative = a threshold TRIGGER, not a rate.**
- |u| < θ: no effect at all, ever (−0.6 for 200 ticks does nothing).
- |u| > θ for ≳13 ticks, and σ < ~850: the cell detaches and runs away
*autonomously* to a distinct absorbing state T, completing ~40 ticks after the
input stops. A 20-tick kick read while still driven looks almost unmoved, yet
after release the cell is fully at T — that is the decisive evidence.
- σ > ~850: IMMUNE. Even u=−1 for 100 ticks does nothing.
- θ ≈ 0.615 (cell0), 0.685 (cell1), 0.625 (cell3), ±0.04 draw-to-draw jitter.
- Both P and T are absorbing; P ≠ T (they differ mainly on ch27, ch22, ch6).
**Readout:** `y = F_ch(σ) + u · d_ch(σ)`, feedthrough linear in u (checked at
u=−0.5 mid-path), largest mid-path and ~0 at both endpoints.
## cell5 is the exception
No fast trigger. Negative drive is a slow *rate* along a different path
(~2300 ticks at u=−1 to converge); ch35 is non-monotone on it, dipping to −0.50
before recovering to ~−0.38.
## Validation
Two held-out multi-stage protocols predicted before running:
mean |error| = 0.021, max 0.058 across all 16 active channels.
## Budget
150000 total, ~24000 unused at `ready()`.
app/sim/rates.md (1,377 chars)
# Rate function R_c(u) (progress sigma advances; sigma units = ticks of u=+1)
Model: per cell c, scalar progress s_c, ds/dt = R_c(u_p) >= 0, R_c(0)=0.
BOTH signs of u advance s in the SAME direction. Path has a TERMINAL end
(negative endpoint); once there, no input moves it (verified: +1 for 300 ticks -> no change).
## Positive side (measured by driven reads, cells 0,1,3)
R(1.0) = 1.00 (definition)
R(0.5) ~ 0.35-0.40
R(0.25) ~ 0.16-0.26
R(0.15) > 0 (staircase showed motion)
## Negative side -- SHARP THRESHOLD, then very fast
cells 0 & 3:
u=-0.3 , 100 ticks -> NO motion
u=-0.5 , 100 ticks -> NO motion
u=-0.7 , 100 ticks -> COMPLETE traversal to terminal
u=-1.0 , 20 ticks -> sigma ~ 150
u=-1.0 , 40 ticks -> sigma ~ 900-1000
u=-1.0 , 70 ticks -> terminal
cell 1:
u=-0.7 , 100 ticks -> NO motion
u=-0.85, 300 ticks -> terminal
u=-1.0 , 40 ticks -> well advanced; 70 ticks -> terminal
cell 5 (slowest, weird):
u=-0.9 , 300 ticks -> only partial (ch3 -0.019->-0.125, ch35 -0.293->-0.476)
u=-1.0 , 200 ticks -> almost nothing
u=-1.0 , 1300 ticks -> terminal
positive side: cell5 moves FASTER at |u|=0.15-0.5 than at 1.0 (non-monotone)
## Onset lag
u=-1 for 20 ticks gives sigma~150 but 40 ticks gives ~950 -> rate is not constant from t=0;
there is an onset lag / ramp of order 15-25 ticks (fast filter on u before it drives the rate).
app/.vf-claude/6e9990ca2784491b892f1b464fc723a7/.claude.json (389 chars)
{
"firstStartTime": "2026-08-12T18:32:36.956Z",
"machineID": "226f160a66d97088e855847a1e56018d3e23193a215b6558cf3b5081543a3648",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "0d6996d5029b685fbdb0307fbe10a27c2f7ddfb4b423896a8e26fbefe54602bb"
}
app/sim/data.py (406 chars)
import numpy as np
BASE_A = { # zero-input attractor, avg of 4 obs
0:0.030,1:0.339,2:0.363,3:-0.019,4:-0.023,5:0.127,6:0.475,7:-0.612,8:-0.377,9:0.194,
10:-0.063,11:0.437,12:-0.427,13:0.507,14:-0.554,15:-0.288,16:-0.919,17:-0.248,18:0.593,
19:-0.623,20:0.450,21:-0.532,22:0.455,23:0.466,24:-0.160,25:-0.578,26:0.357,27:-0.267,
28:-0.442,29:0.041,30:-0.188,31:-0.342,32:-0.062,33:0.514,34:0.160,35:-0.293}
app/sim/frozen_pos.py (4,211 chars)
# FROZEN path: drive ports 0,1,3,5 at u=+1 for cumulative sigma ticks,
# then release 200 ticks at u=0, then read tail. sigma = cumulative +1 drive ticks.
CELLS = {0: [1, 17, 27, 33], 1: [13, 21, 22, 28], 3: [0, 6, 10, 32], 5: [3, 20, 24, 35]}
FROZEN = {
0: {1: 0.339, 17:-0.248, 27:-0.267, 33: 0.514, 13: 0.507, 21:-0.532, 22: 0.455, 28:-0.442,
0: 0.030, 6: 0.475, 10:-0.063, 32:-0.062, 3:-0.019, 20: 0.450, 24:-0.160, 35:-0.293},
150: {1: 0.341, 17:-0.209, 27:-0.269, 33: 0.542, 13: 0.522, 21:-0.355, 22: 0.584, 28:-0.224,
0:-0.008, 6: 0.551, 10:-0.133, 32:-0.092, 3:-0.027, 20: 0.444, 24:-0.130, 35:-0.250},
300: {1: 0.360, 17:-0.119, 27:-0.221, 33: 0.555, 13: 0.395, 21:-0.187, 22: 0.583, 28: 0.008,
0:-0.068, 6: 0.699, 10:-0.260, 32:-0.192, 3:-0.003, 20: 0.426, 24:-0.141, 35:-0.259},
500: {1: 0.369, 17: 0.031, 27:-0.101, 33: 0.457, 13: 0.206, 21: 0.005, 22: 0.372, 28: 0.211,
0:-0.059, 6: 0.685, 10:-0.487, 32:-0.314, 3:-0.007, 20: 0.409, 24:-0.155, 35:-0.219},
800: {1: 0.230, 17: 0.427, 27: 0.183, 33: 0.063, 13: 0.052, 21: 0.176, 22: 0.081, 28: 0.371,
0: 0.214, 6: 0.246, 10:-0.734, 32:-0.461, 3:-0.023, 20: 0.415, 24:-0.147, 35:-0.217},
1200: {1:-0.016, 17: 0.597, 27: 0.131, 33:-0.430, 13:-0.097, 21: 0.237, 22:-0.109, 28: 0.383,
0: 0.542, 6:-0.207, 10:-0.757, 32:-0.483, 3:-0.001, 20: 0.426, 24:-0.140, 35:-0.220},
1800: {1:-0.102, 17: 0.599, 27:-0.082, 33:-0.549, 13:-0.121, 21: 0.280, 22:-0.246, 28: 0.393,
0: 0.666, 6:-0.454, 10:-0.775, 32:-0.499, 3: 0.016, 20: 0.376, 24:-0.145, 35:-0.153},
2600: {1:-0.147, 17: 0.607, 27:-0.196, 33:-0.565, 13:-0.188, 21: 0.306, 22:-0.325, 28: 0.407,
0: 0.706, 6:-0.534, 10:-0.767, 32:-0.506, 3: 0.018, 20: 0.371, 24:-0.092, 35:-0.111},
4000: {1:-0.128, 17: 0.597, 27:-0.227, 33:-0.575, 13:-0.204, 21: 0.314, 22:-0.357, 28: 0.416,
0: 0.739, 6:-0.553, 10:-0.804, 32:-0.506, 3: 0.004, 20: 0.332, 24:-0.080, 35:-0.078},
}
# DRIVEN path (read while u=+1 still applied), same cumulative sigma
DRIVEN_P1 = {
0: {1: 0.346, 17:-0.275, 27:-0.281, 33: 0.538, 13: 0.509, 21:-0.524, 22: 0.452, 28:-0.434,
0: 0.060, 6: 0.445, 10:-0.044, 32:-0.051, 3:-0.010, 20: 0.426, 24:-0.154, 35:-0.272},
150: {1: 0.416, 17:-0.334, 27:-0.209, 33: 0.693, 13: 0.616, 21:-0.462, 22: 0.709, 28:-0.275,
0:-0.131, 6: 0.750, 10:-0.049, 32:-0.043, 3:-0.011, 20: 0.466, 24:-0.183, 35:-0.320},
300: {1: 0.441, 17:-0.264, 27:-0.141, 33: 0.681, 13: 0.449, 21:-0.244, 22: 0.640, 28:-0.019,
0:-0.216, 6: 0.894, 10:-0.201, 32:-0.170, 3:-0.008, 20: 0.463, 24:-0.153, 35:-0.309},
500: {1: 0.451, 17:-0.040, 27:-0.000, 33: 0.601, 13: 0.211, 21: 0.006, 22: 0.416, 28: 0.234,
0:-0.164, 6: 0.840, 10:-0.485, 32:-0.329, 3: 0.012, 20: 0.473, 24:-0.191, 35:-0.293},
800: {1: 0.282, 17: 0.434, 27: 0.308, 33: 0.088, 13: 0.019, 21: 0.187, 22: 0.101, 28: 0.342,
0: 0.237, 6: 0.250, 10:-0.733, 32:-0.464, 3:-0.006, 20: 0.464, 24:-0.160, 35:-0.296},
1200: {1:-0.035, 17: 0.571, 27: 0.240, 33:-0.463, 13:-0.073, 21: 0.294, 22:-0.120, 28: 0.374,
0: 0.562, 6:-0.231, 10:-0.769, 32:-0.502, 3:-0.003, 20: 0.467, 24:-0.154, 35:-0.280},
1800: {1:-0.117, 17: 0.614, 27:-0.031, 33:-0.555, 13:-0.187, 21: 0.283, 22:-0.279, 28: 0.423,
0: 0.679, 6:-0.475, 10:-0.777, 32:-0.497, 3: 0.011, 20: 0.444, 24:-0.119, 35:-0.214},
2600: {1:-0.141, 17: 0.601, 27:-0.167, 33:-0.566, 13:-0.211, 21: 0.312, 22:-0.332, 28: 0.413,
0: 0.728, 6:-0.546, 10:-0.805, 32:-0.483, 3: 0.016, 20: 0.429, 24:-0.115, 35:-0.190},
4000: {1:-0.145, 17: 0.605, 27:-0.228, 33:-0.586, 13:-0.235, 21: 0.319, 22:-0.384, 28: 0.435,
0: 0.768, 6:-0.604, 10:-0.767, 32:-0.486, 3: 0.019, 20: 0.406, 24:-0.101, 35:-0.152},
}
# TERMINAL state reached by negative drive (|u|>=threshold). Frozen, and it is a
# TRUE END OF PATH: 300 ticks of u=+1 applied there changed nothing.
TERMINAL = {1:-0.155, 17: 0.613, 27:-0.480, 33:-0.582,
13:-0.257, 21: 0.305, 22:-0.515, 28: 0.414,
0: 0.760, 6:-0.639, 10:-0.786, 32:-0.497}
# cell5 terminal (from -1 staircase, 1300 ticks): 3:-0.427, 20:0.146, 24:0.053, 35:-0.424
TERMINAL5 = {3: -0.427, 20: 0.146, 24: 0.053, 35: -0.424}
app/sim/model.py (9,513 chars)
"""Fitted model of the hidden system.
STRUCTURE
---------
36 sensors, 8 input ports. Measurement noise sd ~0.05/tick; tail mean over 20 ticks -> sem ~0.011.
Fresh draw (reset) always starts at the SAME baseline state A.
4 active cells, mutually independent, 4 sensors each:
cell0 <- port0 : ch 1, 17, 27, 33
cell1 <- port1 (+ port7 at ~0.095x strength) : ch 13, 21, 22, 28
cell3 <- port3 : ch 0, 6, 10, 32
cell5 <- port5 : ch 3, 20, 24, 35
Ports 2,4,6 inert. The other 20 sensors are inert, always at baseline A.
PER-CELL DYNAMICS (cells 0,1,3)
-------------------------------
State = (sigma, branch). branch in {"P" (normal path), "T" (terminal)}.
sigma = progress, measured in equivalent ticks of u=+1.
* u > 0 : d sigma/dt = R(u) = u**1.55. Frozen (d sigma/dt = 0) at u = 0.
* u = 0 : nothing moves. The path is a LINE ATTRACTOR - the state stays put
indefinitely (verified: held 1200 ticks with no change).
* u < 0 : NOT a rate. It is a TRIGGER.
- if |u| < theta_c -> nothing at all, ever (tested 200 ticks)
- if |u| > theta_c for >~13 ticks AND sigma < ~850
-> cell runs away autonomously to state T,
completing ~40 ticks after the input ends.
- if sigma > ~850 -> IMMUNE. Even u=-1 for 100 ticks does nothing.
thetas: cell0 0.62, cell1 0.705, cell3 0.60 (bracketed to +-0.03)
* Once on branch T, the cell is absorbing: no input of any kind moves it.
* The positive asymptote P (sigma >~ 4000) is ALSO absorbing: u=-1 for 60 ticks
there does nothing. P != T (they differ mainly on ch27, ch22, ch6).
SENSOR READOUT
--------------
y_ch = F_ch(sigma) + u_port * d_ch(sigma)
where F is the frozen path table and d = DRIVEN_P1 - FROZEN is the (approximately
linear in u) feedthrough. Verified linear at u=-0.5 mid-path.
CELL5
-----
Different: no fast trigger. Positive drive follows a shallow path saturating by
sigma~4000. Negative drive is a slow RATE along a *different* path (~2300 ticks at
u=-1 to converge). ch35 is non-monotone on the negative path (dips to -0.50 then
recovers to ~-0.38).
"""
CELLS = {0: [1, 17, 27, 33], 1: [13, 21, 22, 28], 3: [0, 6, 10, 32], 5: [3, 20, 24, 35]}
PORT_OF_CELL = {0: 0, 1: 1, 3: 3, 5: 5}
THETA = {0: 0.615, 1: 0.685, 3: 0.625} # +-0.04 draw-to-draw jitter near threshold
SIGMA_IMMUNE = 850.0
TRIG_TICKS = 13.0 # ticks above threshold needed to fire
PORT7_GAIN = 0.095 # port7 drives cell1 forward at this fraction
BASE_A = {
0: 0.030, 1: 0.339, 2: 0.363, 3: -0.019, 4: -0.023, 5: 0.127, 6: 0.475, 7: -0.612,
8: -0.377, 9: 0.194, 10: -0.063, 11: 0.437, 12: -0.427, 13: 0.507, 14: -0.554,
15: -0.288, 16: -0.919, 17: -0.248, 18: 0.593, 19: -0.623, 20: 0.450, 21: -0.532,
22: 0.455, 23: 0.466, 24: -0.160, 25: -0.578, 26: 0.357, 27: -0.267, 28: -0.442,
29: 0.041, 30: -0.188, 31: -0.342, 32: -0.062, 33: 0.514, 34: 0.160, 35: -0.293}
SIG = [0, 150, 300, 500, 800, 1200, 1800, 2600, 4000, 9500]
# frozen path F_ch(sigma)
F = {
1: [0.339, 0.341, 0.360, 0.369, 0.230, -0.016, -0.102, -0.147, -0.128, -0.136],
17: [-0.248, -0.209, -0.119, 0.031, 0.427, 0.597, 0.599, 0.607, 0.597, 0.619],
27: [-0.267, -0.269, -0.221, -0.101, 0.183, 0.131, -0.082, -0.196, -0.227, -0.261],
33: [0.514, 0.542, 0.555, 0.457, 0.063, -0.430, -0.549, -0.565, -0.575, -0.583],
13: [0.507, 0.522, 0.395, 0.206, 0.052, -0.097, -0.121, -0.188, -0.204, -0.219],
21: [-0.532, -0.355, -0.187, 0.005, 0.176, 0.237, 0.280, 0.306, 0.314, 0.298],
22: [0.455, 0.584, 0.583, 0.372, 0.081, -0.109, -0.246, -0.325, -0.357, -0.368],
28: [-0.442, -0.224, 0.008, 0.211, 0.371, 0.383, 0.393, 0.407, 0.416, 0.404],
0: [0.030, -0.008, -0.068, -0.059, 0.214, 0.542, 0.666, 0.706, 0.739, 0.770],
6: [0.475, 0.551, 0.699, 0.685, 0.246, -0.207, -0.454, -0.534, -0.553, -0.592],
10: [-0.063, -0.133, -0.260, -0.487, -0.734, -0.757, -0.775, -0.767, -0.804, -0.769],
32: [-0.062, -0.092, -0.192, -0.314, -0.461, -0.483, -0.499, -0.506, -0.506, -0.500],
3: [-0.019, -0.027, -0.003, -0.007, -0.023, -0.001, 0.016, 0.018, 0.004, -0.007],
20: [0.450, 0.444, 0.426, 0.409, 0.415, 0.426, 0.376, 0.371, 0.332, 0.357],
24: [-0.160, -0.130, -0.141, -0.155, -0.147, -0.140, -0.145, -0.092, -0.080, -0.055],
35: [-0.293, -0.250, -0.259, -0.219, -0.217, -0.220, -0.153, -0.111, -0.078, -0.098],
}
# feedthrough coefficient d_ch(sigma) = DRIVEN(u=+1) - FROZEN, at the same sigma
D = {
1: [0.007, 0.075, 0.081, 0.082, 0.052, -0.019, -0.015, 0.006, -0.017, -0.017],
17: [-0.027, -0.125, -0.145, -0.071, 0.007, -0.026, 0.015, -0.006, 0.008, 0.008],
27: [-0.014, 0.060, 0.080, 0.101, 0.125, 0.109, 0.051, 0.029, -0.001, -0.001],
33: [0.024, 0.151, 0.126, 0.144, 0.025, -0.033, -0.006, -0.001, -0.011, -0.011],
13: [0.002, 0.094, 0.054, 0.005, -0.033, 0.024, -0.066, -0.023, -0.031, -0.031],
21: [0.008, -0.107, -0.057, 0.001, 0.011, 0.057, 0.003, 0.006, 0.005, 0.005],
22: [-0.003, 0.125, 0.057, 0.044, 0.020, -0.011, -0.033, -0.007, -0.027, -0.027],
28: [0.008, -0.051, -0.027, 0.023, -0.029, -0.009, 0.030, 0.006, 0.019, 0.019],
0: [0.030, -0.123, -0.148, -0.105, 0.023, 0.020, 0.013, 0.022, 0.029, 0.029],
6: [-0.030, 0.199, 0.195, 0.155, 0.004, -0.024, -0.021, -0.012, -0.051, -0.051],
10: [0.019, 0.084, 0.059, 0.002, 0.001, -0.012, -0.002, -0.038, 0.037, 0.037],
32: [0.011, 0.049, 0.022, -0.015, -0.003, -0.019, 0.002, 0.023, 0.020, 0.020],
3: [0.009, 0.016, -0.005, 0.019, 0.017, -0.002, -0.005, -0.002, 0.015, 0.015],
20: [-0.024, 0.022, 0.037, 0.064, 0.049, 0.041, 0.068, 0.058, 0.074, 0.074],
24: [0.006, -0.053, -0.012, -0.036, -0.013, -0.014, 0.026, -0.023, -0.021, -0.021],
35: [0.021, -0.070, -0.050, -0.074, -0.079, -0.060, -0.061, -0.079, -0.074, -0.074],
}
# absorbing terminal state T (reached by a negative trigger)
T_STATE = {1: -0.148, 17: 0.607, 27: -0.481, 33: -0.578,
13: -0.257, 21: 0.307, 22: -0.520, 28: 0.412,
0: 0.762, 6: -0.636, 10: -0.782, 32: -0.496}
# cell5 negative path, indexed by tau = ticks of u=-1
TAU5 = [0, 300, 600, 1300, 2300, 5000]
N5 = {
3: [-0.019, -0.068, -0.142, -0.261, -0.433, -0.440],
20: [0.450, 0.460, 0.432, 0.318, 0.095, 0.100],
24: [-0.160, -0.192, -0.199, -0.132, 0.031, 0.040],
35: [-0.293, -0.397, -0.480, -0.501, -0.338, -0.360],
}
ACTIVE = set()
for v in CELLS.values():
ACTIVE.update(v)
def interp(xs, ys, x):
if x <= xs[0]:
return float(ys[0])
if x >= xs[-1]:
return float(ys[-1])
for i in range(len(xs) - 1):
if xs[i] <= x <= xs[i + 1]:
f = (x - xs[i]) / (xs[i + 1] - xs[i])
return float(ys[i] + f * (ys[i + 1] - ys[i]))
return float(ys[-1])
# measured progress rate vs amplitude (cells 0,1,3), sigma-units per tick
RU = [0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
RV = [0.0, 0.040, 0.072, 0.095, 0.12, 0.17, 0.28, 0.35, 0.47, 0.62, 0.72, 0.87, 1.0]
def R_pos(u):
"""progress rate (sigma units per tick) for u > 0"""
if u <= 0:
return 0.0
return interp(RU, RV, u)
class Cell:
"""cells 0,1,3"""
def __init__(self, cid):
self.cid = cid
self.sigma = 0.0
self.branch = "P"
self.neg_ticks = 0.0 # consecutive ticks with u below -theta
def step(self, u, u7=0.0):
if self.branch == "T":
return
drive = R_pos(u) + (PORT7_GAIN * R_pos(u7) if self.cid == 1 else 0.0)
if u < -THETA[self.cid] and self.sigma < SIGMA_IMMUNE:
self.neg_ticks += 1
if self.neg_ticks >= TRIG_TICKS:
self.branch = "T"
return
else:
self.neg_ticks = 0.0
self.sigma += drive
def read(self, ch, u):
if self.branch == "T":
return T_STATE[ch]
return interp(SIG, F[ch], self.sigma) + u * interp(SIG, D[ch], self.sigma)
class Cell5:
"""cell5: positive progress sigma, negative progress tau; separate paths"""
def __init__(self):
self.sigma = 0.0
self.tau = 0.0
def step(self, u):
if u > 0:
self.sigma += R_pos(u)
elif u < 0:
# slow rate; roughly linear in |u| above ~0.5, negligible below
self.tau += max(0.0, (abs(u) - 0.45) / 0.55)
def read(self, ch, u):
if self.tau > 30:
base = interp(TAU5, N5[ch], self.tau)
else:
base = interp(SIG, F[ch], self.sigma)
return base + u * interp(SIG, D[ch], min(self.sigma, 9500))
class Sim:
def __init__(self):
self.cells = {c: Cell(c) for c in (0, 1, 3)}
self.c5 = Cell5()
def run(self, segments):
"""segments: list of (ticks, u_vector[8])"""
for t, u in segments:
for _ in range(int(t)):
self.cells[0].step(u[0])
self.cells[1].step(u[1], u[7])
self.cells[3].step(u[3])
self.c5.step(u[5])
self.last_u = u
return self.readout(self.last_u)
def readout(self, u):
y = dict(BASE_A)
for ch in CELLS[0]:
y[ch] = self.cells[0].read(ch, u[0])
for ch in CELLS[1]:
y[ch] = self.cells[1].read(ch, u[1])
for ch in CELLS[3]:
y[ch] = self.cells[3].read(ch, u[3])
for ch in CELLS[5]:
y[ch] = self.c5.read(ch, u[5])
return y
def predict(segments, ch):
s = Sim()
y = s.run(segments)
return y[ch]
app/sim/pos_path.py (2,026 chars)
# All 4 active ports driven at u=+1 from fresh state A. Cumulative ticks -> tail means.
# channels of interest
CELLS = {0:[1,17,27,33], 1:[13,21,22,28], 3:[0,6,10,32], 5:[3,20,24,35]}
A = {0:0.030,1:0.339,2:0.363,3:-0.019,4:-0.023,5:0.127,6:0.475,7:-0.612,8:-0.377,9:0.194,
10:-0.063,11:0.437,12:-0.427,13:0.507,14:-0.554,15:-0.288,16:-0.919,17:-0.248,18:0.593,
19:-0.623,20:0.450,21:-0.532,22:0.455,23:0.466,24:-0.160,25:-0.578,26:0.357,27:-0.267,
28:-0.442,29:0.041,30:-0.188,31:-0.342,32:-0.062,33:0.514,34:0.160,35:-0.293}
# cum tick -> {ch: val} (u=+1 on ports 0,1,3,5)
POS = {
0: {1:0.346,17:-0.275,27:-0.281,33:0.538, 13:0.509,21:-0.524,22:0.452,28:-0.434, 0:0.060,6:0.445,10:-0.044,32:-0.051, 3:-0.010,20:0.426,24:-0.154,35:-0.272},
150: {1:0.416,17:-0.334,27:-0.209,33:0.693, 13:0.616,21:-0.462,22:0.709,28:-0.275, 0:-0.131,6:0.750,10:-0.049,32:-0.043, 3:-0.011,20:0.466,24:-0.183,35:-0.320},
300: {1:0.441,17:-0.264,27:-0.141,33:0.681, 13:0.449,21:-0.244,22:0.640,28:-0.019, 0:-0.216,6:0.894,10:-0.201,32:-0.170, 3:-0.008,20:0.463,24:-0.153,35:-0.309},
500: {1:0.451,17:-0.040,27:-0.000,33:0.601, 13:0.211,21:0.006,22:0.416,28:0.234, 0:-0.164,6:0.840,10:-0.485,32:-0.329, 3:0.012,20:0.473,24:-0.191,35:-0.293},
800: {1:0.282,17:0.434,27:0.308,33:0.088, 13:0.019,21:0.187,22:0.101,28:0.342, 0:0.237,6:0.250,10:-0.733,32:-0.464, 3:-0.006,20:0.464,24:-0.160,35:-0.296},
1200:{1:-0.035,17:0.571,27:0.240,33:-0.463, 13:-0.073,21:0.294,22:-0.120,28:0.374, 0:0.562,6:-0.231,10:-0.769,32:-0.502, 3:-0.003,20:0.467,24:-0.154,35:-0.280},
1800:{1:-0.117,17:0.614,27:-0.031,33:-0.555, 13:-0.187,21:0.283,22:-0.279,28:0.423, 0:0.679,6:-0.475,10:-0.777,32:-0.497, 3:0.011,20:0.444,24:-0.119,35:-0.214},
2600:{1:-0.141,17:0.601,27:-0.167,33:-0.566, 13:-0.211,21:0.312,22:-0.332,28:0.413, 0:0.728,6:-0.546,10:-0.805,32:-0.483, 3:0.016,20:0.429,24:-0.115,35:-0.190},
4000:{1:-0.145,17:0.605,27:-0.228,33:-0.586, 13:-0.235,21:0.319,22:-0.384,28:0.435, 0:0.768,6:-0.604,10:-0.767,32:-0.486, 3:0.019,20:0.406,24:-0.101,35:-0.152},
}
Preparation contracts
| id | channel | band | success | released finals |
|---|
| 100 | 24 | [-0.51, +0.19] | 100% | -0.17, -0.16, -0.18, -0.17 |
| 101 | 7 | [-1.04, -0.14] | 100% | -0.60, -0.59, -0.64, -0.61 |
Executable theory
accuracy 0.962 · per-stratum {'S1': 0.97, 'S2': 0.97, 'S3': 0.96, 'S4': 0.95} · 5,625 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.286 | 0.316 | 0.0 | 0.955 | ✓ |
| 1 | S1 | +0.511 | 0.164 | 0.0 | 0.981 | ✓ |
| 2 | S1 | -0.150 | 0.175 | 0.1 | 0.944 | ✓ |
| 3 | S1 | +0.514 | 0.164 | 0.0 | 0.998 | ✓ |
| 4 | S2 | +0.041 | 0.232 | 0.0 | 0.998 | ✓ |
| 5 | S2 | -0.164 | 0.225 | 0.1 | 0.930 | ✓ |
| 6 | S2 | +0.309 | 0.202 | 0.0 | 0.972 | ✓ |
| 7 | S2 | -0.528 | 0.248 | 0.0 | 0.977 | ✓ |
| 8 | S3 | -0.495 | 0.130 | 0.0 | 0.992 | ✓ |
| 9 | S3 | -0.155 | 0.175 | 0.0 | 0.969 | ✓ |
| 10 | S3 | -0.063 | 0.186 | 0.1 | 0.900 | ✓ |
| 11 | S3 | -0.379 | 0.244 | 0.0 | 0.991 | ✓ |
| 12 | S4 | -0.065 | 0.186 | 0.1 | 0.887 | ✓ |
| 13 | S4 | +0.514 | 0.164 | 0.0 | 0.997 | ✓ |
| 14 | S4 | -0.148 | 0.186 | 0.0 | 0.960 | ✓ |
| 15 | S4 | -0.447 | 0.215 | 0.0 | 0.963 | ✓ |
Verbatim log (358 entries)
physim.status({})
I'll start by checking the interface and running baseline experiments.
physim.status({})
I'll start by checking the interface and running baseline experiments.
{"budget_left": 150000, "phase": "explore"}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 300, "budget_left": 149700}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 500, "budget_left": 149200}
physim.reset({})
{"budget_left": 149000}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 500, "budget_left": 148500}
physim.run({"segments": [{"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
Baseline is a unique attractor (same after reset). Now let me map each input port.
{"ticks_run": 200, "budget_left": 148300}
physim.run({"segments": [{"t": 600, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 600, "budget_left": 147700}
physim.run({"segments": [{"t": 900, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 15, 17, 27, 33, 34], "series": true, "max_numbers": 360})
Slow dynamics — responses take hundreds of ticks. Let me get traces.
{"ticks_run": 900, "budget_left": 146800}
physim.run({"segments": [{"t": 3000, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33], "series": true, "max_numbers": 360})
physim.run({"segments": [{"t": 3000, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33], "series": true, "max_numbers": 360})
{"ticks_run": 3000, "budget_left": 143800}
physim.run({"segments": [{"t": 1800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33], "series": true, "max_numbers": 360})
{"ticks_run": 1800, "budget_left": 142000}
physim.run({"segments": [{"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
Major finding — the system did **not** return to baseline after release. Bistability. Let me check the full state.
{"ticks_run": 30, "budget_left": 141970}
physim.run({"segments": [{"t": 2000, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 2000, "budget_left": 139970}
physim.reset({})
{"budget_left": 139770}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 600, "budget_left": 139170}
Reset reliably returns to state A. Let me record baseline and probe port 1.
physim.run({"segments": [{"t": 1600, "u": [0, 1, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
physim.run({"segments": [{"t": 1600, "u": [0, 1, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1600, "budget_left": 137570}
physim.run({"segments": [{"t": 1600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1600, "budget_left": 135970}
physim.run({"segments": [{"t": 1600, "u": [0, -1, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
Each port controls a latching group of sensors. Testing reversibility.
{"ticks_run": 1600, "budget_left": 134370}
physim.run({"segments": [{"t": 1600, "u": [0, 0, -1, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
Groups appear independent per port. Mapping the remaining ports.
{"ticks_run": 1600, "budget_left": 132770}
physim.run({"segments": [{"t": 1600, "u": [0, 0, 1, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1600, "budget_left": 131170}
physim.run({"segments": [{"t": 900, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 900, "budget_left": 130270}
physim.run({"segments": [{"t": 1300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 128970}
physim.run({"segments": [{"t": 2200, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": [0, 6, 10, 32], "series": true, "max_numbers": 360})
physim.run({"segments": [{"t": 2200, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": [0, 6, 10, 32], "series": true, "max_numbers": 360})
{"ticks_run": 2200, "budget_left": 126770}
physim.run({"segments": [{"t": 1200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1200, "budget_left": 125570}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 0, 0, 1, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 2400, "budget_left": 123170}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 2400, "budget_left": 120770}
physim.run({"segments": [{"t": 3000, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 3000, "budget_left": 117770}
physim.run({"segments": [{"t": 4000, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": [3, 20, 24, 35], "series": true, "max_numbers": 360})
{"ticks_run": 4000, "budget_left": 113770}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1000, "budget_left": 112770}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 0, 0, 0, 0, -1, 0]}], "channels": "\"all\""})
{"ticks_run": 2400, "budget_left": 110370}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 0, 0, 0, 0, 1, 0]}], "channels": "\"all\""})
{"ticks_run": 2400, "budget_left": 107970}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 0, 0, 0, 0, 0, 1]}], "channels": "\"all\""})
{"ticks_run": 2400, "budget_left": 105570}
physim.run({"segments": [{"t": 2400, "u": [0, 0, 1, 0, 1, 0, 1, 0]}], "channels": "\"all\""})
Ports 2/4/6 may be "reverse" inputs. Testing them now that all cells are flipped.
physim.run({"segments": [{"t": 2400, "u": [0, 0, 1, 0, 1, 0, 1, 0]}], "channels": "\"all\""})
Ports 2/4/6 may be "reverse" inputs. Testing them now that all cells are flipped.
{"ticks_run": 2400, "budget_left": 103170}
Clear structure: 4 active cells (ports 0,1,3,5), each with 4 sensors; ports 2/4/6 inert; port 7 is a secondary input to cell 1. Cells are independent, so I can characterize all four in parallel with a hysteresis staircase.
physim.reset({})
{"budget_left": 102970}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 1300, "u": [0.15, 0.15, 0, 0.15, 0, 0.15, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1900, "budget_left": 101070}
physim.run({"segments": [{"t": 1300, "u": [0.3, 0.3, 0, 0.3, 0, 0.3, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 99770}
physim.run({"segments": [{"t": 1300, "u": [0.45, 0.45, 0, 0.45, 0, 0.45, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 98470}
physim.run({"segments": [{"t": 1300, "u": [0.6, 0.6, 0, 0.6, 0, 0.6, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 97170}
physim.run({"segments": [{"t": 1300, "u": [0.8, 0.8, 0, 0.8, 0, 0.8, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 95870}
physim.run({"segments": [{"t": 1300, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
physim.run({"segments": [{"t": 1300, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 94570}
physim.run({"segments": [{"t": 1300, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 93270}
physim.run({"segments": [{"t": 1300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 91970}
physim.run({"segments": [{"t": 1300, "u": [-0.3, -0.3, 0, -0.3, 0, -0.3, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 90670}
physim.run({"segments": [{"t": 1300, "u": [-0.6, -0.6, 0, -0.6, 0, -0.6, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 89370}
physim.run({"segments": [{"t": 1300, "u": [-1, -1, 0, -1, 0, -1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 88070}
physim.run({"segments": [{"t": 1300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 86770}
physim.reset({})
Key discovery: the system is **driftless** — at u=0 everything freezes at whatever value it holds. Let me verify the fresh-draw state and map the drive paths finely.
{"budget_left": 86570}
physim.run({"segments": [{"t": 25, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 25, "budget_left": 86545}
physim.run({"segments": [{"t": 150, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
physim.run({"segments": [{"t": 150, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 150, "budget_left": 86395}
physim.run({"segments": [{"t": 150, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 150, "budget_left": 86245}
physim.run({"segments": [{"t": 200, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 200, "budget_left": 86045}
physim.run({"segments": [{"t": 300, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 300, "budget_left": 85745}
physim.run({"segments": [{"t": 400, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 400, "budget_left": 85345}
physim.run({"segments": [{"t": 600, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 600, "budget_left": 84745}
physim.run({"segments": [{"t": 800, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 800, "budget_left": 83945}
physim.run({"segments": [{"t": 1400, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1400, "budget_left": 82545}
physim.reset({})
Cells trace 1-D paths with a rate set by |u|. Now mapping the negative-drive path.
physim.reset({})
Cells trace 1-D paths with a rate set by |u|. Now mapping the negative-drive path.
{"budget_left": 82345}
physim.run({"segments": [{"t": 200, "u": [-1, -1, 0, -1, 0, -1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 200, "budget_left": 82145}
physim.reset({})
Unexpected — full flip in 200 ticks under negative drive. Verifying the reset.
{"budget_left": 81945}
physim.run({"segments": [{"t": 25, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 25, "budget_left": 81920}
physim.run({"segments": [{"t": 20, "u": [-1, -1, 0, -1, 0, -1, 0, 0]}], "channels": "\"all\""})
Reset confirmed. Negative drive is ~10× faster. Fine-sampling the negative path.
{"ticks_run": 20, "budget_left": 81900}
physim.run({"segments": [{"t": 20, "u": [-1, -1, 0, -1, 0, -1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 20, "budget_left": 81880}
physim.run({"segments": [{"t": 30, "u": [-1, -1, 0, -1, 0, -1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 30, "budget_left": 81850}
physim.reset({})
Critical test: does a mid-path state hold, relax back, or continue after release?
physim.reset({})
Critical test: does a mid-path state hold, relax back, or continue after release?
{"budget_left": 81650}
physim.run({"segments": [{"t": 500, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 500, "budget_left": 81150}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 200, "budget_left": 80950}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1000, "budget_left": 79950}
Confirmed: a **line attractor** — mid-path states freeze after a short (~150 tick) fast transient. Now measuring rate vs amplitude.
physim.reset({})
{"budget_left": 79750}
physim.run({"segments": [{"t": 200, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 200, "budget_left": 79550}
physim.run({"segments": [{"t": 300, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 300, "budget_left": 79250}
physim.run({"segments": [{"t": 500, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
physim.run({"segments": [{"t": 500, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 500, "budget_left": 78750}
physim.run({"segments": [{"t": 1000, "u": [0.5, 0.5, 0, 0.5, 0, 0.5, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1000, "budget_left": 77750}
physim.reset({})
{"budget_left": 77550}
physim.run({"segments": [{"t": 700, "u": [0.25, 0.25, 0, 0.25, 0, 0.25, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 700, "budget_left": 76850}
physim.run({"segments": [{"t": 1300, "u": [0.25, 0.25, 0, 0.25, 0, 0.25, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1300, "budget_left": 75550}
physim.run({"segments": [{"t": 2000, "u": [0.25, 0.25, 0, 0.25, 0, 0.25, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 2000, "budget_left": 73550}
physim.reset({})
Now building a clean "frozen path" table: drive, release, read.
{"budget_left": 73350}
physim.run({"segments": [{"t": 150, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 350, "budget_left": 73000}
physim.run({"segments": [{"t": 150, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 350, "budget_left": 72650}
physim.run({"segments": [{"t": 200, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
physim.run({"segments": [{"t": 200, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 400, "budget_left": 72250}
physim.run({"segments": [{"t": 300, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 500, "budget_left": 71750}
physim.run({"segments": [{"t": 400, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 600, "budget_left": 71150}
physim.run({"segments": [{"t": 600, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 800, "budget_left": 70350}
physim.run({"segments": [{"t": 800, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1000, "budget_left": 69350}
physim.run({"segments": [{"t": 1400, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 1600, "budget_left": 67750}
physim.reset({})
{"budget_left": 67550}
physim.run({"segments": [{"t": 25, "u": [-0.3, -0.3, 0, -0.3, 0, -0.3, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 225, "budget_left": 67325}
physim.run({"segments": [{"t": 75, "u": [-0.3, -0.3, 0, -0.3, 0, -0.3, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
{"ticks_run": 275, "budget_left": 67050}
physim.run({"segments": [{"t": 100, "u": [-0.5, -0.5, 0, -0.5, 0, -0.5, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
<analysis>
Let me work through the conversation chronologically.
**User's task (single user message, the system/user prompt):** I am acting as a scientist studying an unknown dynamical system via `physim_*` MCP tools. I must explore, build a quantitative model in my workspace (/app), then call `physim_ready()` and answer every contract with `physim_answer()`. Budget 150,000 ticks. There is guidan
physim.run({"segments": [{"t": 100, "u": [-0.5, -0.5, 0, -0.5, 0, -0.5, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
physim.status({})
physim.run({"segments": [{"t": 100, "u": [-0.5, -0.5, 0, -0.5, 0, -0.5, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "\"all\""})
physim.status({})
{"budget_left": 66750, "phase": "explore"}
physim.run({"segments": [{"t": 20, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
{"ticks_run": 20, "budget_left": 66730}
physim.run({"segments": [{"t": 100, "u": [-0.7, -0.7, 0, -0.7, 0, -0.7, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
{"ticks_run": 250, "budget_left": 66480}
physim.run({"segments": [{"t": 300, "u": [1.0, -0.85, 0, 1.0, 0, -0.9, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
Negative drive has a sharp threshold: nothing at −0.5, full traversal at −0.7 for cells 0 and 3. Testing whether the path continues past the negative endpoint, and bracketing cells 1/5.
physim.run({"segments": [{"t": 300, "u": [1, -0.85, 0, 1, 0, -0.9, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
Negative drive has a sharp threshold: nothing at −0.5, full traversal at −0.7 for cells 0 and 3. Testing whether the path continues past the negative endpoint, and bracketing cells 1/5.
{"ticks_run": 450, "budget_left": 66030}
physim.run({"segments": [{"t": 60, "u": [1, 1, 0, 1, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
Key result: the negative endpoint is **terminal** — 300 ticks of u=+1 changed nothing. That lets me measure pure feedthrough there. Cells 0,1,3 are at the endpoint now.
{"ticks_run": 60, "budget_left": 65970}
Write: /app/sim/frozen_pos.py
Feedthrough at the terminal state is ~0. Let me persist all data to disk before continuing.
Write: /app/sim/rates.md
Write: /app/sim/rates.md
physim.reset({})
{"budget_left": 65770}
physim.run({"segments": [{"t": 500, "u": [1, 1, 0, 1, 0, 0, 0, 0]}, {"t": 150, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
{"ticks_run": 650, "budget_left": 65120}
physim.run({"segments": [{"t": 100, "u": [-0.5, -0.5, 0, -0.5, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
Reproducibility at σ=500 is excellent (±0.04). Now the feedthrough sweep at this mid-path state.
{"ticks_run": 100, "budget_left": 65020}
physim.reset({})
Feedthrough is ≈ linear in u, so `D(σ,u) = u·(DRIVEN₊₁(σ) − FROZEN(σ))`. Now a critical test: is the negative threshold a *rate* threshold, or does a brief kick self-complete to the terminal state?
{"budget_left": 64820}
physim.run({"segments": [{"t": 10, "u": [-0.7, 0, 0, -0.7, 0, 0, 0, 0]}, {"t": 10, "u": [0, 0, 0, -0.7, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 0, 6, 10, 32]})
{"ticks_run": 320, "budget_left": 64500}
physim.reset({})
Cell0 (10 ticks @ −0.7) stayed exactly at A; cell3 (20 ticks) went fully terminal. That's suspiciously bimodal. Testing kick-then-release directly:
{"budget_left": 64300}
physim.run({"segments": [{"t": 14, "u": [-0.7, 0, 0, -1, 0, 0, 0, 0]}, {"t": 6, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 0, 6, 10, 32]})
physim.run({"segments": [{"t": 14, "u": [-0.7, 0, 0, -1, 0, 0, 0, 0]}, {"t": 6, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 0, 6, 10, 32]})
{"ticks_run": 420, "budget_left": 63880}
physim.run({"segments": [{"t": 8, "u": [0, -0.75, 0, 0, 0, -1, 0, 0]}, {"t": 92, "u": [0, -0.75, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [13, 21, 22, 28, 3, 20, 24, 35]})
**Confirmed self-completion**: 14 ticks @ −0.7 (cell0) and 20 ticks @ −1 (cell3), both followed by release, ended at the terminal state — even though a *driven* read at 20 ticks showed almost no motion. The negative input is a **trigger**, not a rate.
{"ticks_run": 500, "budget_left": 63380}
physim.reset({})
{"budget_left": 63180}
physim.run({"segments": [{"t": 40, "u": [-0.6, -0.72, 0, -0.65, 0, -1, 0, 0]}, {"t": 160, "u": [-0.6, -0.72, 0, -0.65, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21)
{"ticks_run": 600, "budget_left": 62580}
physim.reset({})
{"budget_left": 62380}
physim.run({"segments": [{"t": 150, "u": [-0.65, -0.71, 0, -0.55, 0, -1, 0, 0]}, {"t": 50, "u": [-0.65, -0.71, 0, -0.55, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, )
{"ticks_run": 600, "budget_left": 61780}
physim.reset({})
Thresholds bracketed: θ₀≈0.62, θ₁≈0.705, θ₃≈0.60. Cell5 has no fast trigger. Now the runaway timecourse after release.
{"budget_left": 61580}
physim.run({"segments": [{"t": 20, "u": [-0.8, -0.8, 0, -0.8, 0, 0, 0, 0]}, {"t": 10, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
{"ticks_run": 30, "budget_left": 61550}
physim.run({"segments": [{"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
physim.run({"segments": [{"t": 30, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
{"ticks_run": 30, "budget_left": 61520}
physim.reset({})
Runaway completes within ~40 ticks of release. Now a large positive-rate calibration using per-port amplitudes.
{"budget_left": 61320}
physim.run({"segments": [{"t": 1000, "u": [0.8, 0.6, 0, 0.4, 0, 0.3, 0, 0]}, {"t": 600, "u": [0, 0.6, 0, 0.4, 0, 0.3, 0, 0]}, {"t": 1200, "u": [0, 0, 0, 0.4, 0, 0.3, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0,)
{"ticks_run": 3000, "budget_left": 58320}
physim.reset({})
Excellent fits: R₊(0.4)=0.286, R₊(0.6)=0.47, R₊(0.8)=0.65 — close to u^1.4. Cell5 confirmed non-monotone (R₅(0.3)≈1.2). Now weak-push amplitudes.
{"budget_left": 58120}
physim.run({"segments": [{"t": 2000, "u": [0.2, 0.15, 0, 0.1, 0, 0.15, 0, 0]}, {"t": 4000, "u": [0.2, 0.15, 0, 0.1, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 2)
{"ticks_run": 6200, "budget_left": 51920}
physim.run({"segments": [{"t": 3500, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
Fitted R₊(u) ≈ u^1.55 for cells 0,1,3. Now extending the positive path to find its asymptote (continuing from the current state, no reset needed).
{"ticks_run": 3500, "budget_left": 48420}
physim.run({"segments": [{"t": 3000, "u": [1, 1, 0, 1, 0, 1, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
{"ticks_run": 3000, "budget_left": 45420}
physim.run({"segments": [{"t": 2500, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
physim.run({"segments": [{"t": 2500, "u": [1, 1, 0, 1, 0, 1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
{"ticks_run": 2800, "budget_left": 42620}
physim.run({"segments": [{"t": 20, "u": [-0.8, -0.8, 0, -0.8, 0, -1, 0, 0]}, {"t": 100, "u": [0, 0, 0, 0, 0, -1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0,)
The positive asymptote is **distinct** from the negative terminal — differing mainly in ch27, ch22 (and hugely for cell5). Testing the trigger from the saturated state:
{"ticks_run": 420, "budget_left": 42200}
physim.run({"segments": [{"t": 60, "u": [-1, -1, 0, -1, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
Notable: at the positive asymptote, a −0.8 trigger does **nothing** — both endpoints are absorbing. Testing a stronger trigger there:
{"ticks_run": 260, "budget_left": 41940}
physim.reset({})
Both endpoints are absorbing. Now: at what σ does the cell become immune to the trigger? Testing σ=500, 2000, 4000 simultaneously on three ports.
{"budget_left": 41740}
physim.run({"segments": [{"t": 500, "u": [1, 1, 0, 1, 0, -1, 0, 0]}, {"t": 1500, "u": [0, 1, 0, 1, 0, 0, 0, 0]}, {"t": 2000, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 20, "u": [-0.8, -0.8, 0, -0.8, 0, 0, 0, 0]}, {"t)
{"ticks_run": 4320, "budget_left": 37420}
physim.reset({})
Trigger succeeded at σ=500 but failed at σ=2000. Mapping where immunity sets in:
{"budget_left": 37220}
physim.run({"segments": [{"t": 1000, "u": [1, 1, 0, 1, 0, 0, 0, 0]}, {"t": 500, "u": [0, 1, 0, 1, 0, 0, 0, 0]}, {"t": 500, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 20, "u": [-0.8, -0.8, 0, -1, 0, 0, 0, 0]}, {"t": 3)
physim.run({"segments": [{"t": 1000, "u": [1, 1, 0, 1, 0, 0, 0, 0]}, {"t": 500, "u": [0, 1, 0, 1, 0, 0, 0, 0]}, {"t": 500, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 20, "u": [-0.8, -0.8, 0, -1, 0, 0, 0, 0]}, {"t": 3)
{"ticks_run": 2320, "budget_left": 34900}
physim.reset({})
Immunity sets in between σ=500 and σ=1000 — even −1.0 fails at σ=2000. Testing a much larger dose there:
{"budget_left": 34700}
physim.run({"segments": [{"t": 700, "u": [1, 1, 0, 1, 0, 0, 0, 0]}, {"t": 300, "u": [0, 1, 0, 1, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 100, "u": [-1, -1, 0, -1, 0, 0, 0, 0]}, {"t": 300, )
{"ticks_run": 1700, "budget_left": 33000}
physim.reset({})
Immunity boundary is σ≈850. Now characterizing cell5's negative dynamics plus port 7's effect on cell1.
{"budget_left": 32800}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, -1, 0, 1]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 20, 24, 35, 13, 21, 22, 28]})
{"ticks_run": 600, "budget_left": 32200}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, -1, 0, 1]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 20, 24, 35, 13, 21, 22, 28]})
{"ticks_run": 600, "budget_left": 31600}
physim.run({"segments": [{"t": 700, "u": [0, 0, 0, 0, 0, -1, 0, 1]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 20, 24, 35, 13, 21, 22, 28]})
{"ticks_run": 1100, "budget_left": 30500}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 0, 0, 0, -1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 20, 24, 35]})
Port 7 is a weak positive driver of cell1 (≈0.095× port1's rate). Cell5's negative response is a slow *rate*, not a trigger. Finishing cell5's negative path:
{"ticks_run": 1300, "budget_left": 29200}
Write: /app/sim/model.py
Write: /app/sim/model.py
physim.reset({})
Validation: predicting a 4-stage protocol *before* running it.
physim.reset({})
Validation: predicting a 4-stage protocol *before* running it.
{"budget_left": 29000}
physim.run({"segments": [{"t": 800, "u": [0.5, 0.3, 0, 0.7, 0, -0.8, 0, 0]}, {"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [-0.9, 0, 0, 0.4, 0, 0, 0, 1]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}],)
{"ticks_run": 2000, "budget_left": 27000}
Edit: /app/sim/model.py
Validation is strong — median error 0.015. Only cell3's rate at u=0.7 was underestimated. Updating R₊ to a measured lookup table:
Edit: /app/sim/model.py
Validation is strong — median error 0.015. Only cell3's rate at u=0.7 was underestimated. Updating R₊ to a measured lookup table:
physim.reset({})
physim.reset({})
{"budget_left": 26800}
physim.run({"segments": [{"t": 2100, "u": [0.9, 0.15, 0, 0.25, 0, 0.6, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32, 3, 20, 24, 35]})
{"ticks_run": 2100, "budget_left": 24700}
Rates at low amplitude run slightly high; updating. Now pinning the trigger thresholds at the likely contract values:
Rates at low amplitude run slightly high; updating. Now pinning the trigger thresholds at the likely contract values:
physim.reset({})
{"budget_left": 24500}
physim.run({"segments": [{"t": 200, "u": [-0.63, -0.68, 0, -0.6, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 17, 27, 33, 13, 21, 22, 28, 0, 6, 10, 32]})
{"ticks_run": 500, "budget_left": 24000}
Thresholds refined (θ₀≈0.615, θ₁≈0.68, θ₃≈0.625 — with genuine draw-to-draw jitter near threshold). Finalizing the model and ending exploration.
Thresholds refined (θ₀≈0.615, θ₁≈0.68, θ₃≈0.625 — with genuine draw-to-draw jitter near threshold). Finalizing the model and ending exploration.
physim.ready({})
Model validates at 0.021 mean absolute error. Ending exploration.
{"phase": "answer"}
Contracts received. Note ports 2/4/6 and 20 of the sensors are inert — several contracts exploit that. Computing predictions:
Contracts received. Note ports 2/4/6 and 20 of the sensors are inert — several contracts exploit that. Computing predictions:
physim.answer({"answers": [{"id": 0, "mean": -0.3, "low": -0.37, "high": -0.23}, {"id": 1, "mean": 0.514, "low": 0.45, "high": 0.58}, {"id": 2, "mean": -0.16, "low": -0.22, "high": -0.1}, {"id": 3, "mean": 0.514, ")
All contracts resolved. Several target inert channels/ports (ch8, ch29, port2), several land on the absorbing terminal state, and both preparation targets already contain the baseline. Submitting:
{"received": 16}
physim.answer_prep({"id": 100, "code": "def policy(t, y, mem):\n # ch24 baseline (~-0.16) sits at the centre of the target band [-0.514, 0.187].\n # Channel 24 belongs to cell5, which only moves under sustained dr)
physim.answer_prep({"id": 101, "code": "def policy(t, y, mem):\n # Channel 7 is one of the 20 inert sensors: no input port moves it.\n # Its fixed value (~-0.612) is already inside the band [-1.044, -0.141].\n )
physim.submit_theory({"code": "\nSIG = [0, 150, 300, 500, 800, 1200, 1800, 2600, 4000, 9500]\n\nF = {\n 1:[0.339,0.341,0.360,0.369,0.230,-0.016,-0.102,-0.147,-0.128,-0.136],\n 17:[-0.248,-0.209,-0.119,0.031,0.427,0.597,0.)
Write: /app/sim/notes.md
Write: /app/sim/notes.md
Write: /app/sim/notes.md
All 16 prediction contracts answered, both preparation policies submitted, and an executable theory registered.
## What the system turned out to be
**Topology.** 8 ports drive only 4 independent 4-sensor "cells" (ports 0, 1, 3, 5); ports 2, 4, 6 are inert, port 7 is a weak 0.095× auxiliary input to cell1, and 20 of the 36 sensors never move. Every `reset()` returns to the same baseline state A,
openai/gpt-5.2 · C2 seed 0 · tier tools · accuracy 0.82 · budget 13%
S1=0.71 · S2=0.73 · S3=0.91 · S4=0.91 · coverage 0.95 · 91 nodes
Narrative experiment log
- ✗ free run rejected: series observation limited to <=6 channels.
- 2× free run (1,000 ticks; 500 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (300 ticks; 300 ticks, all inputs 0).
- Single-port probe (300 ticks; port 0 at +0.10, 300t) — ch30 +0.28→-0.46, ch15 -0.01→-0.40, ch38 +0.42→+0.63.
- Free run (300 ticks; 300 ticks, all inputs 0) — ch15 -0.40→+0.29, ch37 +0.30→+0.09.
- Reset to fresh initial conditions (−200 ticks).
- ✗ closed-loop policy rejected: t must be an int in [1, 5000].
- Reset to fresh initial conditions (−200 ticks).
- Ramp sweep (7,400 ticks; 7400 ticks, peak mean drive -0.28).
- Reset to fresh initial conditions (−200 ticks).
- Ramp sweep (7,400 ticks; 7400 ticks, peak mean drive -0.28).
- Reset to fresh initial conditions (−200 ticks).
- Ramp sweep (7,400 ticks; 7400 ticks, peak mean drive -0.28).
- Ended exploration → received 20 prediction contracts.
- Submitted 20 contract answers.
Agent-written files (its instruments & theories)
app/data/id_meta.json (629 chars)
{
"base_seed": 123,
"ticks": 10950,
"n_inputs": 8,
"schedule": [
[
"settle",
400,
1,
[
0.0
]
],
[
"prbs_small",
2400,
20,
[
-0.2,
0.0,
0.2
]
],
[
"rest1",
200,
1,
[
0.0
]
],
[
"prbs_med",
2500,
25,
[
-0.6,
-0.2,
0.0,
0.2,
0.6
]
],
[
"rest2",
250,
1,
[
0.0
]
],
[
"pulses",
5200,
1,
[
0.0
]
]
]
}
app/data/protocol2_202.json (9,324 chars)
[{"t": 400, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 100, "u_start": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "u_end": [-0.24594000012201234, -0.09015054724094562, 0.5052082137223217, 0.2999866892535781, -0.31931841406240713, -0.09577321957067098, 0.1016173091892375, 0.5387821027802202]}, {"t": 100, "u_start": [-0.24594000012201234, -0.09015054724094562, 0.5052082137223217, 0.2999866892535781, -0.31931841406240713, -0.09577321957067098, 0.1016173091892375, 0.5387821027802202], "u_end": [-0.46016191134760853, 0.6632044318777746, -0.2953528747503972, 0.44521089504073497, 0.03958711350532251, -0.241733259368611, 0.09168569833931683, -0.022613866459067156]}, {"t": 100, "u_start": [-0.46016191134760853, 0.6632044318777746, -0.2953528747503972, 0.44521089504073497, 0.03958711350532251, -0.241733259368611, 0.09168569833931683, -0.022613866459067156], "u_end": [-0.5560456787531609, -0.08402793514090523, 0.6845488207397692, 0.25308652632946016, -0.6080761954321426, 0.32233722711417956, 0.3190203395516029, -0.008096268221820635]}, {"t": 100, "u_start": [-0.5560456787531609, -0.08402793514090523, 0.6845488207397692, 0.25308652632946016, -0.6080761954321426, 0.32233722711417956, 0.3190203395516029, -0.008096268221820635], "u_end": [-0.752958688621467, 0.08691070814844704, -0.3482504067986749, 0.0683338635386821, -0.19152518667029583, -0.1558825656371512, 0.7000198126549286, 0.7105032165284828]}, {"t": 100, "u_start": [-0.752958688621467, 0.08691070814844704, -0.3482504067986749, 0.0683338635386821, -0.19152518667029583, -0.1558825656371512, 0.7000198126549286, 0.7105032165284828], "u_end": [-0.5240549392943171, -0.4050041204363488, 0.7751686283042374, 0.08957958978359903, 0.30060345227143004, 0.1411339871258519, -0.6044266616829983, 0.08444433229053527]}, {"t": 100, "u_start": [-0.5240549392943171, -0.4050041204363488, 0.7751686283042374, 0.08957958978359903, 0.30060345227143004, 0.1411339871258519, -0.6044266616829983, 0.08444433229053527], "u_end": [-0.7309398931029059, -0.7983526051294314, -0.7684351969147661, 0.005375756768240647, -0.6572609664710841, -0.7438157913347923, -0.6453317996169586, 0.03865581919304195]}, {"t": 100, "u_start": [-0.7309398931029059, -0.7983526051294314, -0.7684351969147661, 0.005375756768240647, -0.6572609664710841, -0.7438157913347923, -0.6453317996169586, 0.03865581919304195], "u_end": [0.21200670831148694, -0.4552008981881384, 0.6641311418317533, -0.5089325389136552, -0.10699658177817317, 0.2238799913701377, 0.19856327895436543, -0.47199702148269246]}, {"t": 100, "u_start": [0.21200670831148694, -0.4552008981881384, 0.6641311418317533, -0.5089325389136552, -0.10699658177817317, 0.2238799913701377, 0.19856327895436543, -0.47199702148269246], "u_end": [-0.48505041695662465, -0.38954975695018224, 0.1064521973902961, 0.5417760290010316, -0.5227574435032507, -0.01939468636816455, -0.44697793268973385, 0.4477659904147593]}, {"t": 100, "u_start": [-0.48505041695662465, -0.38954975695018224, 0.1064521973902961, 0.5417760290010316, -0.5227574435032507, -0.01939468636816455, -0.44697793268973385, 0.4477659904147593], "u_end": [-0.167444230557251, -0.5528794590194398, 0.27613422762584605, 0.06350717058735678, 0.26263655126386865, -0.45108465731327263, -0.3762270367494555, -0.2853842924729696]}, {"t": 100, "u_start": [-0.167444230557251, -0.5528794590194398, 0.27613422762584605, 0.06350717058735678, 0.26263655126386865, -0.45108465731327263, -0.3762270367494555, -0.2853842924729696], "u_end": [0.5502071791072491, -0.3356832905723236, 0.30220996598576955, 0.20574140670542862, 0.2735975952229295, -0.09176495842917942, 0.40832818095314916, -0.029656426151540183]}, {"t": 100, "u_start": [0.5502071791072491, -0.3356832905723236, 0.30220996598576955, 0.20574140670542862, 0.2735975952229295, -0.09176495842917942, 0.40832818095314916, -0.029656426151540183], "u_end": [-0.3851826227121752, -0.0015486123896879533, 0.29828562196849817, -0.6093016361672412, 0.36836967934563947, 0.015197311616651055, 0.6465362080602963, 0.0385018760031437]}, {"t": 100, "u_start": [-0.3851826227121752, -0.0015486123896879533, 0.29828562196849817, -0.6093016361672412, 0.36836967934563947, 0.015197311616651055, 0.6465362080602963, 0.0385018760031437], "u_end": [0.6108590816532813, -0.5147511691948607, -0.5855359705854449, -0.010741892499792294, -0.7942103242813874, -0.006878315791837841, -0.6312870378697089, 0.5323203273930353]}, {"t": 100, "u_start": [0.6108590816532813, -0.5147511691948607, -0.5855359705854449, -0.010741892499792294, -0.7942103242813874, -0.006878315791837841, -0.6312870378697089, 0.5323203273930353], "u_end": [0.41856472191465666, -0.07598357062951033, -0.5945048605292232, 0.4993832877827289, 0.7956282078209402, 0.022100086190481427, -0.2622411086795634, -0.14298203424429246]}, {"t": 100, "u_start": [0.41856472191465666, -0.07598357062951033, -0.5945048605292232, 0.4993832877827289, 0.7956282078209402, 0.022100086190481427, -0.2622411086795634, -0.14298203424429246], "u_end": [0.46569021524657783, -0.4800659978235931, -0.526481750187633, -0.468599332478888, 0.5642185340729142, 0.3763755100062802, 0.7199445098061543, 0.6815437692755839]}, {"t": 100, "u_start": [0.46569021524657783, -0.4800659978235931, -0.526481750187633, -0.468599332478888, 0.5642185340729142, 0.3763755100062802, 0.7199445098061543, 0.6815437692755839], "u_end": [0.08953146562205205, -0.3943022404860278, 0.2231133789662787, 0.5665182954981078, 0.5379915287915498, -0.7564665944603344, 0.7786512707290785, -0.08515540605309035]}, {"t": 100, "u_start": [0.08953146562205205, -0.3943022404860278, 0.2231133789662787, 0.5665182954981078, 0.5379915287915498, -0.7564665944603344, 0.7786512707290785, -0.08515540605309035], "u_end": [-0.42577091920321114, -0.34933158440668066, 0.7002527585292102, -0.3149831040906126, -0.14970959112286886, -0.5905174233732231, -0.05347429820494809, 0.23300718120871844]}, {"t": 100, "u_start": [-0.42577091920321114, -0.34933158440668066, 0.7002527585292102, -0.3149831040906126, -0.14970959112286886, -0.5905174233732231, -0.05347429820494809, 0.23300718120871844], "u_end": [-0.04870241151371635, -0.2831046949832595, 0.15373145937665067, -0.18279870682719435, -0.22876899182773147, -0.2782665172555475, -0.07428264345427316, -0.07279193156188113]}, {"t": 100, "u_start": [-0.04870241151371635, -0.2831046949832595, 0.15373145937665067, -0.18279870682719435, -0.22876899182773147, -0.2782665172555475, -0.07428264345427316, -0.07279193156188113], "u_end": [0.7457173647373563, -0.49429256594571386, 0.558069374951988, 0.44213449614745204, 0.4853502791488562, 0.6908563929683103, -0.46857914935928113, 0.772056414915337]}, {"t": 100, "u_start": [0.7457173647373563, -0.49429256594571386, 0.558069374951988, 0.44213449614745204, 0.4853502791488562, 0.6908563929683103, -0.46857914935928113, 0.772056414915337], "u_end": [-0.23232042815674614, 0.7994766112297265, -0.3362837173291084, -0.3634250395260512, -0.03573510634791999, 0.14291847494975607, -0.6717143343798274, -0.4395022731301248]}, {"t": 100, "u_start": [-0.23232042815674614, 0.7994766112297265, -0.3362837173291084, -0.3634250395260512, -0.03573510634791999, 0.14291847494975607, -0.6717143343798274, -0.4395022731301248], "u_end": [0.2563869477999581, 0.24652103901192057, 0.11673800107658783, 0.08845065946044817, 0.3768347728477286, 0.6460449115309053, -0.4019762833397817, 0.053261658039887694]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]}, {"t": 100, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]
app/data/protocol2_202_meta.json (103 chars)
{
"seed": 202,
"n_segments": 54,
"ticks": 7400,
"note": "Ramped random + single-input pulses"
}
app/data/protocol_123.json (15,484 chars)
[{"t": 400, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.0, -0.2, 0.2, -0.2, -0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, 0.0, 0.2, 0.0, 0.2, 0.0, -0.2]}, {"t": 20, "u": [0.2, 0.2, 0.2, 0.2, -0.2, 0.0, -0.2, -0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.2, -0.2, 0.0, 0.2, -0.2, 0.0]}, {"t": 20, "u": [0.0, 0.2, 0.2, -0.2, 0.2, 0.2, -0.2, 0.0]}, {"t": 20, "u": [0.2, -0.2, -0.2, -0.2, -0.2, 0.0, -0.2, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.0, -0.2, -0.2, 0.0, -0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.2, -0.2, 0.0, 0.0, 0.2, 0.0, 0.2]}, {"t": 20, "u": [0.0, -0.2, -0.2, 0.2, -0.2, 0.2, 0.0, -0.2]}, {"t": 20, "u": [0.0, 0.2, 0.0, 0.2, 0.2, -0.2, 0.0, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.0, 0.0, 0.2, -0.2, 0.0, 0.2]}, {"t": 20, "u": [0.2, -0.2, 0.2, -0.2, 0.0, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, 0.0, 0.2, -0.2, -0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, 0.0, 0.0, 0.0, 0.0, -0.2, 0.0]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.0, -0.2, -0.2, 0.0, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, 0.2, 0.0, 0.0, 0.2, 0.0]}, {"t": 20, "u": [0.2, 0.0, 0.0, -0.2, 0.0, 0.0, 0.0, 0.0]}, {"t": 20, "u": [0.0, 0.2, 0.0, 0.0, 0.2, 0.0, -0.2, 0.0]}, {"t": 20, "u": [0.0, 0.0, 0.0, 0.0, 0.2, -0.2, 0.2, 0.0]}, {"t": 20, "u": [0.0, 0.0, -0.2, 0.2, -0.2, 0.0, -0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, 0.2, 0.2, 0.2, -0.2, -0.2, 0.0]}, {"t": 20, "u": [0.2, -0.2, -0.2, 0.2, -0.2, 0.2, -0.2, -0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.2, 0.0, 0.0, 0.2, -0.2, 0.2]}, {"t": 20, "u": [0.2, 0.0, 0.2, -0.2, 0.0, -0.2, -0.2, 0.0]}, {"t": 20, "u": [-0.2, -0.2, 0.0, 0.2, -0.2, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, 0.0, -0.2, 0.2, -0.2, -0.2]}, {"t": 20, "u": [0.2, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, -0.2]}, {"t": 20, "u": [0.2, 0.2, -0.2, -0.2, 0.2, 0.2, 0.0, -0.2]}, {"t": 20, "u": [0.2, -0.2, 0.0, -0.2, 0.0, 0.0, 0.0, -0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, 0.0, -0.2, 0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.0, 0.0, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.0, -0.2, -0.2, 0.0, 0.2, 0.0]}, {"t": 20, "u": [0.2, -0.2, 0.0, -0.2, -0.2, 0.0, 0.0, 0.0]}, {"t": 20, "u": [-0.2, -0.2, 0.0, -0.2, -0.2, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, -0.2, -0.2, 0.2, 0.0, -0.2, 0.0, -0.2]}, {"t": 20, "u": [0.2, 0.2, 0.2, -0.2, -0.2, 0.2, -0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, 0.2, 0.2, -0.2, 0.2, 0.0, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.2, -0.2, -0.2, -0.2, -0.2, 0.0]}, {"t": 20, "u": [-0.2, 0.0, -0.2, -0.2, 0.0, 0.0, -0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, -0.2, -0.2, 0.2, 0.2, 0.2]}, {"t": 20, "u": [0.0, -0.2, 0.2, 0.2, -0.2, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, -0.2, 0.2, -0.2, -0.2, 0.2, 0.2]}, {"t": 20, "u": [0.2, -0.2, 0.2, 0.0, 0.2, -0.2, 0.2, 0.0]}, {"t": 20, "u": [0.0, 0.0, -0.2, 0.0, 0.0, 0.2, 0.0, 0.0]}, {"t": 20, "u": [0.2, 0.2, 0.2, 0.2, -0.2, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.2, 0.0, -0.2, -0.2, 0.2, 0.0, 0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, 0.2, 0.2, 0.2, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.2, 0.2, 0.2, 0.0, 0.2, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.2, 0.2, 0.2, -0.2, 0.0, 0.0, -0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.2, -0.2, -0.2, -0.2, 0.0, -0.2]}, {"t": 20, "u": [0.0, 0.2, 0.0, -0.2, -0.2, 0.0, 0.2, 0.0]}, {"t": 20, "u": [-0.2, -0.2, -0.2, -0.2, -0.2, -0.2, 0.2, 0.2]}, {"t": 20, "u": [0.2, 0.2, -0.2, 0.0, -0.2, 0.0, 0.0, 0.0]}, {"t": 20, "u": [0.2, 0.0, 0.0, 0.2, 0.2, 0.2, 0.2, -0.2]}, {"t": 20, "u": [-0.2, -0.2, -0.2, 0.2, 0.2, 0.0, -0.2, 0.2]}, {"t": 20, "u": [0.2, 0.0, 0.0, -0.2, 0.0, 0.2, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, 0.2, -0.2, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, 0.0, -0.2, 0.2, -0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.0, 0.2, 0.2, -0.2, 0.0, -0.2, 0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.2, 0.0, 0.2, 0.2, -0.2, 0.2]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.2, 0.0, -0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, -0.2, 0.0, 0.0, 0.0, -0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, 0.2, 0.0, 0.0, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, 0.2, 0.2, 0.0, -0.2, 0.0]}, {"t": 20, "u": [0.2, 0.2, 0.2, -0.2, -0.2, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, 0.2, -0.2, -0.2, -0.2, -0.2, -0.2, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.0, -0.2, 0.0, 0.0, 0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.2, -0.2, 0.0, 0.2, 0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, -0.2, 0.2, 0.2, -0.2, 0.2, 0.2]}, {"t": 20, "u": [0.0, -0.2, -0.2, -0.2, -0.2, 0.2, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.0, 0.0, 0.0, -0.2, -0.2, -0.2]}, {"t": 20, "u": [0.0, -0.2, 0.2, -0.2, 0.0, -0.2, -0.2, -0.2]}, {"t": 20, "u": [0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, -0.2, 0.2, -0.2, 0.2, 0.2, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.2, 0.2, -0.2, 0.0, 0.0, 0.0]}, {"t": 20, "u": [-0.2, -0.2, 0.0, 0.0, 0.2, 0.0, -0.2, 0.0]}, {"t": 20, "u": [0.0, 0.0, -0.2, 0.0, 0.0, 0.0, 0.2, 0.2]}, {"t": 20, "u": [-0.2, -0.2, -0.2, 0.2, -0.2, -0.2, 0.2, 0.2]}, {"t": 20, "u": [0.2, 0.0, 0.0, -0.2, -0.2, 0.2, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.2, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.0, -0.2, -0.2, 0.2, -0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.0, 0.0, 0.2, -0.2, -0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.2, 0.0, -0.2, 0.2, 0.2, -0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.0, 0.2, -0.2, 0.0, 0.2, 0.0]}, {"t": 20, "u": [0.2, 0.0, 0.2, 0.2, -0.2, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.0, 0.2, 0.2, 0.2, -0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, 0.2, -0.2, 0.2, 0.0, -0.2, -0.2]}, {"t": 20, "u": [0.2, -0.2, 0.0, 0.0, 0.0, -0.2, -0.2, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.0, -0.2, 0.0, -0.2, 0.0, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, -0.2, -0.2, 0.2, 0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.0, -0.2, 0.0, -0.2, -0.2, 0.0, -0.2]}, {"t": 20, "u": [0.2, 0.2, 0.0, -0.2, 0.0, 0.0, 0.0, 0.0]}, {"t": 20, "u": [0.0, 0.2, 0.2, 0.2, 0.2, -0.2, -0.2, -0.2]}, {"t": 20, "u": [-0.2, -0.2, -0.2, 0.2, 0.0, -0.2, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.0, -0.2, -0.2, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, 0.0, -0.2, 0.0, -0.2, 0.0, 0.0, 0.2]}, {"t": 20, "u": [0.2, -0.2, -0.2, -0.2, -0.2, 0.0, 0.2, -0.2]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.2, -0.2, -0.2, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.0, 0.0, 0.2, 0.2, -0.2, 0.2, 0.0]}, {"t": 20, "u": [0.2, 0.0, -0.2, 0.2, 0.2, 0.2, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.0, -0.2, 0.2, 0.0, 0.2, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.0, 0.2, 0.2, 0.2, 0.2, 0.2]}, {"t": 20, "u": [0.2, 0.2, -0.2, 0.2, 0.0, 0.2, 0.2, 0.0]}, {"t": 20, "u": [0.0, -0.2, 0.0, 0.2, 0.0, 0.2, 0.0, -0.2]}, {"t": 20, "u": [-0.2, 0.0, 0.2, -0.2, 0.0, 0.0, -0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, 0.0, -0.2, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, -0.2, -0.2, -0.2, 0.0, 0.2, 0.0]}, {"t": 20, "u": [-0.2, 0.2, 0.2, -0.2, 0.0, -0.2, -0.2, 0.0]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.0, -0.2, 0.0, 0.0, 0.2]}, {"t": 20, "u": [0.0, -0.2, -0.2, -0.2, 0.2, 0.2, -0.2, 0.2]}, {"t": 20, "u": [0.0, 0.2, -0.2, 0.2, 0.0, 0.2, 0.0, 0.2]}, {"t": 20, "u": [-0.2, 0.2, 0.0, 0.0, 0.2, 0.2, -0.2, 0.2]}, {"t": 20, "u": [0.0, -0.2, -0.2, 0.2, 0.2, 0.0, -0.2, -0.2]}, {"t": 20, "u": [-0.2, -0.2, 0.2, 0.2, -0.2, 0.0, -0.2, 0.2]}, {"t": 20, "u": [-0.2, 0.0, 0.0, 0.2, 0.0, 0.2, -0.2, -0.2]}, {"t": 20, "u": [0.2, 0.2, 0.2, 0.0, -0.2, -0.2, 0.0, 0.0]}, {"t": 20, "u": [-0.2, -0.2, 0.0, 0.0, 0.2, 0.2, 0.0, 0.0]}, {"t": 20, "u": [-0.2, 0.0, 0.2, 0.2, -0.2, 0.2, 0.0, -0.2]}, {"t": 20, "u": [-0.2, 0.0, -0.2, -0.2, 0.0, 0.0, 0.2, 0.2]}, {"t": 20, "u": [0.0, 0.0, 0.2, 0.2, -0.2, 0.0, 0.0, 0.2]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 25, "u": [0.0, -0.2, 0.6, 0.0, 0.0, 0.2, 0.6, -0.2]}, {"t": 25, "u": [0.6, 0.0, 0.6, -0.2, 0.6, 0.6, 0.0, 0.2]}, {"t": 25, "u": [0.6, 0.2, 0.6, 0.6, -0.6, 0.0, 0.6, 0.6]}, {"t": 25, "u": [0.6, -0.6, 0.6, 0.6, -0.6, 0.2, 0.0, 0.0]}, {"t": 25, "u": [0.6, -0.2, -0.2, -0.2, -0.6, 0.6, -0.2, -0.2]}, {"t": 25, "u": [0.0, 0.6, 0.6, -0.6, -0.6, 0.6, 0.2, 0.6]}, {"t": 25, "u": [-0.6, -0.2, 0.6, 0.6, 0.2, -0.2, 0.2, -0.6]}, {"t": 25, "u": [0.2, 0.0, 0.6, 0.6, 0.0, -0.6, 0.6, 0.2]}, {"t": 25, "u": [-0.2, -0.6, -0.2, 0.2, -0.2, -0.6, -0.2, 0.6]}, {"t": 25, "u": [-0.2, 0.6, 0.0, 0.6, 0.6, 0.6, -0.6, -0.2]}, {"t": 25, "u": [0.6, 0.0, 0.2, -0.2, 0.2, 0.0, 0.6, -0.2]}, {"t": 25, "u": [-0.6, 0.6, 0.0, 0.0, -0.6, -0.2, 0.2, 0.6]}, {"t": 25, "u": [-0.6, -0.2, -0.6, 0.0, -0.6, 0.2, 0.0, 0.2]}, {"t": 25, "u": [-0.6, 0.0, 0.2, -0.2, -0.2, 0.2, 0.2, -0.6]}, {"t": 25, "u": [-0.2, 0.2, 0.6, 0.2, 0.0, 0.2, -0.6, -0.2]}, {"t": 25, "u": [0.0, -0.2, -0.6, -0.2, -0.6, 0.2, 0.0, 0.2]}, {"t": 25, "u": [0.0, 0.2, 0.0, 0.6, -0.2, 0.6, -0.6, 0.0]}, {"t": 25, "u": [0.6, 0.2, 0.0, 0.2, 0.2, 0.0, 0.6, -0.6]}, {"t": 25, "u": [0.2, 0.0, 0.2, -0.2, -0.6, 0.6, -0.6, 0.2]}, {"t": 25, "u": [-0.2, -0.6, 0.0, -0.6, 0.2, -0.6, 0.2, 0.2]}, {"t": 25, "u": [0.0, 0.6, 0.6, -0.2, 0.6, -0.6, 0.6, 0.2]}, {"t": 25, "u": [-0.2, 0.0, -0.2, 0.2, -0.6, 0.0, 0.2, 0.6]}, {"t": 25, "u": [-0.6, 0.0, 0.6, 0.6, 0.6, 0.2, -0.2, 0.2]}, {"t": 25, "u": [-0.2, 0.2, -0.2, 0.0, 0.0, -0.2, 0.6, -0.2]}, {"t": 25, "u": [0.2, -0.6, 0.2, -0.6, 0.0, 0.0, 0.6, 0.6]}, {"t": 25, "u": [0.0, 0.2, -0.6, -0.2, 0.0, 0.0, -0.2, 0.6]}, {"t": 25, "u": [-0.6, 0.2, -0.2, 0.2, 0.0, 0.6, 0.0, 0.6]}, {"t": 25, "u": [-0.6, 0.2, -0.6, 0.6, 0.2, -0.6, 0.6, 0.2]}, {"t": 25, "u": [-0.2, -0.6, -0.6, -0.2, -0.6, -0.2, 0.2, -0.6]}, {"t": 25, "u": [0.0, 0.2, -0.6, -0.2, 0.6, -0.6, -0.6, -0.2]}, {"t": 25, "u": [0.0, -0.6, 0.2, 0.6, 0.0, 0.6, -0.2, -0.2]}, {"t": 25, "u": [0.2, 0.2, -0.6, -0.6, -0.6, -0.2, 0.0, 0.2]}, {"t": 25, "u": [-0.6, -0.2, 0.6, -0.2, -0.6, -0.6, 0.6, -0.6]}, {"t": 25, "u": [0.2, -0.6, 0.2, -0.2, 0.0, 0.0, 0.6, 0.0]}, {"t": 25, "u": [0.6, -0.2, 0.2, 0.0, 0.0, -0.6, -0.6, 0.0]}, {"t": 25, "u": [-0.2, 0.2, -0.6, 0.2, -0.6, 0.6, -0.2, 0.0]}, {"t": 25, "u": [-0.2, 0.6, 0.6, 0.6, 0.2, -0.6, -0.2, 0.0]}, {"t": 25, "u": [0.0, -0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6]}, {"t": 25, "u": [0.0, -0.6, 0.6, 0.0, 0.0, -0.2, 0.2, 0.2]}, {"t": 25, "u": [-0.6, 0.0, 0.2, 0.0, 0.0, -0.6, -0.2, 0.6]}, {"t": 25, "u": [0.2, -0.2, -0.2, -0.2, -0.2, -0.2, -0.6, -0.2]}, {"t": 25, "u": [-0.2, -0.2, 0.0, -0.2, 0.6, 0.0, 0.2, 0.6]}, {"t": 25, "u": [-0.2, 0.6, 0.6, 0.2, 0.2, 0.0, -0.2, 0.2]}, {"t": 25, "u": [0.0, 0.0, -0.6, -0.6, 0.0, -0.6, 0.6, 0.0]}, {"t": 25, "u": [0.6, -0.6, -0.6, -0.6, -0.2, 0.2, -0.2, 0.6]}, {"t": 25, "u": [0.6, -0.6, 0.2, 0.2, 0.6, 0.0, -0.6, -0.6]}, {"t": 25, "u": [-0.6, 0.2, -0.6, 0.2, -0.6, 0.6, -0.6, 0.2]}, {"t": 25, "u": [-0.6, 0.2, -0.6, -0.2, 0.6, 0.0, -0.2, 0.2]}, {"t": 25, "u": [0.2, -0.6, 0.0, -0.6, 0.0, -0.2, -0.2, 0.2]}, {"t": 25, "u": [0.0, 0.0, -0.6, -0.2, -0.2, 0.2, -0.2, 0.2]}, {"t": 25, "u": [0.6, -0.6, -0.6, 0.2, -0.2, -0.2, 0.6, 0.0]}, {"t": 25, "u": [0.2, -0.6, -0.2, 0.0, -0.6, -0.2, 0.6, 0.2]}, {"t": 25, "u": [0.0, 0.0, -0.2, 0.6, 0.0, -0.6, -0.6, 0.0]}, {"t": 25, "u": [-0.6, 0.0, 0.6, 0.0, 0.2, 0.2, 0.0, 0.0]}, {"t": 25, "u": [-0.6, 0.2, -0.6, -0.2, -0.2, -0.6, 0.2, 0.2]}, {"t": 25, "u": [-0.6, 0.0, -0.2, -0.2, -0.6, 0.0, 0.6, 0.2]}, {"t": 25, "u": [-0.6, -0.2, -0.2, -0.6, -0.6, 0.6, 0.2, -0.6]}, {"t": 25, "u": [0.0, -0.2, -0.2, -0.2, 0.6, 0.6, 0.0, -0.2]}, {"t": 25, "u": [0.6, -0.2, -0.6, -0.6, 0.0, 0.2, -0.2, 0.0]}, {"t": 25, "u": [-0.2, -0.6, 0.2, 0.0, -0.2, 0.6, 0.6, 0.6]}, {"t": 25, "u": [-0.2, 0.0, -0.2, -0.2, 0.0, 0.0, 0.6, 0.0]}, {"t": 25, "u": [0.0, 0.6, -0.6, -0.6, -0.6, -0.2, -0.2, 0.0]}, {"t": 25, "u": [0.2, 0.2, 0.2, 0.2, 0.0, 0.2, 0.6, 0.0]}, {"t": 25, "u": [0.2, 0.0, -0.2, -0.2, 0.6, 0.6, -0.6, 0.0]}, {"t": 25, "u": [0.2, -0.2, 0.0, 0.2, -0.2, 0.2, 0.0, -0.2]}, {"t": 25, "u": [-0.6, -0.6, -0.6, -0.6, 0.0, 0.6, -0.6, -0.6]}, {"t": 25, "u": [0.6, 0.2, 0.2, 0.0, 0.6, -0.2, 0.6, 0.0]}, {"t": 25, "u": [-0.6, 0.0, 0.0, 0.0, -0.6, 0.6, -0.2, 0.6]}, {"t": 25, "u": [0.6, -0.6, 0.2, 0.0, 0.0, -0.2, 0.0, 0.2]}, {"t": 25, "u": [0.0, -0.2, 0.2, 0.0, 0.2, 0.2, 0.6, 0.2]}, {"t": 25, "u": [0.2, 0.2, 0.6, 0.0, -0.2, 0.0, 0.0, -0.2]}, {"t": 25, "u": [-0.2, 0.2, 0.0, 0.6, 0.0, -0.2, 0.6, 0.0]}, {"t": 25, "u": [-0.6, -0.6, 0.0, -0.6, 0.6, -0.6, 0.0, 0.2]}, {"t": 25, "u": [-0.6, 0.2, -0.6, -0.6, -0.6, 0.6, 0.0, -0.2]}, {"t": 25, "u": [-0.2, 0.6, 0.2, 0.6, 0.6, 0.6, 0.2, -0.2]}, {"t": 25, "u": [-0.2, -0.6, 0.2, 0.0, 0.6, 0.0, -0.6, -0.6]}, {"t": 25, "u": [0.6, 0.6, -0.2, -0.6, -0.6, 0.2, 0.6, -0.2]}, {"t": 25, "u": [-0.6, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 25, "u": [-0.6, -0.2, 0.0, -0.6, 0.6, -0.6, -0.6, 0.2]}, {"t": 25, "u": [0.2, 0.2, 0.0, 0.2, -0.2, -0.6, 0.2, -0.2]}, {"t": 25, "u": [-0.6, -0.2, 0.6, 0.6, -0.6, 0.2, 0.0, 0.2]}, {"t": 25, "u": [0.2, 0.6, 0.2, 0.6, 0.2, 0.2, -0.2, 0.0]}, {"t": 25, "u": [0.6, 0.6, 0.0, 0.0, 0.2, 0.2, -0.2, -0.6]}, {"t": 25, "u": [0.2, 0.0, 0.0, 0.0, 0.2, 0.0, 0.2, 0.0]}, {"t": 25, "u": [-0.6, 0.2, -0.6, 0.2, -0.6, 0.6, -0.2, -0.2]}, {"t": 25, "u": [-0.6, -0.6, -0.6, 0.2, -0.6, -0.2, 0.6, -0.2]}, {"t": 25, "u": [0.2, -0.6, -0.2, 0.0, 0.6, 0.0, -0.2, 0.6]}, {"t": 25, "u": [-0.2, 0.2, 0.6, 0.0, 0.2, 0.0, 0.2, -0.2]}, {"t": 25, "u": [0.0, 0.6, -0.6, -0.6, -0.2, 0.2, 0.6, -0.6]}, {"t": 25, "u": [0.2, 0.0, 0.0, -0.2, -0.6, 0.0, 0.0, -0.6]}, {"t": 25, "u": [-0.2, 0.0, 0.2, -0.6, 0.2, -0.2, 0.2, 0.2]}, {"t": 25, "u": [0.6, 0.0, 0.2, 0.0, -0.2, 0.2, 0.2, 0.0]}, {"t": 25, "u": [-0.2, -0.2, 0.6, 0.6, 0.2, -0.2, 0.0, -0.6]}, {"t": 25, "u": [0.0, -0.6, 0.6, 0.0, -0.6, -0.6, 0.2, 0.0]}, {"t": 25, "u": [0.2, 0.6, -0.2, 0.0, -0.6, -0.2, -0.2, -0.6]}, {"t": 25, "u": [-0.6, 0.0, 0.0, 0.2, 0.2, 0.2, -0.2, 0.0]}, {"t": 25, "u": [-0.2, -0.2, 0.0, -0.2, -0.6, 0.6, -0.2, -0.6]}, {"t": 25, "u": [0.2, -0.2, 0.2, -0.2, 0.6, 0.6, 0.0, 0.0]}, {"t": 25, "u": [-0.6, -0.6, -0.2, 0.6, 0.6, -0.2, 0.6, -0.2]}, {"t": 25, "u": [-0.6, -0.2, 0.0, -0.6, 0.2, 0.0, 0.2, 0.0]}, {"t": 250, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 150, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]}, {"t": 200, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]
app/data/protocol_123_meta.json (99 chars)
{
"seed": 123,
"ticks": 10950,
"n_inputs": 8,
"note": "Generated identification protocol"
}
app/data/run_g0_0-5.json (11,791 chars)
{"ticks_run": 7400, "budget_left": 182000, "tail_mean": {"0": -0.5494, "1": -0.1963, "2": 0.0307, "3": -0.2185, "4": -0.4105, "5": -0.1263}, "tail_sd": {"0": 0.0564, "1": 0.058, "2": 0.0548, "3": 0.0448, "4": 0.0393, "5": 0.0511}, "series": {"0": [-0.509, -0.492, -0.526, -0.518, -0.557, -0.553, -0.542, -0.577, -0.566, -0.625, -0.513, -0.464, -0.524, -0.587, -0.54, -0.526, -0.488, -0.538, -0.553, -0.549, -0.541, -0.528, -0.579, -0.321, -0.188, -0.078, -0.031, -0.079, -0.2, -0.376, -0.573, -0.533, -0.46, -0.543, -0.582, -0.553, -0.589, -0.53, -0.673, -0.653, -0.452, -0.565, -0.615, -0.555, -0.582, -0.536, -0.545, -0.551, -0.555, -0.531, -0.541, -0.573, -0.6, -0.589, -0.603, -0.523, -0.633, -0.559, -0.501, -0.583, -0.579, -0.573, -0.539, -0.552, -0.552, -0.514, -0.633, -0.575, -0.518, -0.495, -0.52, -0.521, -0.558, -0.544, -0.576, -0.605, -0.461, -0.354, -0.242, 0.12, 0.313, 0.308, 0.09, -0.033, -0.32, -0.419, -0.472, -0.441, -0.595, -0.475, -0.566, -0.528, -0.567, -0.551, -0.621, -0.531, -0.523, -0.503, -0.504, -0.501, -0.535, -0.477, -0.538, -0.668, -0.525, -0.524, -0.53, -0.503, -0.566, -0.625, -0.574, -0.578, -0.602, -0.58, -0.52, -0.565, -0.586, -0.491, -0.537, -0.619, -0.548, -0.561, -0.486, -0.569, -0.553, -0.56, -0.548, -0.518, -0.528, -0.553, -0.457, -0.574, -0.551, -0.545, -0.539, -0.547, -0.462, -0.429, -0.584, -0.563, -0.502, -0.533, -0.538, -0.559, -0.61, -0.597, -0.513, -0.57, -0.546, -0.6, -0.617, -0.581, -0.556, -0.501, -0.613, -0.477, -0.548, -0.602, -0.552, -0.586, -0.492, -0.613, -0.532, -0.512, -0.623, -0.543, -0.591, -0.619, -0.525, -0.543, -0.605, -0.568, -0.573, -0.501, -0.643, -0.545, -0.497, -0.561, -0.573, -0.63, -0.567, -0.486, -0.498, -0.603, -0.557, -0.565, -0.497, -0.466, -0.548, -0.457, -0.549, -0.535, -0.594, -0.53, -0.45, -0.494, -0.496, -0.39, -0.123, 0.024, 0.104, 0.155, -0.032, -0.298, -0.396, -0.511, -0.551, -0.529, -0.533, -0.525, -0.545, -0.575, -0.607, -0.585, -0.561, -0.511, -0.427, -0.222, -0.076, -0.049, 0.169, 0.106, -0.088, -0.266, -0.492, -0.435, -0.619, -0.569, -0.63, -0.505, -0.628, -0.568, -0.596, -0.536, -0.568, -0.614, -0.547, -0.55, -0.552, -0.557, -0.636, -0.497, -0.624, -0.569, -0.543, -0.533, -0.476], "1": [-0.248, -0.254, -0.262, -0.248, -0.286, -0.332, -0.363, -0.223, -0.316, -0.23, -0.27, -0.217, -0.243, -0.327, -0.35, -0.307, -0.258, -0.281, -0.256, -0.281, -0.148, -0.256, -0.225, -0.319, -0.282, -0.293, -0.197, -0.278, -0.197, -0.312, -0.345, -0.281, -0.266, -0.28, -0.238, -0.319, -0.313, -0.326, -0.315, -0.292, -0.235, -0.268, -0.271, -0.283, -0.318, -0.323, -0.365, -0.238, -0.217, -0.408, -0.319, -0.284, -0.182, -0.137, -0.292, -0.253, -0.285, -0.319, -0.126, -0.284, -0.275, -0.285, -0.292, -0.172, -0.261, -0.294, -0.299, -0.282, -0.331, -0.31, -0.344, -0.24, -0.399, -0.225, -0.282, -0.249, -0.285, -0.074, -0.276, -0.308, -0.264, -0.309, -0.291, -0.267, -0.195, -0.261, -0.279, -0.255, -0.123, -0.247, -0.171, -0.353, -0.267, -0.146, -0.184, -0.059, 0.22, 0.247, 0.178, 0.061, -0.036, -0.065, -0.254, -0.219, -0.289, -0.269, -0.265, -0.395, -0.279, -0.363, -0.236, -0.223, -0.285, -0.246, -0.199, -0.262, -0.336, -0.249, -0.266, -0.215, -0.301, -0.189, -0.295, -0.271, -0.377, -0.328, -0.276, -0.266, -0.331, -0.261, -0.274, -0.288, -0.229, -0.287, -0.248, -0.262, -0.193, -0.29, -0.252, -0.248, -0.239, -0.177, -0.217, -0.25, -0.25, -0.277, -0.29, -0.23, -0.265, -0.271, -0.209, -0.212, -0.258, -0.308, -0.224, -0.261, -0.252, -0.241, -0.305, -0.34, -0.23, -0.319, -0.232, -0.246, -0.287, -0.323, -0.337, -0.197, -0.301, -0.244, -0.343, -0.221, -0.236, -0.321, -0.251, -0.235, -0.298, -0.316, -0.153, -0.244, -0.189, -0.202, -0.216, -0.287, -0.312, -0.201, -0.279, -0.243, -0.313, -0.226, -0.276, -0.329, -0.294, -0.194, -0.313, -0.227, -0.228, -0.239, -0.375, -0.267, -0.276, -0.282, -0.274, -0.227, -0.273, -0.147, -0.271, -0.355, -0.251, -0.235, -0.29, -0.313, -0.188, -0.232, -0.257, -0.262, -0.219, -0.283, -0.298, -0.264, -0.215, -0.268, -0.2, -0.167, -0.214, -0.321, -0.193, -0.317, -0.215, -0.269, -0.225, -0.294, -0.208, -0.231, -0.312, -0.324, -0.157, -0.303, -0.272, -0.253, -0.29, -0.277, -0.206, -0.235, -0.336, -0.225, -0.202], "2": [-0.064, 0.058, 0.063, 0.022, -0.002, -0.011, 0.103, 0.0, 0.078, 0.077, 0.02, 0.067, 0.047, 0.022, 0.094, 0.075, 0.062, -0.063, 0.075, 0.202, 0.035, -0.032, 0.123, 0.086, 0.143, 0.026, 0.023, 0.002, 0.026, -0.025, 0.012, 0.037, -0.033, 0.055, 0.005, 0.072, -0.014, 0.021, 0.134, 0.09, 0.032, 0.065, 0.098, 0.079, 0.077, 0.057, 0.077, 0.033, 0.135, 0.04, 0.062, -0.035, -0.021, 0.021, -0.009, 0.026, 0.035, 0.001, 0.049, 0.005, 0.071, 0.037, -0.01, 0.015, 0.006, -0.036, -0.053, 0.052, 0.056, 0.085, 0.081, 0.178, 0.094, 0.025, -0.028, 0.093, -0.12, 0.026, 0.027, -0.0, 0.008, -0.036, 0.037, 0.015, 0.06, 0.029, 0.008, 0.101, 0.058, 0.096, 0.072, 0.002, 0.047, 0.07, -0.036, -0.009, 0.033, 0.161, -0.045, -0.03, 0.05, 0.074, 0.018, 0.097, -0.002, 0.106, -0.081, -0.036, -0.01, 0.021, 0.108, -0.036, -0.047, 0.07, 0.064, 0.086, -0.011, -0.038, 0.031, 0.056, 0.033, 0.004, 0.071, 0.007, 0.098, -0.004, 0.051, 0.041, 0.026, 0.01, 0.058, -0.003, 0.014, 0.051, 0.069, 0.054, 0.026, 0.075, 0.068, 0.068, 0.004, 0.075, 0.062, -0.058, 0.07, 0.113, 0.036, 0.034, 0.021, 0.092, 0.066, 0.014, 0.003, 0.017, -0.031, 0.112, 0.006, -0.032, 0.102, 0.005, 0.068, 0.059, 0.036, 0.125, 0.02, -0.041, 0.106, 0.03, -0.026, 0.109, 0.036, -0.034, 0.01, 0.12, -0.028, 0.052, 0.089, 0.062, -0.01, 0.02, 0.034, 0.071, 0.016, 0.065, 0.049, -0.007, 0.027, -0.006, 0.022, 0.025, 0.054, 0.019, 0.003, -0.056, 0.012, -0.044, -0.003, -0.026, 0.019, 0.101, 0.069, -0.052, -0.022, 0.008, 0.123, -0.064, -0.065, 0.025, 0.075, -0.045, 0.14, 0.074, 0.025, 0.02, -0.008, 0.01, 0.045, -0.033, -0.004, 0.005, 0.14, 0.046, 0.005, 0.18, -0.013, 0.017, 0.047, 0.029, 0.009, 0.033, 0.026, 0.104, -0.027, 0.083, 0.014, 0.143, 0.092, 0.099, 0.093, 0.088, 0.005, -0.065, 0.079, -0.027, 0.008, 0.064, -0.044], "3": [0.081, -0.04, -0.096, -0.121, -0.244, -0.22, -0.259, -0.206, -0.259, -0.126, -0.254, -0.148, -0.187, -0.341, -0.248, -0.136, -0.187, -0.143, -0.139, -0.121, -0.098, -0.202, -0.224, -0.247, -0.232, -0.222, -0.286, -0.294, -0.246, -0.211, -0.21, -0.212, -0.155, -0.215, -0.151, -0.18, -0.235, -0.169, -0.19, -0.196, -0.209, -0.188, -0.277, -0.22, -0.264, -0.2, -0.182, -0.231, -0.188, -0.175, -0.226, -0.146, -0.17, -0.115, -0.184, -0.183, -0.122, -0.263, -0.242, -0.21, -0.236, -0.22, -0.285, -0.186, -0.308, -0.201, -0.158, -0.212, -0.146, -0.185, -0.316, -0.261, -0.222, -0.272, -0.174, -0.263, -0.223, -0.065, -0.149, -0.132, -0.165, -0.124, -0.173, -0.086, -0.232, -0.078, -0.263, -0.254, -0.286, -0.228, -0.252, -0.265, -0.207, -0.213, -0.127, -0.189, -0.118, -0.218, -0.179, -0.149, -0.17, -0.23, -0.189, -0.214, -0.19, -0.294, -0.214, -0.2, -0.193, -0.195, -0.217, -0.187, -0.16, -0.15, -0.179, -0.117, -0.21, -0.206, -0.257, -0.137, -0.216, -0.087, -0.237, -0.158, -0.214, -0.169, -0.204, -0.195, -0.206, -0.21, -0.311, -0.199, -0.206, -0.206, -0.107, -0.053, 0.034, 0.077, 0.3, 0.253, 0.068, -0.079, -0.207, -0.163, -0.181, -0.164, -0.117, -0.303, -0.122, -0.168, -0.258, -0.283, -0.13, -0.336, -0.151, -0.192, -0.17, -0.192, -0.205, -0.196, -0.341, -0.24, -0.225, -0.166, -0.157, -0.144, -0.161, -0.255, -0.199, -0.145, -0.134, -0.147, -0.205, -0.252, -0.236, -0.199, -0.273, -0.169, -0.214, -0.222, -0.191, -0.197, -0.151, -0.203, -0.246, -0.194, -0.295, -0.16, -0.197, -0.258, -0.248, -0.284, -0.11, -0.145, -0.328, -0.249, -0.21, -0.224, -0.129, -0.141, 0.095, 0.281, 0.493, 0.498, 0.424, 0.147, 0.048, -0.159, -0.22, -0.165, -0.189, -0.162, -0.264, -0.191, -0.21, -0.175, -0.146, -0.269, -0.226, -0.227, -0.248, -0.242, -0.149, -0.265, -0.212, -0.254, -0.141, -0.213, -0.189, -0.229, -0.141, -0.214, -0.174, -0.319, -0.181, -0.24, -0.238, -0.208, -0.246, -0.174, -0.258, -0.229, -0.179, -0.236, -0.317, -0.244, -0.218], "4": [-0.309, -0.443, -0.3, -0.422, -0.42, -0.451, -0.327, -0.422, -0.393, -0.388, -0.443, -0.459, -0.385, -0.429, -0.476, -0.393, -0.39, -0.457, -0.415, -0.358, -0.371, -0.416, -0.42, -0.485, -0.399, -0.451, -0.329, -0.436, -0.365, -0.433, -0.436, -0.496, -0.429, -0.405, -0.453, -0.411, -0.341, -0.421, -0.343, -0.413, -0.363, -0.435, -0.449, -0.441, -0.407, -0.424, -0.399, -0.388, -0.406, -0.42, -0.436, -0.226, -0.122, 0.023, 0.24, 0.246, 0.178, 0.008, -0.234, -0.452, -0.353, -0.413, -0.35, -0.373, -0.426, -0.619, -0.492, -0.409, -0.432, -0.43, -0.421, -0.395, -0.45, -0.393, -0.408, -0.415, -0.406, -0.492, -0.355, -0.353, -0.383, -0.433, -0.379, -0.437, -0.424, -0.357, -0.409, -0.428, -0.413, -0.481, -0.497, -0.342, -0.381, -0.445, -0.408, -0.505, -0.371, -0.441, -0.393, -0.343, -0.357, -0.449, -0.367, -0.33, -0.427, -0.462, -0.394, -0.392, -0.418, -0.441, -0.445, -0.447, -0.48, -0.401, -0.438, -0.402, -0.387, -0.448, -0.479, -0.406, -0.353, -0.551, -0.386, -0.488, -0.329, -0.408, -0.416, -0.341, -0.478, -0.383, -0.444, -0.346, -0.404, -0.413, -0.467, -0.414, -0.37, -0.356, -0.447, -0.391, -0.477, -0.337, -0.457, -0.442, -0.344, -0.309, -0.47, -0.445, -0.441, -0.384, -0.325, -0.377, -0.358, -0.491, -0.449, -0.441, -0.386, -0.34, -0.382, -0.322, -0.124, -0.011, 0.057, 0.149, 0.022, -0.088, -0.19, -0.401, -0.404, -0.453, -0.358, -0.433, -0.467, -0.402, -0.4, -0.379, -0.419, -0.355, -0.43, -0.396, -0.338, -0.376, -0.429, -0.248, -0.409, -0.444, -0.431, -0.422, -0.439, -0.348, -0.455, -0.394, -0.411, -0.35, -0.406, -0.487, -0.419, -0.383, -0.415, -0.373, -0.431, -0.454, -0.417, -0.39, -0.433, -0.419, -0.375, -0.359, -0.336, -0.346, -0.36, -0.389, -0.473, -0.362, -0.462, -0.473, -0.412, -0.413, -0.369, -0.456, -0.343, -0.414, -0.351, -0.48, -0.493, -0.283, -0.447, -0.457, -0.444, -0.339, -0.41, -0.418, -0.377, -0.285, -0.385, -0.415, -0.438, -0.428, -0.392, -0.389, -0.348, -0.391, -0.403, -0.427, -0.409, -0.427, -0.385], "5": [-0.143, -0.152, -0.14, -0.162, -0.141, -0.165, -0.115, -0.166, -0.171, -0.226, -0.166, -0.094, -0.096, -0.097, -0.185, -0.194, -0.223, -0.091, -0.133, -0.092, -0.147, -0.115, -0.136, -0.184, -0.112, -0.17, -0.16, -0.042, -0.151, -0.11, -0.185, -0.197, -0.089, -0.171, -0.069, -0.087, -0.153, -0.185, 0.001, -0.166, -0.163, -0.175, -0.119, -0.13, -0.133, -0.131, -0.05, -0.083, -0.202, -0.099, -0.122, -0.177, -0.205, -0.139, -0.035, -0.116, -0.173, -0.042, -0.166, -0.1, -0.116, -0.106, -0.163, -0.204, -0.171, -0.151, -0.152, -0.159, -0.153, -0.103, -0.211, -0.199, -0.156, -0.114, -0.21, -0.127, -0.183, -0.162, -0.055, -0.189, -0.1, -0.18, -0.153, -0.061, -0.165, -0.161, -0.188, -0.108, -0.085, -0.073, -0.196, -0.189, -0.148, -0.074, -0.136, -0.095, -0.063, -0.144, -0.094, -0.124, -0.137, -0.152, -0.075, -0.182, -0.11, -0.233, -0.158, -0.085, -0.085, -0.164, -0.084, -0.209, -0.182, -0.091, -0.092, -0.13, -0.123, -0.113, -0.146, -0.172, -0.063, -0.134, -0.124, -0.122, -0.13, -0.113, -0.09, -0.105, -0.152, -0.086, -0.072, -0.06, -0.192, -0.095, -0.086, -0.201, -0.124, -0.081, -0.149, -0.086, -0.131, -0.178, -0.213, -0.157, -0.031, -0.124, -0.14, -0.121, -0.166, -0.146, -0.176, -0.088, -0.172, -0.124, -0.117, -0.088, -0.205, -0.171, -0.11, -0.135, -0.12, -0.219, -0.086, -0.114, -0.155, -0.151, -0.146, -0.192, -0.181, -0.127, -0.148, -0.151, -0.065, -0.115, -0.095, -0.124, -0.114, -0.084, -0.087, -0.122, -0.116, -0.137, -0.082, -0.175, -0.202, -0.1, -0.182, -0.066, -0.105, -0.174, -0.113, -0.088, -0.134, -0.115, -0.151, -0.024, -0.097, -0.1, -0.079, -0.098, -0.088, -0.059, -0.145, -0.068, -0.127, -0.108, -0.192, -0.17, -0.179, -0.095, -0.144, -0.044, -0.133, -0.161, -0.128, -0.091, -0.104, -0.188, -0.17, -0.166, -0.177, -0.113, -0.074, -0.211, -0.126, -0.088, -0.116, -0.12, -0.149, -0.105, -0.126, -0.116, -0.139, -0.149, -0.05, -0.138, -0.126, -0.121, -0.005, -0.124, -0.068, -0.073, -0.178, -0.139, -0.099, -0.158, -0.155}
},
"series_stride": 30
}
app/data/run_g1_6-11.json (11,301 chars)
{"ticks_run": 7400, "budget_left": 174400, "tail_mean": {"6": -0.6252, "7": 0.2215, "8": -0.6875, "9": 0.078, "10": -0.2292, "11": 0.2544}, "tail_sd": {"6": 0.047, "7": 0.0519, "8": 0.0544, "9": 0.0514, "10": 0.0418, "11": 0.0549}, "series": {"6": [-0.699, -0.525, -0.599, -0.604, -0.61, -0.6, -0.654, -0.625, -0.587, -0.637, -0.482, -0.485, -0.37, -0.339, -0.439, -0.418, -0.473, -0.637, -0.677, -0.558, -0.565, -0.56, -0.471, -0.298, -0.321, -0.4, -0.494, -0.579, -0.508, -0.513, -0.597, -0.577, -0.722, -0.572, -0.666, -0.632, -0.577, -0.62, -0.621, -0.619, -0.615, -0.707, -0.546, -0.643, -0.643, -0.587, -0.596, -0.584, -0.553, -0.663, -0.576, -0.666, -0.617, -0.552, -0.539, -0.576, -0.526, -0.643, -0.595, -0.686, -0.664, -0.649, -0.583, -0.558, -0.539, -0.66, -0.645, -0.572, -0.695, -0.637, -0.625, -0.665, -0.602, -0.557, -0.643, -0.667, -0.566, -0.61, -0.67, -0.535, -0.688, -0.604, -0.579, -0.607, -0.658, -0.566, -0.617, -0.689, -0.541, -0.652, -0.67, -0.634, -0.705, -0.582, -0.678, -0.607, -0.567, -0.533, -0.49, -0.539, -0.624, -0.569, -0.575, -0.611, -0.626, -0.689, -0.664, -0.565, -0.716, -0.639, -0.598, -0.57, -0.634, -0.646, -0.562, -0.53, -0.567, -0.533, -0.556, -0.641, -0.542, -0.638, -0.567, -0.589, -0.602, -0.655, -0.629, -0.561, -0.552, -0.314, 0.036, 0.29, 0.373, 0.314, 0.085, -0.309, -0.425, -0.622, -0.532, -0.565, -0.596, -0.624, -0.652, -0.658, -0.662, -0.583, -0.605, -0.67, -0.616, -0.549, -0.432, -0.364, -0.307, -0.347, -0.418, -0.566, -0.601, -0.63, -0.583, -0.546, -0.527, -0.608, -0.582, -0.664, -0.624, -0.743, -0.663, -0.58, -0.567, -0.617, -0.541, -0.71, -0.699, -0.566, -0.672, -0.653, -0.618, -0.689, -0.558, -0.717, -0.536, -0.589, -0.659, -0.554, -0.572, -0.523, -0.714, -0.645, -0.535, -0.559, -0.592, -0.577, -0.654, -0.629, -0.65, -0.654, -0.601, -0.583, -0.663, -0.504, -0.635, -0.474, -0.653, -0.563, -0.71, -0.594, -0.651, -0.625, -0.644, -0.699, -0.633, -0.63, -0.708, -0.623, -0.574, -0.7, -0.465, -0.532, -0.536, -0.574, -0.586, -0.634, -0.622, -0.644, -0.602, -0.589, -0.708, -0.538, -0.605, -0.582, -0.566, -0.667, -0.591, -0.592, -0.61, -0.64, -0.644, -0.605, -0.603, -0.596, -0.628, -0.617, -0.672, -0.611, -0.551, -0.61, -0.628], "7": [0.284, 0.197, 0.257, 0.252, 0.15, 0.152, 0.236, 0.074, 0.183, 0.107, 0.224, 0.289, 0.236, 0.206, 0.114, 0.247, 0.188, 0.255, 0.182, 0.23, 0.226, 0.212, 0.232, 0.306, 0.243, 0.169, 0.149, 0.204, 0.234, 0.21, 0.188, 0.273, 0.245, 0.253, 0.201, 0.283, 0.227, 0.292, 0.332, 0.195, 0.236, 0.208, 0.226, 0.214, 0.297, 0.286, 0.261, 0.215, 0.19, 0.239, 0.221, 0.301, 0.328, 0.189, 0.229, 0.328, 0.227, 0.201, 0.27, 0.213, 0.269, 0.298, 0.326, 0.287, 0.288, 0.242, 0.141, 0.153, 0.217, 0.207, 0.226, 0.197, 0.174, 0.226, 0.124, 0.293, 0.181, 0.175, 0.286, 0.194, 0.259, 0.266, 0.178, 0.22, 0.306, 0.228, 0.177, 0.234, 0.234, 0.233, 0.239, 0.317, 0.204, 0.167, 0.309, 0.213, 0.274, 0.219, 0.191, 0.201, 0.258, 0.157, 0.28, 0.239, 0.221, 0.288, 0.281, 0.205, 0.268, 0.186, 0.215, 0.285, 0.247, 0.294, 0.17, 0.224, 0.157, 0.285, 0.218, 0.159, 0.361, 0.221, 0.214, 0.322, 0.283, 0.305, 0.228, 0.151, 0.24, 0.125, 0.205, 0.196, 0.263, 0.332, 0.257, 0.276, 0.012, -0.083, -0.151, -0.224, -0.065, -0.0, 0.119, 0.218, 0.235, 0.159, 0.301, 0.169, 0.125, 0.241, 0.199, 0.211, 0.252, 0.186, 0.247, 0.284, 0.199, 0.179, 0.176, 0.274, 0.19, 0.199, 0.238, 0.127, 0.248, 0.226, 0.253, 0.303, 0.204, 0.228, 0.191, 0.226, 0.32, 0.136, 0.189, 0.215, 0.22, 0.211, 0.144, 0.262, 0.24, 0.129, 0.243, 0.267, 0.24, 0.21, 0.329, 0.19, 0.171, 0.271, 0.189, 0.251, 0.318, 0.256, 0.25, 0.195, 0.253, 0.186, 0.149, 0.239, 0.212, 0.283, 0.193, 0.242, 0.216, 0.266, 0.198, 0.115, 0.207, 0.245, 0.123, 0.244, 0.342, 0.15, 0.242, 0.207, 0.209, 0.326, 0.243, 0.271, 0.296, 0.242, 0.258, 0.289, 0.23, 0.197, 0.278, 0.164, 0.173, 0.231, 0.212, 0.218, 0.216, 0.192, 0.221, 0.24, 0.292, 0.271, 0.207, 0.31, 0.15, 0.337, 0.241, 0.315, 0.225, 0.256, 0.22], "8": [-0.779, -0.581, -0.695, -0.706, -0.673, -0.639, -0.754, -0.72, -0.709, -0.687, -0.628, -0.639, -0.676, -0.645, -0.651, -0.665, -0.722, -0.789, -0.61, -0.696, -0.626, -0.633, -0.649, -0.582, -0.663, -0.636, -0.728, -0.706, -0.738, -0.72, -0.703, -0.644, -0.664, -0.725, -0.72, -0.672, -0.688, -0.72, -0.681, -0.635, -0.703, -0.631, -0.666, -0.657, -0.631, -0.729, -0.663, -0.591, -0.692, -0.653, -0.714, -0.699, -0.64, -0.666, -0.683, -0.681, -0.71, -0.683, -0.683, -0.635, -0.639, -0.619, -0.558, -0.689, -0.629, -0.693, -0.622, -0.583, -0.736, -0.633, -0.708, -0.688, -0.779, -0.727, -0.815, -0.607, -0.747, -0.627, -0.76, -0.706, -0.667, -0.704, -0.73, -0.734, -0.599, -0.677, -0.771, -0.658, -0.684, -0.644, -0.803, -0.62, -0.703, -0.71, -0.778, -0.653, -0.662, -0.577, -0.434, -0.168, -0.037, -0.147, -0.118, -0.405, -0.45, -0.634, -0.813, -0.653, -0.663, -0.727, -0.672, -0.697, -0.68, -0.679, -0.751, -0.714, -0.679, -0.736, -0.657, -0.714, -0.627, -0.633, -0.658, -0.689, -0.718, -0.718, -0.731, -0.633, -0.597, -0.615, -0.667, -0.702, -0.666, -0.619, -0.719, -0.671, -0.761, -0.676, -0.676, -0.667, -0.601, -0.781, -0.764, -0.684, -0.758, -0.774, -0.672, -0.775, -0.63, -0.696, -0.624, -0.652, -0.711, -0.812, -0.702, -0.704, -0.622, -0.552, -0.681, -0.677, -0.743, -0.568, -0.672, -0.649, -0.67, -0.71, -0.708, -0.658, -0.676, -0.674, -0.714, -0.623, -0.654, -0.665, -0.696, -0.693, -0.72, -0.665, -0.685, -0.668, -0.7, -0.734, -0.662, -0.622, -0.703, -0.697, -0.663, -0.727, -0.668, -0.599, -0.708, -0.689, -0.637, -0.742, -0.667, -0.747, -0.656, -0.672, -0.589, -0.719, -0.709, -0.665, -0.681, -0.704, -0.647, -0.644, -0.784, -0.668, -0.704, -0.694, -0.699, -0.775, -0.603, -0.697, -0.651, -0.684, -0.7, -0.572, -0.665, -0.7, -0.607, -0.688, -0.542, -0.638, -0.647, -0.655, -0.702, -0.608, -0.64, -0.635, -0.7, -0.683, -0.685, -0.662, -0.629, -0.64, -0.698, -0.588, -0.704, -0.709, -0.674, -0.69, -0.744, -0.722, -0.643, -0.694, -0.799], "9": [0.071, 0.068, 0.074, 0.036, 0.035, 0.094, 0.131, 0.158, 0.096, 0.139, 0.094, 0.091, 0.071, 0.075, 0.124, 0.096, 0.178, 0.105, 0.029, 0.148, 0.105, -0.002, 0.115, 0.102, 0.129, 0.063, 0.054, 0.085, 0.134, 0.0, 0.103, 0.062, 0.151, 0.016, 0.1, 0.104, 0.079, 0.161, 0.107, 0.077, 0.078, 0.119, 0.026, 0.109, 0.108, 0.068, 0.102, 0.148, 0.067, 0.057, 0.086, 0.033, 0.138, 0.023, 0.069, 0.068, 0.048, 0.086, 0.158, 0.045, 0.065, 0.018, 0.035, 0.078, 0.037, 0.093, 0.095, 0.11, 0.083, 0.137, 0.113, -0.026, 0.06, 0.141, 0.076, 0.091, 0.06, 0.029, 0.206, 0.053, 0.068, 0.094, 0.065, 0.189, 0.073, 0.1, 0.033, 0.152, 0.04, 0.028, 0.035, 0.132, 0.009, 0.116, 0.04, 0.111, 0.056, 0.061, 0.092, 0.01, 0.07, 0.056, 0.091, 0.054, 0.065, 0.135, 0.079, 0.168, 0.07, 0.189, 0.031, 0.108, 0.022, 0.035, 0.089, 0.099, 0.079, 0.062, 0.175, 0.074, 0.102, 0.073, 0.076, 0.121, 0.091, 0.099, -0.034, -0.012, 0.076, 0.076, 0.182, 0.065, 0.012, 0.165, 0.094, 0.112, 0.082, 0.075, 0.188, 0.131, 0.09, 0.082, 0.148, 0.09, 0.017, 0.106, 0.093, 0.05, 0.122, 0.167, -0.008, -0.02, 0.11, 0.186, 0.119, 0.098, 0.127, 0.137, 0.167, 0.118, 0.091, 0.036, 0.082, 0.072, 0.049, 0.124, 0.039, 0.104, 0.217, 0.11, 0.109, 0.086, 0.045, -0.011, 0.126, 0.066, 0.044, -0.026, 0.036, 0.007, 0.069, 0.043, 0.082, 0.093, 0.048, 0.029, 0.064, 0.12, 0.027, 0.156, 0.05, 0.05, 0.092, 0.129, 0.051, 0.069, 0.023, 0.051, 0.084, 0.145, 0.004, 0.053, 0.06, 0.089, 0.104, 0.12, 0.072, 0.12, 0.027, 0.04, 0.133, 0.019, 0.109, 0.046, 0.143, 0.115, 0.081, 0.168, 0.093, 0.006, 0.075, 0.094, 0.108, 0.091, 0.155, 0.056, 0.057, 0.151, 0.178, 0.087, 0.074, 0.006, 0.167, 0.157, 0.088, 0.083, 0.151, 0.117, 0.101, 0.109, 0.013, 0.11, 0.114, 0.007, -0.038, 0.026, 0.083], "10": [-1.066, -1.066, -1.038, -0.978, -1.016, -1.005, -0.94, -0.995, -0.946, -0.987, -0.917, -0.969, -0.979, -0.997, -1.021, -0.308, -0.266, -0.206, -0.292, -0.328, -0.239, -0.201, -0.219, -0.239, -0.263, -0.244, -0.243, -0.275, -0.163, -0.277, -0.271, -0.238, -0.298, -0.264, -0.316, -0.211, -0.21, -0.175, -0.199, -0.273, -0.262, -0.245, -0.287, -0.248, -0.294, -0.365, -0.238, -0.308, -0.949, -1.016, -1.037, -1.084, -0.982, -0.978, -0.263, -0.254, -0.237, -0.286, -0.985, -0.905, -0.959, -1.085, -0.997, -0.94, -0.955, -1.031, -0.954, -1.049, -0.887, -0.846, -0.687, -0.706, -0.847, -0.862, -0.929, -1.015, -0.981, -1.071, -0.97, -1.01, -0.966, -0.991, -1.026, -1.067, -0.948, -0.975, -1.072, -1.034, -1.014, -1.021, -1.023, -1.054, -0.849, -0.987, -0.922, -1.039, -0.992, -0.987, -0.97, -0.973, -0.996, -0.952, -0.987, -0.971, -1.039, -1.059, -1.006, -1.011, -1.018, -1.019, -1.082, -0.984, -0.964, -0.974, -0.909, -0.983, -1.032, -0.944, -1.064, -1.029, -0.928, -0.898, -0.671, -0.239, 0.149, 0.53, 0.397, 0.142, -0.306, -0.617, -0.85, -0.964, -0.98, -1.034, -0.996, -1.045, -1.02, -0.912, -0.947, -0.913, -1.067, -1.067, -0.977, -1.024, -0.868, -0.983, -0.941, -1.002, -0.984, -1.019, -0.995, -0.969, -0.92, -0.949, -0.993, -1.049, -1.01, -1.054, -1.044, -0.972, -0.952, -1.032, -0.915, -1.068, -0.986, -0.999, -0.997, -0.947, -0.976, -0.991, -1.034, -0.954, -1.051, -0.922, -0.967, -0.978, -0.189, -0.246, -0.179, -0.229, -0.199, -0.254, -0.172, -0.255, -0.255, -0.238, -0.171, -0.259, -0.275, -0.123, -0.159, -0.279, -0.254, -0.208, -0.174, -0.283, -0.205, -0.254, -0.292, -0.228, -0.249, -0.197, -0.209, -0.284, -0.266, -0.339, -0.242, -0.242, -0.258, -0.289, -0.283, -0.23, -0.27, -0.23, -0.262, -0.191, -0.177, -0.328, -0.162, -0.207, -0.178, -0.146, -0.242, -0.222, -0.196, -0.242, -0.224, -0.312, -0.206, -0.132, -0.308, -0.166, -0.317, -0.163, -0.152, -0.339, -0.225, -0.213, -0.183, -0.193, -0.267, -0.355, -0.22, -0.173, -0.25, -0.224, -0.265], "11": [0.279, 0.229, 0.252, 0.335, 0.325, 0.361, 0.32, 0.359, 0.193, 0.249, 0.234, 0.174, 0.159, 0.311, 0.23, 0.193, 0.276, 0.355, 0.275, 0.228, 0.299, 0.355, 0.26, 0.192, 0.287, 0.291, 0.207, 0.284, 0.348, 0.323, 0.24, 0.259, 0.213, 0.282, 0.388, 0.339, 0.276, 0.166, 0.212, 0.279, 0.377, 0.269, 0.324, 0.238, 0.233, 0.238, 0.17, 0.167, -0.2, -0.212, -0.632, -0.507, -0.372, -0.268, 0.053, 0.18, 0.279, 0.285, 0.269, 0.383, 0.217, 0.298, 0.268, 0.173, 0.266, 0.3, 0.406, 0.292, 0.316, 0.232, 0.329, 0.325, 0.192, 0.194, 0.306, 0.261, 0.238, 0.251, 0.226, 0.254, 0.292, 0.299, 0.261, 0.277, 0.201, 0.217, 0.356, 0.279, 0.161, 0.202, 0.329, 0.233, 0.237, 0.252, 0.272, 0.325, 0.227, 0.219, 0.216, 0.274, 0.291, 0.189, 0.247, 0.138, 0.275, 0.266, 0.338, 0.16, 0.281, 0.245, 0.264, 0.337, 0.253, 0.275, 0.175, -0.016, -0.229, -0.323, -0.341, -0.171, -0.089, 0.217, 0.241, 0.274, 0.226, 0.235, 0.118, 0.272, 0.279, 0.303, 0.199, 0.236, 0.317, 0.259, 0.303, 0.238, 0.26, 0.245, 0.257, 0.316, 0.256, 0.367, 0.2, 0.196, 0.281, 0.226, 0.308, 0.269, 0.273, 0.324, 0.263, 0.279, 0.243, 0.228, 0.218, 0.229, 0.323, 0.362, 0.21, 0.257, 0.21, 0.295, 0.196, 0.368, 0.358, 0.256, 0.372, 0.156, 0.296, 0.343, 0.286, 0.345, 0.345, 0.279, 0.264, 0.33, 0.327, 0.313, 0.334, 0.316, 0.399, 0.279, 0.413, 0.216, 0.223, 0.295, 0.326, 0.274, 0.355, 0.34, 0.327, 0.18, 0.309, 0.335, 0.303, 0.288, 0.247, 0.29, 0.216, 0.291, 0.315, 0.211, 0.27, 0.253, 0.283, 0.325, 0.21, 0.315, 0.353, 0.404, 0.246, 0.283, 0.255, 0.265, 0.293, 0.325, 0.21, 0.306, 0.294, 0.294, 0.203, 0.152, -0.103, -0.32, -0.493, -0.624, -0.542, -0.132, 0.064, 0.155, 0.305, 0.306, 0.233, 0.334, 0.259, 0.397, 0.289, 0.253, 0.379, 0.301, 0.344, 0.26, 0.245, 0.28, 0.283, 0.253, 0.35]}
},
"series_stride": 30
}
app/policies/id_policy.py (2,263 chars)
# Used with physim_run_policy: defines policy(t, y, mem) -> 8 floats in [-1, 1].
# Deterministic pseudo-random program with multiple amplitude phases + saturation pulses.
def _lcg_step(x: int) -> int:
# 32-bit LCG (Numerical Recipes)
return (1664525 * x + 1013904223) & 0xFFFFFFFF
def _pick_level(x: int, levels):
return float(levels[x % len(levels)])
def _phase_schedule():
# (name, duration, hold, levels)
return [
("settle", 400, 1, [0.0]),
("prbs_small", 2400, 20, [-0.2, 0.0, 0.2]),
("rest1", 200, 1, [0.0]),
("prbs_med", 2500, 25, [-0.6, -0.2, 0.0, 0.2, 0.6]),
("rest2", 250, 1, [0.0]),
# pulses: 8 inputs * (150 on + 150 off + 150 on - + 200 off)
("pulses", 8 * (150 + 150 + 150 + 200), 1, [0.0]),
]
def policy(t, y, mem):
if not mem:
mem["base_seed"] = 123
mem["x"] = [(mem["base_seed"] + 0x9E3779B9 * (i + 1)) & 0xFFFFFFFF for i in range(8)]
mem["u"] = [0.0] * 8
mem["phase_idx"] = 0
mem["phase_t"] = 0
mem["schedule"] = _phase_schedule()
schedule = mem["schedule"]
phase_name, phase_dur, hold, levels = schedule[mem["phase_idx"]]
# Advance phase.
if mem["phase_t"] >= phase_dur:
mem["phase_idx"] += 1
mem["phase_t"] = 0
phase_name, phase_dur, hold, levels = schedule[mem["phase_idx"]]
# reset u on phase boundary
mem["u"] = [0.0] * 8
pt = mem["phase_t"]
if phase_name.startswith("prbs"):
if pt % hold == 0:
# update all inputs
for i in range(8):
mem["x"][i] = _lcg_step(int(mem["x"][i]))
mem["u"][i] = _pick_level(int(mem["x"][i] >> 8), levels)
elif phase_name.startswith("rest") or phase_name == "settle":
mem["u"] = [0.0] * 8
elif phase_name == "pulses":
# Determine which input and which substage.
cycle = 150 + 150 + 150 + 200
i = int(pt // cycle)
k = int(pt % cycle)
u = [0.0] * 8
if k < 150:
u[i] = 1.0
elif k < 300:
u[i] = 0.0
elif k < 450:
u[i] = -1.0
else:
u[i] = 0.0
mem["u"] = u
mem["phase_t"] += 1
return mem["u"]
app/scripts/gen_id_inputs.py (2,001 chars)
import json
import numpy as np
def lcg_step(x: int) -> int:
return (1664525 * x + 1013904223) & 0xFFFFFFFF
def pick_level(x: int, levels):
return float(levels[x % len(levels)])
def schedule():
return [
("settle", 400, 1, [0.0]),
("prbs_small", 2400, 20, [-0.2, 0.0, 0.2]),
("rest1", 200, 1, [0.0]),
("prbs_med", 2500, 25, [-0.6, -0.2, 0.0, 0.2, 0.6]),
("rest2", 250, 1, [0.0]),
("pulses", 8 * (150 + 150 + 150 + 200), 1, [0.0]),
]
def generate(base_seed=123):
sched = schedule()
total = sum(d for _, d, _, _ in sched)
x = [(base_seed + 0x9E3779B9 * (i + 1)) & 0xFFFFFFFF for i in range(8)]
u = np.zeros((total, 8), dtype=np.float32)
t0 = 0
for name, dur, hold, levels in sched:
for k in range(dur):
if name.startswith('prbs'):
if k % hold == 0:
for i in range(8):
x[i] = lcg_step(int(x[i]))
val = pick_level(int(x[i] >> 8), levels)
u[t0 + k, i] = val
# hold values for subsequent ticks
if hold > 1:
u[t0 + k:t0 + min(k + hold, dur), :] = u[t0 + k, :]
elif name == 'pulses':
cycle = 150 + 150 + 150 + 200
i = k // cycle
kk = k % cycle
if kk < 150:
u[t0 + k, i] = 1.0
elif kk < 300:
pass
elif kk < 450:
u[t0 + k, i] = -1.0
else:
pass
else:
pass
t0 += dur
meta = {"base_seed": base_seed, "ticks": int(total), "n_inputs": 8, "schedule": sched}
return u, meta
if __name__ == '__main__':
u, meta = generate()
np.save('data/id_u.npy', u)
with open('data/id_meta.json', 'w') as f:
json.dump(meta, f, indent=2)
print(json.dumps(meta, indent=2))
app/scripts/make_protocol.py (2,363 chars)
import argparse, json
import numpy as np
def clip(x):
return float(np.clip(x, -1.0, 1.0))
def prbs_sequence(rng, n_steps, n_inputs, levels):
u = rng.choice(levels, size=(n_steps, n_inputs))
return u
def segments_from_steps(u_steps, hold):
segs = []
for row in u_steps:
segs.append({"t": int(hold), "u": [clip(v) for v in row.tolist()]})
return segs
def expand_segments(segments, n_inputs):
u = np.zeros((sum(s["t"] for s in segments), n_inputs), dtype=np.float32)
idx = 0
for s in segments:
t = int(s["t"])
vec = np.array(s["u"], dtype=np.float32)
u[idx:idx+t] = vec
idx += t
return u
def build_protocol(seed: int):
rng = np.random.default_rng(seed)
segs = []
# settle
segs.append({"t": 400, "u": [0.0] * 8})
# small-signal PRBS
hold = 20
u_steps = prbs_sequence(rng, n_steps=120, n_inputs=8, levels=[-0.2, 0.0, 0.2])
segs.extend(segments_from_steps(u_steps, hold))
segs.append({"t": 200, "u": [0.0] * 8})
# medium-signal PRBS
hold = 25
u_steps = prbs_sequence(rng, n_steps=100, n_inputs=8, levels=[-0.6, -0.2, 0.0, 0.2, 0.6])
segs.extend(segments_from_steps(u_steps, hold))
segs.append({"t": 250, "u": [0.0] * 8})
# per-input saturation pulses (one at a time)
for i in range(8):
u = [0.0] * 8
u[i] = 1.0
segs.append({"t": 150, "u": u})
u = [0.0] * 8
segs.append({"t": 150, "u": u})
u = [0.0] * 8
u[i] = -1.0
segs.append({"t": 150, "u": u})
u = [0.0] * 8
segs.append({"t": 200, "u": u})
return segs
def main():
ap = argparse.ArgumentParser()
ap.add_argument('--seed', type=int, default=1)
ap.add_argument('--out', type=str, default='data/protocol.json')
args = ap.parse_args()
segs = build_protocol(args.seed)
with open(args.out, 'w') as f:
json.dump(segs, f)
u = expand_segments(segs, 8)
np.save(args.out.replace('.json', '_u.npy'), u)
meta = {
'seed': args.seed,
'ticks': int(u.shape[0]),
'n_inputs': 8,
'note': 'Generated identification protocol'
}
with open(args.out.replace('.json', '_meta.json'), 'w') as f:
json.dump(meta, f, indent=2)
print(json.dumps(meta, indent=2))
if __name__ == '__main__':
main()
app/scripts/make_protocol2.py (1,649 chars)
import argparse, json
import numpy as np
def clip(v):
return float(np.clip(v, -1.0, 1.0))
def main():
ap = argparse.ArgumentParser()
ap.add_argument('--seed', type=int, default=202)
ap.add_argument('--segments', type=int, default=20)
ap.add_argument('--seg_ticks', type=int, default=100)
ap.add_argument('--out', type=str, default='data/protocol2.json')
args = ap.parse_args()
rng = np.random.default_rng(args.seed)
segs = []
segs.append({'t': 400, 'u': [0.0]*8})
# ramps to random endpoints
u_prev = np.zeros(8)
for _ in range(args.segments):
u_next = rng.uniform(-0.8, 0.8, size=8)
segs.append({'t': int(args.seg_ticks), 'u_start': [clip(x) for x in u_prev.tolist()], 'u_end': [clip(x) for x in u_next.tolist()]})
u_prev = u_next
segs.append({'t': 200, 'u': [0.0]*8})
# one-at-a-time pulses
for i in range(8):
u = [0.0]*8
u[i] = 1.0
segs.append({'t': 150, 'u': u})
segs.append({'t': 100, 'u': [0.0]*8})
u = [0.0]*8
u[i] = -1.0
segs.append({'t': 150, 'u': u})
segs.append({'t': 200, 'u': [0.0]*8})
with open(args.out, 'w') as f:
json.dump(segs, f)
meta = {
'seed': args.seed,
'n_segments': len(segs),
'ticks': int(sum(s['t'] for s in segs)),
'note': 'Ramped random + single-input pulses'
}
with open(args.out.replace('.json', '_meta.json'), 'w') as f:
json.dump(meta, f, indent=2)
print(json.dumps(meta, indent=2))
print('---SEGMENTS_JSON---')
print(json.dumps(segs))
if __name__ == '__main__':
main()
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | +0.077 | 0.060 | 4.2 | 0.015 | ✗ |
| 1 | S1 | -0.747 | 0.088 | 0.0 | 0.983 | ✓ |
| 2 | S1 | +0.879 | 0.077 | 0.1 | 0.949 | ✓ |
| 3 | S1 | -0.653 | 0.073 | 0.1 | 0.887 | ✓ |
| 4 | S2 | -0.443 | 0.067 | 2.1 | 0.120 | ✓ |
| 5 | S2 | +0.051 | 0.039 | 0.0 | 0.984 | ✓ |
| 6 | S2 | -0.378 | 0.052 | 0.0 | 0.961 | ✓ |
| 7 | S2 | +0.050 | 0.034 | 0.2 | 0.856 | ✓ |
| 8 | S3 | +0.544 | 0.074 | 0.1 | 0.945 | ✓ |
| 9 | S3 | +0.050 | 0.034 | 0.1 | 0.872 | ✓ |
| 10 | S3 | -0.743 | 0.088 | 0.0 | 0.970 | ✓ |
| 11 | S3 | +0.050 | 0.034 | 0.2 | 0.856 | ✓ |
| 12 | S4 | +0.275 | 0.062 | 0.2 | 0.788 | ✓ |
| 13 | S4 | -0.744 | 0.088 | 0.0 | 0.957 | ✓ |
| 14 | S4 | -0.738 | 0.088 | 0.0 | 0.979 | ✓ |
| 15 | S4 | +0.548 | 0.074 | 0.1 | 0.900 | ✓ |
| 16 | S5 | +0.050 | 0.034 | 0.2 | 0.854 | ✓ |
| 17 | S5 | +0.050 | 0.034 | 0.0 | 0.991 | ✓ |
| 18 | S5 | +0.048 | 0.034 | 0.1 | 0.931 | ✓ |
| 19 | S5 | +0.050 | 0.037 | 0.4 | 0.662 | ✓ |
Verbatim log (19 entries)
{"budget_left": 200000, "phase": "explore"}
{"error": "series observation limited to <=6 channels"}
{"ticks_run": 500, "budget_left": 199000}
{"ticks_run": 500, "budget_left": 198500}
{"budget_left": 198300}
{"ticks_run": 300, "budget_left": 198000}
{"ticks_run": 300, "budget_left": 197700}
{"ticks_run": 300, "budget_left": 197400}
{"budget_left": 197200}
{"error": "t must be an int in [1, 5000]"}
{"budget_left": 197000}
{"budget_left": 189400}
{"ticks_run": 7400, "budget_left": 182000}
{"budget_left": 181800}
{"ticks_run": 7400, "budget_left": 174400}
{"phase": "answer"}
{"error": "exploration is over; reply with the answers object"}
{"received": 20}
Submitted predictions for all 20 contracts via `physim_answer`.
Saved exploration artifacts:
- `data/run_g0_0-5.json`
- `data/run_g1_6-11.json`
- `policies/id_policy.py`
- `scripts/gen_id_inputs.py`
- `scripts/make_protocol2.py`
openai/gpt-5.2 · C2 seed 1 · tier tools · accuracy 0.73 · budget 16%
S1=0.85 · S2=0.87 · S3=0.48 · S4=0.97 · coverage 0.80 · 181 nodes
Narrative experiment log
- 2× free run (250 ticks; 200 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Closed-loop policy (1,200 ticks; 1200t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (500 ticks; port 0 at +0.12, 500t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (500 ticks; 500 ticks, all inputs 0).
- Single-port probe (300 ticks; port 0 at +0.12, 300t) — ch21 -0.38→-0.56.
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (800 ticks; drive +0.12 for 400t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (800 ticks; drive +0.12 for 400t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Closed-loop policy (2,000 ticks; 2000t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,600 ticks; drive +0.69 for 2200t, release 400t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (800 ticks; drive +0.12 for 400t, release 400t).
- Ended exploration → received 20 prediction contracts.
- Submitted 20 contract answers.
Agent-written files (its instruments & theories)
app/data/answers.json (1,897 chars)
{"op": "answer", "answers": [{"id": 0, "mean": 0.7736500963587616, "low": 0.7087060685347961, "high": 0.838594124182727}, {"id": 1, "mean": -0.6734789881390236, "low": -0.7361841454229345, "high": -0.6107738308551127}, {"id": 2, "mean": -0.36909637631798753, "low": -0.4346440173891962, "high": -0.30354873524677883}, {"id": 3, "mean": -0.8647853086157962, "low": -0.9253199226808086, "high": -0.8042506945507837}, {"id": 4, "mean": -0.16785563764571804, "low": -0.2286733663520747, "high": -0.10703790893936137}, {"id": 5, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 6, "mean": -0.5120724975705008, "low": -0.5781920190826836, "high": -0.445952976058318}, {"id": 7, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 8, "mean": -0.8647853086301648, "low": -0.9253199226951773, "high": -0.8042506945651523}, {"id": 9, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 10, "mean": 0.5616939560128472, "low": 0.49110805975870875, "high": 0.6322798522669857}, {"id": 11, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 12, "mean": -0.1714730359041327, "low": -0.23229076461048936, "high": -0.11065530719777604}, {"id": 13, "mean": -0.3801936854605802, "low": -0.4448958289722136, "high": -0.3154915419489468}, {"id": 14, "mean": 0.19782808115058262, "low": 0.13948811736074126, "high": 0.256168044940424}, {"id": 15, "mean": -0.8856105220692777, "low": -0.9436193565257638, "high": -0.8276016876127916}, {"id": 16, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 17, "mean": 0.048760000000000005, "low": 0.018760000000000006, "high": 0.07876}, {"id": 18, "mean": 0.053720000000000004, "low": 0.023720000000000005, "high": 0.08372}, {"id": 19, "mean": 0.048760000000000005, "low": 0.018760000000000006, "high": 0.07876}]}
app/data/baseline/baseline_000.json (1,501 chars)
{
"tail_mean": {
"0": 0.7905,
"1": -0.9542,
"10": -0.6388,
"11": -0.5184,
"12": -0.3919,
"13": -0.5544,
"14": -0.8603,
"15": 0.6365,
"16": -0.0785,
"17": 0.0975,
"18": 0.7439,
"19": -0.3986,
"2": 0.1755,
"20": 0.7426,
"21": -0.5683,
"22": -0.5353,
"23": 0.3263,
"24": -0.5383,
"25": 0.2124,
"26": 0.4665,
"27": -0.8991,
"28": 0.4679,
"29": 0.3298,
"3": -0.1661,
"30": -0.7169,
"31": -0.5052,
"32": 0.2895,
"33": 0.7603,
"34": 0.4268,
"35": -0.3852,
"36": -0.6623,
"37": -0.8943,
"38": 0.5885,
"39": 0.0736,
"4": -0.7407,
"5": -0.5066,
"6": -0.6307,
"7": -0.8369,
"8": -0.4095,
"9": 0.2021
},
"tail_sd": {
"0": 0.0563,
"1": 0.0487,
"10": 0.0511,
"11": 0.0591,
"12": 0.0379,
"13": 0.0416,
"14": 0.0466,
"15": 0.0464,
"16": 0.0463,
"17": 0.0428,
"18": 0.0468,
"19": 0.0486,
"2": 0.0437,
"20": 0.0494,
"21": 0.0577,
"22": 0.0372,
"23": 0.0474,
"24": 0.0445,
"25": 0.046,
"26": 0.0591,
"27": 0.0514,
"28": 0.0399,
"29": 0.0464,
"3": 0.0349,
"30": 0.051,
"31": 0.0504,
"32": 0.0405,
"33": 0.0356,
"34": 0.0506,
"35": 0.0369,
"36": 0.0633,
"37": 0.043,
"38": 0.0578,
"39": 0.0628,
"4": 0.0374,
"5": 0.0538,
"6": 0.0359,
"7": 0.0508,
"8": 0.054,
"9": 0.0445
},
"ticks_run": 400
}
app/data/baseline/baseline_001.json (1,495 chars)
{
"tail_mean": {
"0": 0.7599,
"1": -0.944,
"10": -0.6372,
"11": -0.5204,
"12": -0.3858,
"13": -0.5562,
"14": -0.8706,
"15": 0.648,
"16": -0.0752,
"17": 0.1118,
"18": 0.7299,
"19": -0.3807,
"2": 0.2095,
"20": 0.744,
"21": -0.5782,
"22": -0.5031,
"23": 0.3225,
"24": -0.5427,
"25": 0.2035,
"26": 0.451,
"27": -0.8959,
"28": 0.4818,
"29": 0.3288,
"3": -0.1737,
"30": -0.7101,
"31": -0.5144,
"32": 0.3375,
"33": 0.764,
"34": 0.4523,
"35": -0.4141,
"36": -0.6749,
"37": -0.8932,
"38": 0.547,
"39": 0.0786,
"4": -0.7153,
"5": -0.5038,
"6": -0.6322,
"7": -0.8163,
"8": -0.4159,
"9": 0.1971
},
"tail_sd": {
"0": 0.0379,
"1": 0.0393,
"10": 0.0589,
"11": 0.0471,
"12": 0.0303,
"13": 0.0491,
"14": 0.0385,
"15": 0.0424,
"16": 0.0548,
"17": 0.0362,
"18": 0.047,
"19": 0.0554,
"2": 0.0621,
"20": 0.0518,
"21": 0.037,
"22": 0.0551,
"23": 0.0336,
"24": 0.0524,
"25": 0.0447,
"26": 0.0382,
"27": 0.0385,
"28": 0.0504,
"29": 0.0444,
"3": 0.0425,
"30": 0.0313,
"31": 0.0455,
"32": 0.0503,
"33": 0.0526,
"34": 0.0568,
"35": 0.0392,
"36": 0.0409,
"37": 0.063,
"38": 0.0579,
"39": 0.0473,
"4": 0.0422,
"5": 0.0516,
"6": 0.0368,
"7": 0.0472,
"8": 0.0576,
"9": 0.045
},
"ticks_run": 400
}
app/data/baseline/baseline_002.json (1,499 chars)
{
"tail_mean": {
"0": 0.767,
"1": -0.9365,
"10": -0.6506,
"11": -0.5168,
"12": -0.3676,
"13": -0.5519,
"14": -0.8614,
"15": 0.6433,
"16": -0.0689,
"17": 0.1219,
"18": 0.7181,
"19": -0.4018,
"2": 0.1808,
"20": 0.7415,
"21": -0.573,
"22": -0.4959,
"23": 0.3399,
"24": -0.5324,
"25": 0.2419,
"26": 0.4605,
"27": -0.8871,
"28": 0.5077,
"29": 0.3134,
"3": -0.1529,
"30": -0.7359,
"31": -0.5078,
"32": 0.3334,
"33": 0.7429,
"34": 0.4344,
"35": -0.396,
"36": -0.6609,
"37": -0.8804,
"38": 0.5531,
"39": 0.0564,
"4": -0.7371,
"5": -0.5014,
"6": -0.6193,
"7": -0.8313,
"8": -0.3968,
"9": 0.2124
},
"tail_sd": {
"0": 0.0363,
"1": 0.0434,
"10": 0.0551,
"11": 0.0468,
"12": 0.0459,
"13": 0.0431,
"14": 0.0396,
"15": 0.0356,
"16": 0.0597,
"17": 0.0474,
"18": 0.0442,
"19": 0.0502,
"2": 0.0384,
"20": 0.0664,
"21": 0.0508,
"22": 0.0514,
"23": 0.0401,
"24": 0.0495,
"25": 0.0476,
"26": 0.0356,
"27": 0.0583,
"28": 0.0495,
"29": 0.0321,
"3": 0.0429,
"30": 0.052,
"31": 0.043,
"32": 0.0517,
"33": 0.0478,
"34": 0.0606,
"35": 0.036,
"36": 0.0448,
"37": 0.0383,
"38": 0.0446,
"39": 0.0444,
"4": 0.0475,
"5": 0.0423,
"6": 0.0328,
"7": 0.0451,
"8": 0.0461,
"9": 0.0472
},
"ticks_run": 400
}
app/data/baseline/baseline_003.json (1,492 chars)
{
"tail_mean": {
"0": 0.7588,
"1": -0.9405,
"10": -0.6402,
"11": -0.534,
"12": -0.3647,
"13": -0.5572,
"14": -0.8448,
"15": 0.6568,
"16": -0.0671,
"17": 0.1117,
"18": 0.7337,
"19": -0.3911,
"2": 0.1829,
"20": 0.7481,
"21": -0.5707,
"22": -0.5256,
"23": 0.3244,
"24": -0.5395,
"25": 0.2316,
"26": 0.454,
"27": -0.902,
"28": 0.4812,
"29": 0.3317,
"3": -0.172,
"30": -0.7242,
"31": -0.5005,
"32": 0.3195,
"33": 0.758,
"34": 0.4551,
"35": -0.4209,
"36": -0.6732,
"37": -0.8853,
"38": 0.5682,
"39": 0.0611,
"4": -0.7207,
"5": -0.5073,
"6": -0.6312,
"7": -0.8238,
"8": -0.4043,
"9": 0.2019
},
"tail_sd": {
"0": 0.0388,
"1": 0.0474,
"10": 0.0479,
"11": 0.0494,
"12": 0.0482,
"13": 0.0431,
"14": 0.0479,
"15": 0.0575,
"16": 0.0313,
"17": 0.0439,
"18": 0.0454,
"19": 0.0533,
"2": 0.0392,
"20": 0.0542,
"21": 0.0544,
"22": 0.0495,
"23": 0.0471,
"24": 0.0438,
"25": 0.0521,
"26": 0.0401,
"27": 0.0658,
"28": 0.044,
"29": 0.0479,
"3": 0.0578,
"30": 0.0463,
"31": 0.048,
"32": 0.0468,
"33": 0.05,
"34": 0.058,
"35": 0.0548,
"36": 0.054,
"37": 0.0487,
"38": 0.045,
"39": 0.0657,
"4": 0.0496,
"5": 0.0546,
"6": 0.066,
"7": 0.0597,
"8": 0.0478,
"9": 0.0469
},
"ticks_run": 400
}
app/data/baseline/baseline_004.json (1,500 chars)
{
"tail_mean": {
"0": 0.779,
"1": -0.9626,
"10": -0.6609,
"11": -0.4964,
"12": -0.3911,
"13": -0.5508,
"14": -0.8552,
"15": 0.6552,
"16": -0.0707,
"17": 0.1283,
"18": 0.7102,
"19": -0.4127,
"2": 0.1766,
"20": 0.7512,
"21": -0.5699,
"22": -0.5199,
"23": 0.3064,
"24": -0.5188,
"25": 0.2202,
"26": 0.4793,
"27": -0.9077,
"28": 0.4839,
"29": 0.3297,
"3": -0.1763,
"30": -0.7225,
"31": -0.5036,
"32": 0.2965,
"33": 0.738,
"34": 0.4408,
"35": -0.4007,
"36": -0.649,
"37": -0.8869,
"38": 0.5728,
"39": 0.0688,
"4": -0.7351,
"5": -0.5139,
"6": -0.6194,
"7": -0.8355,
"8": -0.4165,
"9": 0.203
},
"tail_sd": {
"0": 0.0449,
"1": 0.0533,
"10": 0.0394,
"11": 0.0403,
"12": 0.0594,
"13": 0.0581,
"14": 0.0478,
"15": 0.0382,
"16": 0.0408,
"17": 0.0558,
"18": 0.0463,
"19": 0.0611,
"2": 0.0592,
"20": 0.0545,
"21": 0.0439,
"22": 0.0429,
"23": 0.0479,
"24": 0.0345,
"25": 0.0584,
"26": 0.0543,
"27": 0.0447,
"28": 0.0369,
"29": 0.0434,
"3": 0.0506,
"30": 0.0504,
"31": 0.0483,
"32": 0.0525,
"33": 0.0419,
"34": 0.0434,
"35": 0.0484,
"36": 0.0408,
"37": 0.0363,
"38": 0.0457,
"39": 0.0742,
"4": 0.0591,
"5": 0.0507,
"6": 0.052,
"7": 0.0393,
"8": 0.0562,
"9": 0.0545
},
"ticks_run": 400
}
app/data/baseline/summary.json (3,506 chars)
{
"mean": {
"0": 0.77104,
"1": -0.94756,
"10": -0.6455400000000001,
"11": -0.5172,
"12": -0.38022,
"13": -0.5541,
"14": -0.85846,
"15": 0.64796,
"16": -0.07208,
"17": 0.11423999999999998,
"18": 0.72716,
"19": -0.39698,
"2": 0.18505999999999997,
"20": 0.74548,
"21": -0.57202,
"22": -0.51596,
"23": 0.32389999999999997,
"24": -0.53434,
"25": 0.22191999999999998,
"26": 0.46226,
"27": -0.89836,
"28": 0.48450000000000004,
"29": 0.32667999999999997,
"3": -0.16820000000000002,
"30": -0.7219200000000001,
"31": -0.5063,
"32": 0.31528,
"33": 0.75264,
"34": 0.44188,
"35": -0.40338,
"36": -0.6640600000000001,
"37": -0.88802,
"38": 0.56592,
"39": 0.06770000000000001,
"4": -0.72978,
"5": -0.5065999999999999,
"6": -0.6265599999999999,
"7": -0.8287599999999999,
"8": -0.4086,
"9": 0.20329999999999998
},
"mean_tail_sd": {
"0": 0.04284,
"1": 0.046419999999999996,
"10": 0.050480000000000004,
"11": 0.04854,
"12": 0.044340000000000004,
"13": 0.047,
"14": 0.04408,
"15": 0.04401999999999999,
"16": 0.046579999999999996,
"17": 0.04522,
"18": 0.04594,
"19": 0.053720000000000004,
"2": 0.04852,
"20": 0.05526,
"21": 0.048760000000000005,
"22": 0.04722,
"23": 0.043219999999999995,
"24": 0.04494,
"25": 0.049760000000000006,
"26": 0.04546,
"27": 0.051739999999999994,
"28": 0.04413999999999999,
"29": 0.042839999999999996,
"3": 0.045739999999999996,
"30": 0.046200000000000005,
"31": 0.047040000000000005,
"32": 0.04836,
"33": 0.045579999999999996,
"34": 0.05388,
"35": 0.04306,
"36": 0.04876,
"37": 0.04586,
"38": 0.0502,
"39": 0.05888,
"4": 0.04716,
"5": 0.0506,
"6": 0.044700000000000004,
"7": 0.048420000000000005,
"8": 0.05234000000000001,
"9": 0.047619999999999996
},
"n": 5,
"sd_across_draws": {
"0": 0.013530447147082746,
"1": 0.010666911455524524,
"10": 0.010062703414093063,
"11": 0.0134788723563954,
"12": 0.013096449900641014,
"13": 0.00273130005674957,
"14": 0.009442351402060845,
"15": 0.008420391914869553,
"16": 0.004684228858627638,
"17": 0.011715289155629064,
"18": 0.013230948567657568,
"19": 0.011964405543109954,
"2": 0.013991890508433804,
"20": 0.00405918711074025,
"21": 0.0038479864864627736,
"22": 0.016203950135692216,
"23": 0.0119396398605653,
"24": 0.009453200516227268,
"25": 0.015213382266938543,
"26": 0.011252244220598836,
"27": 0.007646437078796881,
"28": 0.014425151645650058,
"29": 0.007498466509893863,
"3": 0.009338094023942999,
"30": 0.009564099539423472,
"31": 0.0052440442408507575,
"32": 0.021547436042369413,
"33": 0.011463550933284158,
"34": 0.011914990558116267,
"35": 0.01426558796545029,
"36": 0.010499190444981944,
"37": 0.005766021158476624,
"38": 0.016467452747768844,
"39": 0.00902884267223657,
"4": 0.01110459364407359,
"5": 0.004707971962533353,
"6": 0.00660401393093627,
"7": 0.008631222393149184,
"8": 0.008280096617793779,
"9": 0.005584353140695888
},
"source_files": [
"data/baseline/baseline_000.json",
"data/baseline/baseline_001.json",
"data/baseline/baseline_002.json",
"data/baseline/baseline_003.json",
"data/baseline/baseline_004.json"
]
}
app/data/contracts.json (4,797 chars)
{
"contracts": [
{"id": 0, "protocol": {"from": "fresh_state", "segments": [{"t": 206, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 0, "stat": "mean", "window": "last_20_ticks"}},
{"id": 1, "protocol": {"from": "fresh_state", "segments": [{"t": 232, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 36, "stat": "mean", "window": "last_20_ticks"}},
{"id": 2, "protocol": {"from": "fresh_state", "segments": [{"t": 208, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "mean", "window": "last_20_ticks"}},
{"id": 3, "protocol": {"from": "fresh_state", "segments": [{"t": 172, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 14, "stat": "mean", "window": "last_20_ticks"}},
{"id": 4, "protocol": {"from": "fresh_state", "segments": [{"t": 339, "u": [0.0, 0.0, 0.0, 0.904, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 3, "stat": "mean", "window": "last_20_ticks"}},
{"id": 5, "protocol": {"from": "fresh_state", "segments": [{"t": 370, "u": [0.0, -0.879, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 6, "protocol": {"from": "fresh_state", "segments": [{"t": 307, "u": [0.0, -0.884, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 11, "stat": "mean", "window": "last_20_ticks"}},
{"id": 7, "protocol": {"from": "fresh_state", "segments": [{"t": 300, "u": [0.0, 0.0, 0.0, 0.898, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 8, "protocol": {"from": "fresh_state", "segments": [{"t": 398, "u": [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 404, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 14, "stat": "mean", "window": "last_20_ticks"}},
{"id": 9, "protocol": {"from": "fresh_state", "segments": [{"t": 267, "u": [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 411, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 10, "protocol": {"from": "fresh_state", "segments": [{"t": 395, "u": [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 411, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 38, "stat": "mean", "window": "last_20_ticks"}},
{"id": 11, "protocol": {"from": "fresh_state", "segments": [{"t": 394, "u": [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 435, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 12, "protocol": {"from": "fresh_state", "segments": [{"t": 288, "u": [0.0, 0.0, 0.0, 0.812, 0.0, 0.0, 0.0, 0.0]}, {"t": 224, "u": [0.0, -0.85, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 566, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 3, "stat": "mean", "window": "last_20_ticks"}},
{"id": 13, "protocol": {"from": "fresh_state", "segments": [{"t": 224, "u": [0.0, 0.886, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 160, "u": [0.0, -0.86, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 487, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 12, "stat": "mean", "window": "last_20_ticks"}},
{"id": 14, "protocol": {"from": "fresh_state", "segments": [{"t": 212, "u": [0.0, 0.0, 0.0, 0.995, 0.0, 0.0, 0.0, 0.0]}, {"t": 154, "u": [-0.934, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 440, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 9, "stat": "mean", "window": "last_20_ticks"}},
{"id": 15, "protocol": {"from": "fresh_state", "segments": [{"t": 278, "u": [0.0, 0.0, 0.0, 0.804, 0.0, 0.0, 0.0, 0.0]}, {"t": 158, "u": [0.0, 0.0, -0.83, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 496, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 37, "stat": "mean", "window": "last_20_ticks"}},
{"id": 16, "protocol": {"from": "fresh_state", "segments": [{"t": 241, "u": [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 810, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 17, "protocol": {"from": "fresh_state", "segments": [{"t": 620, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 21, "stat": "sd", "window": "last_200_ticks"}},
{"id": 18, "protocol": {"from": "fresh_state", "segments": [{"t": 699, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 19, "stat": "sd", "window": "last_200_ticks"}},
{"id": 19, "protocol": {"from": "fresh_state", "segments": [{"t": 260, "u": [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}, {"t": 862, "u": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]}]}, "predict": {"channel": 21, "stat": "sd", "window": "last_200_ticks"}}
]
}
app/data/experiments/exp_seed100_ch0-5.json (27,142 chars)
{
"channels": [
0,
1,
2,
3,
4,
5
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"0": [
0.68,
0.835,
0.807,
0.772,
0.791,
0.811,
0.854,
0.76,
0.771,
0.83,
0.831,
0.705,
0.841,
0.799,
0.716,
0.668,
0.731,
0.84,
0.792,
0.808,
0.874,
0.797,
0.744,
0.89,
0.766,
0.777,
0.719,
0.707,
0.657,
0.649,
0.794,
0.749,
0.79,
0.809,
0.806,
0.737,
0.783,
0.758,
0.837,
0.795,
0.824,
0.813,
0.809,
0.716,
0.745,
0.826,
0.757,
0.835,
0.778,
0.902,
0.807,
0.72,
0.907,
0.723,
0.752,
0.732,
0.801,
0.754,
0.759,
0.783,
0.891,
0.76,
0.68,
0.929,
0.778,
0.823,
0.793,
0.859,
0.849,
0.763,
0.748,
0.756,
0.783,
0.802,
0.872,
0.746,
0.786,
0.661,
0.736,
0.762,
0.739,
0.801,
0.794,
0.778,
0.772,
0.906,
0.807,
0.734,
0.813,
0.786,
0.654,
0.789,
0.75,
0.741,
0.711,
0.766,
0.86,
0.851,
0.733,
0.767,
0.743,
0.79,
0.718,
0.772,
0.834,
0.8,
0.679,
0.855,
0.777,
0.765,
0.793,
0.807,
0.735,
0.751,
0.86,
0.762,
0.781,
0.76,
0.8,
0.782,
0.801,
0.727,
0.751,
0.847,
0.776,
0.724,
0.732,
0.728,
0.494,
0.383
],
"1": [
-0.945,
-0.956,
-0.952,
-1.015,
-0.88,
-0.938,
-0.89,
-0.929,
-0.962,
-0.945,
-0.953,
-0.989,
-0.9,
-0.94,
-0.846,
-0.986,
-0.932,
-0.927,
-0.963,
-0.902,
-1.005,
-1.018,
-0.947,
-0.869,
-0.938,
-0.946,
-0.956,
-0.976,
-0.947,
-0.957,
-0.973,
-0.996,
-0.874,
-0.98,
-1.012,
-0.975,
-0.896,
-0.998,
-0.947,
-0.988,
-0.988,
-0.911,
-0.95,
-0.862,
-0.853,
-0.896,
-1.005,
-1.002,
-0.847,
-0.94,
-0.902,
-1.062,
-0.919,
-1.004,
-1.026,
-0.931,
-0.905,
-0.97,
-0.943,
-0.93,
-0.924,
-1.046,
-0.94,
-0.994,
-0.991,
-1.026,
-0.957,
-0.954,
-0.845,
-0.935,
-0.895,
-0.989,
-0.958,
-0.942,
-0.868,
-0.925,
-0.876,
-1.041,
-0.937,
-0.936,
-0.98,
-0.844,
-0.926,
-0.976,
-0.856,
-0.96,
-0.911,
-0.91,
-0.937,
-0.849,
-0.928,
-0.979,
-0.936,
-1.035,
-0.932,
-0.841,
-0.865,
-0.926,
-0.95,
-0.882,
-0.99,
-0.932,
-1.011,
-0.976,
-0.938,
-0.973,
-0.903,
-0.956,
-0.905,
-0.991,
-1.002,
-0.888,
-0.93,
-0.885,
-0.97,
-0.95,
-0.996,
-0.849,
-1.026,
-0.998,
-1.038,
-0.862,
-0.889,
-0.981,
-0.943,
-0.876,
-1.013,
-1.087,
-0.939,
-0.952
],
"2": [
0.22,
0.276,
0.15,
0.231,
0.187,
0.14,
0.228,
0.104,
0.193,
0.28,
0.134,
0.223,
0.26,
0.181,
0.149,
0.158,
0.242,
0.167,
0.13,
0.107,
0.166,
0.147,
… [+7,142 chars]
app/data/experiments/exp_seed100_ch12-17.json (27,177 chars)
{
"channels": [
12,
13,
14,
15,
16,
17
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"12": [
-0.354,
-0.436,
-0.42,
-0.388,
-0.351,
-0.425,
-0.415,
-0.313,
-0.452,
-0.324,
-0.461,
-0.312,
-0.432,
-0.411,
-0.356,
-0.34,
-0.345,
-0.391,
-0.48,
-0.35,
-0.419,
-0.38,
-0.322,
-0.374,
-0.364,
-0.302,
-0.398,
-0.401,
-0.344,
-0.408,
-0.35,
-0.399,
-0.283,
-0.403,
-0.299,
-0.524,
-0.393,
-0.388,
-0.397,
-0.409,
-0.404,
-0.352,
-0.376,
-0.372,
-0.452,
-0.363,
-0.373,
-0.372,
-0.366,
-0.402,
-0.392,
-0.391,
-0.434,
-0.436,
-0.403,
-0.349,
-0.355,
-0.353,
-0.401,
-0.317,
-0.332,
-0.41,
-0.449,
-0.362,
-0.355,
-0.334,
-0.349,
-0.405,
-0.418,
-0.4,
-0.347,
-0.423,
-0.398,
-0.424,
-0.334,
-0.441,
-0.38,
-0.444,
-0.371,
-0.399,
-0.421,
-0.388,
-0.369,
-0.393,
-0.367,
-0.264,
-0.443,
-0.264,
-0.378,
-0.417,
-0.349,
-0.377,
-0.359,
-0.38,
-0.332,
-0.395,
-0.431,
-0.344,
-0.421,
-0.357,
-0.403,
-0.331,
-0.406,
-0.371,
-0.327,
-0.444,
-0.339,
-0.341,
-0.366,
-0.348,
-0.263,
-0.336,
-0.442,
-0.4,
-0.402,
-0.317,
-0.433,
-0.486,
-0.345,
-0.412,
-0.412,
-0.36,
-0.371,
-0.442,
-0.325,
-0.409,
-0.316,
-0.385,
-0.345,
-0.417
],
"13": [
-0.628,
-0.535,
-0.662,
-0.583,
-0.564,
-0.572,
-0.534,
-0.59,
-0.548,
-0.499,
-0.443,
-0.638,
-0.619,
-0.597,
-0.549,
-0.585,
-0.608,
-0.579,
-0.565,
-0.492,
-0.561,
-0.543,
-0.417,
-0.544,
-0.562,
-0.497,
-0.601,
-0.642,
-0.606,
-0.618,
-0.549,
-0.602,
-0.56,
-0.581,
-0.592,
-0.624,
-0.614,
-0.548,
-0.517,
-0.664,
-0.455,
-0.505,
-0.607,
-0.523,
-0.554,
-0.463,
-0.6,
-0.606,
-0.542,
-0.49,
-0.605,
-0.564,
-0.586,
-0.493,
-0.543,
-0.565,
-0.526,
-0.538,
-0.501,
-0.517,
-0.53,
-0.592,
-0.527,
-0.567,
-0.534,
-0.519,
-0.626,
-0.55,
-0.529,
-0.637,
-0.515,
-0.561,
-0.61,
-0.474,
-0.554,
-0.618,
-0.549,
-0.574,
-0.544,
-0.541,
-0.564,
-0.591,
-0.524,
-0.526,
-0.499,
-0.598,
-0.514,
-0.599,
-0.526,
-0.571,
-0.507,
-0.704,
-0.543,
-0.563,
-0.617,
-0.44,
-0.609,
-0.549,
-0.518,
-0.603,
-0.589,
-0.625,
-0.586,
-0.605,
-0.482,
-0.555,
-0.566,
-0.628,
-0.569,
-0.615,
-0.557,
-0.684,
-0.575,
-0.534,
-0.507,
-0.589,
-0.597,
-0.58,
-0.489,
-0.574,
-0.628,
-0.547,
-0.562,
-0.639,
-0.557,
-0.491,
-0.59,
-0.587,
-0.446,
-0.616
],
"14": [
-0.838,
-0.832,
-0.864,
-0.924,
-0.822,
-0.849,
-0.817,
-0.813,
-0.847,
… [+7,177 chars]
app/data/experiments/exp_seed100_ch18-23.json (27,012 chars)
{
"channels": [
18,
19,
20,
21,
22,
23
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"18": [
0.713,
0.696,
0.633,
0.682,
0.704,
0.696,
0.723,
0.736,
0.746,
0.772,
0.795,
0.725,
0.662,
0.764,
0.707,
0.857,
0.79,
0.744,
0.744,
0.654,
0.695,
0.816,
0.704,
0.791,
0.742,
0.781,
0.709,
0.722,
0.739,
0.735,
0.803,
0.756,
0.684,
0.805,
0.73,
0.742,
0.754,
0.714,
0.758,
0.724,
0.669,
0.652,
0.771,
0.714,
0.793,
0.795,
0.69,
0.677,
0.689,
0.715,
0.776,
0.73,
0.702,
0.759,
0.767,
0.759,
0.712,
0.747,
0.75,
0.762,
0.653,
0.836,
0.803,
0.686,
0.799,
0.715,
0.706,
0.72,
0.654,
0.809,
0.724,
0.723,
0.713,
0.81,
0.607,
0.691,
0.759,
0.708,
0.88,
0.696,
0.777,
0.799,
0.729,
0.723,
0.688,
0.673,
0.571,
0.694,
0.644,
0.771,
0.691,
0.709,
0.682,
0.732,
0.761,
0.792,
0.71,
0.68,
0.68,
0.663,
0.713,
0.714,
0.756,
0.763,
0.757,
0.756,
0.765,
0.741,
0.773,
0.724,
0.728,
0.745,
0.723,
0.692,
0.713,
0.734,
0.69,
0.689,
0.7,
0.699,
0.726,
0.762,
0.75,
0.722,
0.676,
0.706,
0.692,
0.756,
0.704,
0.756
],
"19": [
-0.434,
-0.329,
-0.468,
-0.476,
-0.382,
-0.381,
-0.431,
-0.403,
-0.414,
-0.435,
-0.402,
-0.538,
-0.481,
-0.306,
-0.436,
-0.351,
-0.428,
-0.444,
-0.347,
-0.446,
-0.356,
-0.424,
-0.354,
-0.275,
-0.364,
-0.246,
-0.004,
0.023,
0.351,
0.389,
0.439,
0.227,
0.221,
-0.007,
-0.08,
-0.284,
-0.29,
-0.368,
-0.336,
-0.31,
-0.392,
-0.406,
-0.376,
-0.493,
-0.48,
-0.537,
-0.46,
-0.43,
-0.42,
-0.427,
-0.318,
-0.348,
-0.366,
-0.362,
-0.415,
-0.466,
-0.372,
-0.471,
-0.421,
-0.385,
-0.378,
-0.398,
-0.41,
-0.433,
-0.372,
-0.386,
-0.429,
-0.419,
-0.46,
-0.349,
-0.401,
-0.375,
-0.41,
-0.333,
-0.397,
-0.427,
-0.472,
-0.497,
-0.368,
-0.359,
-0.423,
-0.38,
-0.384,
-0.35,
-0.335,
-0.386,
-0.393,
-0.448,
-0.29,
-0.384,
-0.356,
-0.411,
-0.325,
-0.336,
-0.383,
-0.366,
-0.476,
-0.35,
-0.333,
-0.296,
-0.32,
-0.428,
-0.352,
-0.359,
-0.444,
-0.452,
-0.413,
-0.432,
-0.397,
-0.413,
-0.388,
-0.469,
-0.373,
-0.413,
-0.4,
-0.393,
-0.382,
-0.368,
-0.366,
-0.44,
-0.461,
-0.364,
-0.385,
-0.39,
-0.396,
-0.359,
-0.362,
-0.357,
-0.434,
-0.316
],
"20": [
0.709,
0.64,
0.664,
0.689,
0.707,
0.755,
0.706,
0.785,
0.725,
0.675,
0.735,
0.795,
0.729,
0.688,
0.763,
0.696,
0.743,
0.733,
0.724,
0.721,
0.792,
… [+7,012 chars]
app/data/experiments/exp_seed100_ch24-29.json (26,957 chars)
{
"channels": [
24,
25,
26,
27,
28,
29
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"24": [
-0.561,
-0.58,
-0.551,
-0.584,
-0.574,
-0.557,
-0.519,
-0.655,
-0.438,
-0.481,
-0.52,
-0.496,
-0.575,
-0.595,
-0.57,
-0.417,
-0.499,
-0.544,
-0.528,
-0.499,
-0.459,
-0.548,
-0.553,
-0.636,
-0.514,
-0.591,
-0.518,
-0.618,
-0.553,
-0.539,
-0.627,
-0.587,
-0.474,
-0.505,
-0.535,
-0.552,
-0.461,
-0.594,
-0.501,
-0.519,
-0.5,
-0.468,
-0.445,
-0.48,
-0.547,
-0.54,
-0.528,
-0.579,
-0.57,
-0.567,
-0.454,
-0.555,
-0.428,
-0.517,
-0.595,
-0.514,
-0.637,
-0.455,
-0.513,
-0.644,
-0.629,
-0.559,
-0.517,
-0.523,
-0.535,
-0.551,
-0.527,
-0.62,
-0.527,
-0.6,
-0.428,
-0.485,
-0.516,
-0.45,
-0.595,
-0.459,
-0.609,
-0.476,
-0.593,
-0.55,
-0.505,
-0.454,
-0.477,
-0.63,
-0.569,
-0.525,
-0.53,
-0.598,
-0.567,
-0.61,
-0.606,
-0.591,
-0.524,
-0.576,
-0.544,
-0.572,
-0.507,
-0.596,
-0.542,
-0.613,
-0.553,
-0.569,
-0.484,
-0.469,
-0.527,
-0.552,
-0.59,
-0.489,
-0.525,
-0.589,
-0.495,
-0.588,
-0.508,
-0.555,
-0.526,
-0.572,
-0.567,
-0.603,
-0.516,
-0.657,
-0.57,
-0.565,
-0.593,
-0.531,
-0.483,
-0.496,
-0.551,
-0.517,
-0.628,
-0.558
],
"25": [
0.183,
0.326,
0.161,
0.141,
0.186,
0.202,
0.186,
0.235,
0.288,
0.297,
0.249,
0.302,
0.167,
0.198,
0.21,
0.219,
0.195,
0.254,
0.225,
0.206,
0.187,
0.227,
0.244,
0.159,
0.283,
0.267,
0.213,
0.229,
0.223,
0.179,
0.211,
0.206,
0.276,
0.269,
0.199,
0.166,
0.296,
0.261,
0.231,
0.264,
0.179,
0.13,
0.243,
0.215,
0.231,
0.166,
0.172,
0.275,
0.282,
0.243,
0.176,
0.25,
0.228,
0.274,
0.202,
0.22,
0.279,
0.2,
0.239,
0.294,
0.113,
0.227,
0.216,
0.222,
0.221,
0.199,
0.164,
0.203,
0.225,
0.243,
0.199,
0.17,
0.205,
0.232,
0.228,
0.275,
0.288,
0.225,
0.235,
0.115,
0.315,
0.131,
0.3,
0.25,
0.294,
0.277,
0.226,
0.16,
0.214,
0.24,
0.104,
0.197,
0.281,
0.174,
0.219,
0.249,
0.165,
0.275,
0.221,
0.258,
0.18,
0.225,
0.18,
0.181,
0.379,
0.139,
0.186,
0.181,
0.308,
0.227,
0.278,
0.296,
0.308,
0.182,
0.245,
0.179,
0.184,
0.178,
0.188,
0.348,
0.202,
0.261,
0.184,
0.178,
0.226,
0.251,
0.287,
0.226,
0.143,
0.32
],
"26": [
0.472,
0.509,
0.436,
0.453,
0.48,
0.543,
0.37,
0.46,
0.486,
0.488,
0.52,
0.383,
0.416,
0.483,
0.517,
0.489,
0.403,
0.64,
0.404,
0.467,
0.507,
… [+6,957 chars]
app/data/experiments/exp_seed100_ch30-35.json (27,032 chars)
{
"channels": [
30,
31,
32,
33,
34,
35
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"30": [
-0.714,
-0.704,
-0.649,
-0.712,
-0.696,
-0.749,
-0.762,
-0.711,
-0.801,
-0.712,
-0.73,
-0.68,
-0.808,
-0.805,
-0.659,
-0.794,
-0.773,
-0.764,
-0.688,
-0.716,
-0.707,
-0.681,
-0.722,
-0.761,
-0.774,
-0.729,
-0.757,
-0.629,
-0.687,
-0.696,
-0.778,
-0.729,
-0.797,
-0.733,
-0.743,
-0.713,
-0.754,
-0.747,
-0.703,
-0.753,
-0.798,
-0.721,
-0.794,
-0.673,
-0.769,
-0.692,
-0.767,
-0.779,
-0.71,
-0.704,
-0.833,
-0.733,
-0.79,
-0.657,
-0.748,
-0.8,
-0.728,
-0.728,
-0.76,
-0.723,
-0.697,
-0.762,
-0.784,
-0.666,
-0.695,
-0.686,
-0.702,
-0.684,
-0.732,
-0.707,
-0.787,
-0.72,
-0.662,
-0.761,
-0.673,
-0.756,
-0.714,
-0.587,
-0.769,
-0.735,
-0.657,
-0.672,
-0.539,
-0.671,
-0.778,
-0.763,
-0.679,
-0.736,
-0.746,
-0.7,
-0.695,
-0.758,
-0.692,
-0.605,
-0.77,
-0.686,
-0.777,
-0.729,
-0.696,
-0.752,
-0.717,
-0.799,
-0.609,
-0.725,
-0.82,
-0.752,
-0.631,
-0.739,
-0.774,
-0.728,
-0.719,
-0.662,
-0.783,
-0.727,
-0.824,
-0.732,
-0.671,
-0.758,
-0.737,
-0.665,
-0.674,
-0.763,
-0.686,
-0.684,
-0.61,
-0.712,
-0.67,
-0.708,
-0.713,
-0.809
],
"31": [
-0.54,
-0.478,
-0.573,
-0.488,
-0.548,
-0.526,
-0.506,
-0.416,
-0.469,
-0.449,
-0.485,
-0.521,
-0.506,
-0.581,
-0.483,
-0.534,
-0.549,
-0.531,
-0.507,
-0.423,
-0.528,
-0.494,
-0.509,
-0.52,
-0.47,
-0.539,
-0.445,
-0.454,
-0.513,
-0.521,
-0.433,
-0.542,
-0.51,
-0.495,
-0.561,
-0.517,
-0.526,
-0.416,
-0.532,
-0.482,
-0.604,
-0.437,
-0.571,
-0.483,
-0.58,
-0.538,
-0.587,
-0.522,
-0.501,
-0.538,
-0.488,
-0.606,
-0.54,
-0.478,
-0.589,
-0.555,
-0.499,
-0.52,
-0.515,
-0.549,
-0.516,
-0.546,
-0.453,
-0.479,
-0.514,
-0.588,
-0.449,
-0.469,
-0.445,
-0.515,
-0.474,
-0.518,
-0.555,
-0.553,
-0.515,
-0.518,
-0.467,
-0.53,
-0.517,
-0.543,
-0.556,
-0.56,
-0.548,
-0.536,
-0.442,
-0.459,
-0.496,
-0.531,
-0.442,
-0.417,
-0.557,
-0.602,
-0.482,
-0.527,
-0.547,
-0.449,
-0.44,
-0.42,
-0.489,
-0.509,
-0.536,
-0.596,
-0.486,
-0.454,
-0.446,
-0.522,
-0.603,
-0.479,
-0.504,
-0.517,
-0.476,
-0.382,
-0.49,
-0.41,
-0.424,
-0.466,
-0.451,
-0.528,
-0.516,
-0.462,
-0.496,
-0.43,
-0.509,
-0.439,
-0.521,
-0.508,
-0.474,
-0.461,
-0.465,
-0.515
],
"32": [
0.254,
0.242,
0.221,
0.341,
0.26,
0.269,
0.275,
0.325,
0.274,
0.275,
… [+7,032 chars]
app/data/experiments/exp_seed100_ch36-39.json (23,441 chars)
{
"channels": [
36,
37,
38,
39
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"36": [
-0.723,
-0.736,
-0.816,
-0.63,
-0.643,
-0.7,
-0.637,
-0.738,
-0.646,
-0.763,
-0.705,
-0.687,
-0.742,
-0.687,
-0.763,
-0.627,
-0.679,
-0.751,
-0.626,
-0.749,
-0.712,
-0.634,
-0.698,
-0.702,
-0.619,
-0.734,
-0.707,
-0.735,
-0.655,
-0.668,
-0.598,
-0.69,
-0.689,
-0.652,
-0.656,
-0.745,
-0.71,
-0.68,
-0.635,
-0.675,
-0.6,
-0.697,
-0.638,
-0.616,
-0.728,
-0.633,
-0.705,
-0.616,
-0.646,
-0.596,
-0.592,
-0.65,
-0.745,
-0.629,
-0.694,
-0.692,
-0.633,
-0.668,
-0.605,
-0.606,
-0.602,
-0.694,
-0.711,
-0.679,
-0.717,
-0.657,
-0.627,
-0.72,
-0.639,
-0.68,
-0.583,
-0.681,
-0.633,
-0.724,
-0.687,
-0.693,
-0.701,
-0.697,
-0.662,
-0.631,
-0.582,
-0.678,
-0.67,
-0.653,
-0.633,
-0.614,
-0.704,
-0.599,
-0.704,
-0.658,
-0.657,
-0.714,
-0.669,
-0.746,
-0.664,
-0.713,
-0.616,
-0.645,
-0.664,
-0.721,
-0.687,
-0.651,
-0.636,
-0.733,
-0.652,
-0.636,
-0.703,
-0.595,
-0.685,
-0.698,
-0.69,
-0.692,
-0.649,
-0.669,
-0.594,
-0.704,
-0.665,
-0.689,
-0.698,
-0.701,
-0.706,
-0.674,
-0.678,
-0.67,
-0.681,
-0.724,
-0.675,
-0.712,
-0.631,
-0.659
],
"37": [
-0.82,
-0.879,
-0.876,
-0.817,
-0.874,
-0.889,
-0.872,
-0.863,
-0.886,
-0.908,
-0.845,
-0.826,
-0.882,
-0.894,
-0.886,
-0.892,
-0.86,
-0.847,
-0.952,
-0.84,
-0.867,
-0.853,
-0.866,
-0.904,
-0.927,
-0.891,
-0.921,
-0.865,
-0.872,
-0.881,
-0.862,
-0.88,
-0.904,
-0.878,
-0.971,
-0.89,
-0.892,
-0.898,
-0.902,
-0.966,
-0.887,
-0.999,
-0.902,
-0.863,
-0.823,
-0.928,
-0.904,
-0.858,
-0.89,
-0.82,
-0.84,
-0.867,
-0.894,
-0.948,
-0.907,
-0.89,
-0.888,
-0.916,
-0.922,
-0.847,
-0.917,
-0.88,
-0.835,
-0.879,
-0.908,
-0.915,
-0.834,
-0.864,
-0.9,
-0.831,
-0.784,
-0.955,
-0.835,
-0.831,
-0.915,
-0.951,
-0.959,
-1.035,
-0.942,
-0.879,
-0.837,
-0.833,
-0.902,
-0.991,
-0.912,
-0.85,
-0.974,
-0.967,
-0.843,
-0.899,
-0.911,
-0.921,
-0.903,
-0.825,
-0.954,
-0.895,
-0.901,
-0.883,
-0.902,
-0.827,
-0.908,
-0.921,
-0.855,
-0.926,
-0.865,
-0.924,
-0.945,
-0.955,
-0.846,
-0.88,
-0.892,
-0.903,
-0.843,
-0.897,
-0.913,
-0.98,
-0.912,
-0.84,
-0.844,
-0.845,
-0.845,
-0.808,
-0.826,
-0.908,
-0.932,
-0.762,
-0.825,
-0.887,
-0.797,
-0.942
],
"38": [
0.614,
0.472,
0.575,
0.611,
0.471,
0.637,
0.506,
0.561,
0.639,
0.577,
0.602,
0. … [+3,441 chars]
app/data/experiments/exp_seed100_ch6-11.json (27,284 chars)
{
"channels": [
6,
7,
8,
9,
10,
11
],
"name": "exp_seed100_hold20_drive2000",
"seed": 100,
"segments": [
{
"t": 200,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
-0.3,
0.15,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
-0.3,
0.3,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
-0.3,
0.15,
-0.15,
0.0,
0.15,
0.3,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
0.3,
0.3,
0.15,
0.15,
0.15,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.15,
-0.3,
0.0,
-0.15,
-0.15,
0.15,
0.0
]
},
{
"t": 20,
"u": [
0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0,
-0.3,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.3,
0.0,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.15,
0.15,
-0.3,
-0.15,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.15,
0.3,
0.0,
0.3,
0.15,
-0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.3,
0.15,
0.3,
0.0,
0.0,
0.3,
0.0,
0.3
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.0,
-0.3,
0.0,
0.0,
0.15,
0.3
]
},
{
"t": 20,
"u": [
0.0,
0.3,
0.15,
-0.15,
-0.3,
-0.3,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.15,
-0.15,
0.0,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
-0.15,
-0.15,
0.15,
-0.3,
0.3,
0.0,
0.3,
0.15
]
},
{
"t": 20,
"u": [
0.3,
0.3,
0.0,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.3,
-0.15,
-0.3,
-0.15,
-0.3,
0.3,
0.0
]
},
{
"t": 20,
"u": [
-0.3,
0.15,
0.0,
0.0,
0.15,
0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.3,
-0.3,
-0.3,
0.0,
0.3,
0.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
-0.15,
0.0,
-0.15,
0.0,
0.0,
-0.3,
0.0
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.15,
0.0,
-0.15,
-0.15,
0.0
]
},
{
"t": 20,
"u": [
0.3,
0.0,
0.15,
0.3,
0.3,
-0.15,
0.15,
-0.3
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.15,
-0.15,
0.0,
0.3,
-0.3,
0.15
]
},
{
"t": 20,
"u": [
0.15,
0.3,
0.0,
-0.3,
-0.3,
-0.3,
-0.15,
0.15
]
},
{
"t": 20,
"u": [
0.0,
0.15,
-0.15,
-0.3,
0.0,
-0.3,
-0.3,
-0.15
]
},
{
"t": 20,
"u": [
-0.15,
0.0,
0.15,
0.15,
-0.15,
0.3,
0.15,
0.0
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.7,
-0.35,
0.7,
0.35,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.7,
0.35,
0.0,
-0.7,
0.0,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
-0.7,
-0.7,
0.35,
-0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.0,
-0.7,
-0.35,
0.7,
-0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.35,
0.0,
0.7,
0.7,
0.35,
0.35
]
},
{
"t": 20,
"u": [
0.0,
0.35,
0.7,
0.0,
0.7,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.7,
0.0,
0.35,
-0.7,
-0.7,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
0.0,
-0.7,
0.7,
0.7,
-0.35,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.35,
-0.7,
-0.7,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.7,
0.0,
-0.7,
0.35,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
0.0,
0.7,
0.35,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.0,
0.7,
-0.7,
-0.7,
-0.35,
0.0,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.35,
0.35,
0.7,
-0.35,
0.0,
-0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.7,
0.35,
-0.35,
-0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.7,
-0.7,
0.35,
0.35,
-0.7,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
-0.35,
-0.7,
-0.35,
0.0,
-0.35,
0.35
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.7,
0.35,
0.35,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.35,
0.0,
-0.7,
0.0,
0.7,
0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
0.35,
0.7,
0.0,
0.35,
0.0,
-0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.35,
-0.7,
0.0,
0.0,
0.7,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.35,
0.0,
0.7,
0.0,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.7,
-0.7,
-0.35,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
0.35,
0.0,
0.0,
0.35,
0.0,
0.35,
0.7
]
},
{
"t": 20,
"u": [
0.35,
-0.7,
-0.35,
0.35,
0.0,
0.7,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
-0.35,
0.0,
0.0,
0.0,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
-0.35,
-0.7,
-0.35,
-0.7,
0.0,
-0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.0,
0.0,
-0.7,
0.35,
0.35,
0.0,
0.7,
0.0
]
},
{
"t": 20,
"u": [
-0.7,
-0.35,
0.35,
0.7,
0.0,
-0.35,
0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.35,
0.35,
0.35,
-0.7,
-0.7,
-0.7,
-0.7
]
},
{
"t": 20,
"u": [
0.7,
-0.7,
-0.35,
-0.35,
0.35,
0.7,
0.35,
-0.7
]
},
{
"t": 20,
"u": [
-0.7,
-0.7,
0.35,
-0.35,
0.0,
0.7,
-0.35,
0.7
]
},
{
"t": 20,
"u": [
-0.35,
0.0,
0.7,
0.0,
0.35,
0.0,
0.0,
0.7
]
},
{
"t": 20,
"u": [
0.35,
0.7,
0.35,
0.35,
-0.35,
-0.35,
0.35,
-0.35
]
},
{
"t": 20,
"u": [
0.35,
0.0,
0.35,
-0.7,
-0.35,
0.7,
0.0,
0.35
]
},
{
"t": 20,
"u": [
-0.35,
-0.35,
-0.7,
0.0,
0.0,
0.35,
0.7,
-0.35
]
},
{
"t": 20,
"u": [
1.0,
-0.5,
-0.5,
0.0,
0.5,
-0.5,
1.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
1.0,
-1.0,
0.0,
1.0,
1.0,
-1.0,
0.0
]
},
{
"t": 20,
"u": [
0.5,
-1.0,
0.0,
1.0,
0.5,
1.0,
-0.5,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
0.0,
0.5,
-1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
0.0,
0.5,
1.0,
1.0,
0.5,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.5,
-0.5,
0.5,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
0.0,
1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
1.0,
0.5,
1.0,
-1.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
0.5,
0.5,
-0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-1.0,
-0.5,
0.5,
0.5,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
1.0,
-1.0,
0.5,
0.5,
0.0,
1.0
]
},
{
"t": 20,
"u": [
-1.0,
-0.5,
0.5,
-1.0,
-1.0,
-1.0,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-1.0,
0.5,
-0.5,
0.0,
0.0,
0.5,
-1.0,
1.0
]
},
{
"t": 20,
"u": [
0.5,
1.0,
-0.5,
1.0,
1.0,
1.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
-0.5,
0.5,
0.5,
0.5,
0.5,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
-1.0,
-0.5,
-0.5,
-0.5,
0.5,
1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.5,
0.5,
0.5,
-0.5,
0.0,
1.0,
0.0
]
},
{
"t": 20,
"u": [
0.0,
1.0,
0.5,
1.0,
0.5,
-1.0,
-1.0,
0.5
]
},
{
"t": 20,
"u": [
1.0,
0.0,
0.5,
0.0,
1.0,
-1.0,
-1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.5,
1.0,
1.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
-1.0,
-0.5,
-0.5,
0.5,
-0.5,
-0.5,
0.5
]
},
{
"t": 20,
"u": [
0.5,
1.0,
0.5,
-1.0,
0.5,
0.5,
0.5,
-1.0
]
},
{
"t": 20,
"u": [
1.0,
-1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
1.0,
1.0,
-1.0,
0.0,
0.5,
1.0
]
},
{
"t": 20,
"u": [
0.0,
0.0,
1.0,
-0.5,
-1.0,
-0.5,
1.0,
-1.0
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.25,
0.5,
-0.25,
-0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.5,
-0.25,
0.0,
-0.25,
0.0,
0.5,
-0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.0,
-0.25,
0.25,
-0.5,
0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
-0.5,
0.5,
-0.5,
0.5,
-0.25,
-0.5,
0.0,
-0.5
]
},
{
"t": 20,
"u": [
0.5,
0.0,
0.0,
-0.25,
-0.5,
0.0,
0.0,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
-0.25,
0.0,
0.0,
0.25,
0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.5,
0.0,
0.5,
-0.5,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
0.5,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.0,
-0.5,
0.25,
-0.25,
-0.5,
-0.25,
0.0,
0.25
]
},
{
"t": 20,
"u": [
0.5,
-0.5,
0.0,
-0.5,
0.5,
-0.25,
-0.25,
0.25
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
0.5,
-0.25,
0.5,
0.0,
0.25,
0.5
]
},
{
"t": 20,
"u": [
-0.25,
0.25,
-0.5,
0.5,
-0.5,
-0.25,
-0.5,
0.25
]
},
{
"t": 20,
"u": [
-0.5,
-0.25,
0.25,
0.0,
0.5,
-0.25,
0.5,
0.25
]
},
{
"t": 20,
"u": [
0.25,
0.5,
-0.25,
0.0,
-0.25,
0.5,
0.0,
0.0
]
},
{
"t": 20,
"u": [
-0.5,
0.0,
0.5,
-0.5,
0.5,
0.0,
-0.25,
0.25
]
},
{
"t": 400,
"u": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"series": {
"10": [
-0.638,
-0.714,
-0.635,
-0.661,
-0.599,
-0.647,
-0.718,
-0.675,
-0.665,
-0.688,
-0.719,
-0.602,
-0.631,
-0.715,
-0.593,
-0.607,
-0.687,
-0.653,
-0.628,
-0.652,
-0.622,
-0.612,
-0.686,
-0.52,
-0.699,
-0.684,
-0.629,
-0.637,
-0.669,
-0.689,
-0.679,
-0.657,
-0.658,
-0.618,
-0.662,
-0.616,
-0.66,
-0.671,
-0.646,
-0.665,
-0.56,
-0.719,
-0.71,
-0.713,
-0.665,
-0.611,
-0.644,
-0.641,
-0.576,
-0.654,
-0.691,
-0.718,
-0.574,
-0.615,
-0.687,
-0.702,
-0.642,
-0.633,
-0.619,
-0.722,
-0.664,
-0.673,
-0.656,
-0.51,
-0.622,
-0.742,
-0.607,
-0.649,
-0.696,
-0.648,
-0.631,
-0.701,
-0.697,
-0.634,
-0.531,
-0.653,
-0.647,
-0.675,
-0.641,
-0.647,
-0.604,
-0.632,
-0.701,
-0.718,
-0.575,
-0.683,
-0.729,
-0.574,
-0.714,
-0.738,
-0.606,
-0.651,
-0.674,
-0.607,
-0.703,
-0.652,
-0.663,
-0.638,
-0.672,
-0.604,
-0.652,
-0.674,
-0.607,
-0.654,
-0.635,
-0.617,
-0.572,
-0.625,
-0.669,
-0.616,
-0.677,
-0.699,
-0.653,
-0.713,
-0.66,
-0.642,
-0.731,
-0.737,
-0.672,
-0.59,
-0.72,
-0.714,
-0.632,
-0.674,
-0.666,
-0.645,
-0.683,
-0.739,
-0.674,
-0.639
],
"11": [
-0.505,
-0.582,
-0.525,
-0.523,
-0.563,
-0.574,
-0.504,
-0.504,
-0.523,
-0.631,
-0.49,
-0.489,
-0.499,
-0.441,
-0.522,
-0.465,
-0.484,
-0.544,
-0.566,
-0.541,
-0.444,
-0.559,
-0.508,
-0.518,
-0.433,
-0.497,
-0.655,
-0.509,
-0.581,
-0.54,
-0.529,
-0.524,
-0.538,
-0.568,
-0.545,
-0.585,
-0.592,
-0.575,
-0.46,
-0.559,
-0.521,
-0.484,
-0.564,
-0.464,
-0.592,
-0.583,
-0.488,
-0.545,
-0.546,
-0.534,
-0.571,
-0.481,
-0.589,
-0.604,
-0.429,
-0.522,
-0.45,
-0.54,
-0.477,
-0.478,
-0.429,
-0.482,
-0.497,
-0.533,
-0.503,
-0.51,
-0.475,
-0.514,
-0.443,
-0.503,
-0.522,
-0.563,
-0.581,
-0.445,
-0.507,
-0.577,
-0.625,
-0.517,
-0.498,
-0.447,
-0.591,
-0.639,
-0.465,
-0.557,
-0.63,
-0.59,
-0.505,
-0.535,
-0.477,
-0.498,
-0.476,
-0.434,
-0.595,
-0.573,
-0.533,
-0.567,
-0.576,
-0.62,
-0.529,
-0.523,
-0.502,
-0.525,
-0.563,
-0.57,
-0.483,
-0.526,
-0.607,
-0.475,
-0.585,
-0.505,
-0.498,
-0.521,
-0.527,
-0.444,
-0.659,
-0.54,
-0.557,
-0.577,
-0.537,
-0.557,
-0.482,
-0.544,
-0.53,
-0.514,
-0.559,
-0.508,
-0.508,
-0.61,
-0.525,
-0.633
],
"6": [
-0.079,
-0.241,
-0.336,
-0.508,
-0.576,
-0.591,
-0.564,
-0.595,
-0.628,
… [+7,284 chars]
app/data/models/first_order.json (15,855 chars)
{
"models": {
"0": {
"a": 0.3137589267878684,
"b": [
-0.010471106639773584,
-0.004660561643247683,
0.01225698338868643,
0.004990025951286995,
0.016173576547552207,
-0.020998009364092414,
-0.006603546605175651,
-0.0104535004486911
],
"c": 0.5309104951329153,
"resid_sd": 0.06535824770267401
},
"1": {
"a": -0.026625559940621397,
"b": [
-0.019521770019643087,
0.019295094272043196,
0.01791284861272886,
0.009818297729122773,
0.014824996033183751,
-0.019735319616664224,
0.027929092442257216,
-0.007966486670319647
],
"c": -0.973895291251374,
"resid_sd": 0.04765106209922176
},
"2": {
"a": 0.2054426281414054,
"b": [
0.0074720893701934995,
0.005210760391356469,
-0.00020995703395043077,
-0.0029560427690857667,
-0.02029232350972785,
-0.00023745593333332856,
0.011517544296226166,
0.014745779618492237
],
"c": 0.14313901286808542,
"resid_sd": 0.044854040767549924
},
"3": {
"a": -0.03197906155562061,
"b": [
0.0069286191122933305,
-0.0016007101531132655,
-0.00018711778222698096,
0.004129512455743012,
0.003539021577165823,
0.0036935941558738847,
0.0017769017983988978,
0.005877982299001091
],
"c": -0.17695658267444012,
"resid_sd": 0.05007165289502805
},
"4": {
"a": -0.04028716317736323,
"b": [
-0.007348600616159789,
-0.0018075435372187163,
0.016383839760965562,
0.008759844780529645,
-0.003167031974343326,
0.010374494176672796,
0.003112033406650593,
0.020979134305185332
],
"c": -0.7583743705800686,
"resid_sd": 0.04650593167913442
},
"5": {
"a": 0.041977128598279526,
"b": [
-0.01631795942082859,
0.008935317387589447,
-0.00904409619274234,
0.0037453571418979387,
0.00432324749268648,
-0.006524099969568817,
-0.0002895071996336587,
0.0023410236160331384
],
"c": -0.48070860980042723,
"resid_sd": 0.04752224054826789
},
"6": {
"a": 0.4082224608123264,
"b": [
0.004734565698073268,
0.01624579054198325,
-0.006385473678226167,
0.0024782865388209337,
-0.01125242282251319,
-0.017099630459262407,
0.003263199191833759,
-0.00970123631279437
],
"c": -0.3644571906501409,
"resid_sd": 0.05511644658665976
},
"7": {
"a": -0.1386678219542793,
"b": [
0.0053488373620527085,
0.007402305776702941,
-0.0038386935215544106,
0.0007466120752818126,
0.00421456633236363,
-0.013351926820584873,
-0.005448175291525571,
-0.0034376087119348244
],
"c": -0.9545532313425905,
"resid_sd": 0.045229655235316316
},
"8": {
"a": 0.6261665262130172,
"b": [
-0.01589427680380799,
0.0021053749563344727,
0.01317006470528071,
0.0068141306871125846,
0.012591173836903993,
0.016890793856184763,
-0.014090982431711172,
-0.007605029379426357
],
"c": -0.149742634686446,
"resid_sd": 0.05371846050558481
},
"9": {
"a": 0.06360046355995912,
"b": [
0.017875390880966242,
0.005679286364744466,
0.0011827254878052924,
-0.02249500960205697,
-0.004765177100239094,
0.0008433881972744939,
-0.0005972572210309449,
-0.008607873770956152
],
"c": 0.18524612348422848,
"resid_sd": 0.05175028580686805
},
"10": {
"a": -0.05624317803101918,
"b": [
-0.010121444275872207,
0.004795108634723472,
0.011957719289466507,
0.011020433370319813,
-0.003375270457802018,
0.001118086230917625,
0.01731765736671427,
0.003392801196933256
],
"c": -0.6933002538630272,
"resid_sd": 0.04430171538263469
},
"11": {
"a": 0.009085213971610417,
"b": [
-0.008922231794338044,
-0.017258790301521065,
-0.007787045498224507,
0.0111332407664617,
-0.005652468362278031,
-0.005835896226562854,
-0.01760802222722998,
-0.006373173901992105
],
"c": -0.5226769799876403,
"resid_sd": 0.04960121245134849
},
"12": {
"a": -0.2255823754737849,
"b": [
-0.01498246197362289,
-0.011424522006838649,
0.0008079434908507511,
-0.0022118544808168565,
-0.0012875609486909451,
-0.0017626021968171874,
0.0012621737508807446,
-0.008692411392076273
],
"c": -0.46595868016691083,
"resid_sd": 0.04357698275287313
},
"13": {
"a": -0.11510497557466391,
"b": [
0.007656565452871436,
0.01306797246820448,
-0.005733485282191086,
0.009863608493459223,
0.004604535308462927,
-0.012842468978180062,
0.02493996179340602,
-0.0192426639832691
],
"c": -0.6281820949088256,
"resid_sd": 0.04821658857384454
},
"14": {
"a": 0.08247504690803281,
"b": [
-0.006158458108343079,
-0.00935441310982558,
-0.01364568157765132,
-0.019689889686295238,
0.015379438022314016,
-0.0025344612848150153,
0.0029588716081532978,
0.0061257763630916265
],
"c": -0.7934620997355152,
"resid_sd": 0.047155343565857454
},
"15": {
"a": 0.49214737268160275,
"b": [
0.01962360259203007,
-0.002645115975785935,
-0.01799727748304157,
-0.0015272475845672295,
0.005174354021207791,
0.017522898522479357,
0.003806016306807775,
-0.0216609769118004
],
"c": 0.3243615713030847,
"resid_sd": 0.05763054535226914
},
"16": {
"a": 0.09349383959183323,
"b": [
0.005606798387518482,
-0.024123579052541144,
-0.004661610745854438,
0.0009187117011499833,
0.00828491431385257,
-0.012149938207550915,
-0.012522198315912936,
0.009533264382839714
],
"c": -0.06559654018835498,
"resid_sd": 0.048880172151899395
},
"17": {
"a": -0.025408881794905823,
"b": [
0.0029632927821818026,
0.012528558606573037,
0.012791147821838685,
0.01808449469334435,
0.013079622726999437,
-0.015452228941722145,
-0.012753689676046958,
-0.002760500280203863
],
"c": 0.1243873309218128,
"resid_sd": 0.05019442227272629
},
"18": {
"a": 0.08948270514504424,
"b": [
0.013474945386721704,
-0.02541982743830249,
0.006143029197112563,
-0.013751277440716289,
0.004674022602846414,
-0.010873554101809367,
-0.008966303662215177,
-0.0004346969562956056
],
"c": 0.6652655821679613,
"resid_sd": 0.04562903789704127
},
"19": {
"a": 0.8730924055601429,
"b": [
0.00954413559806647,
0.029884269703574943,
0.013012188087104781,
-0.008412526361460984,
-0.007848836412554445,
5.038078679107871e-05,
-0.003079187727216784,
-0.001442816132415164
],
"c": -0.045584864087608416,
"resid_sd": 0.0757418232000144
},
"20": {
"a": 0.9295790641689997,
"b": [
0.00663239348039437,
0.04498221241442482,
0.011333221436016722,
0.03075936176601118,
-0.005431290399868354,
-0.0026020021669301346,
-0.01875589846734346,
0.0024558569709224745
],
"c": 0.03318531771788843,
"resid_sd": 0.10386100244918801
},
"21": {
"a": 0.8979613726119524,
"b": [
-0.010343978316087288,
-0.02387042880135437,
-0.033530227940140704,
-0.0019147382286690189,
0.01070978254647911,
-0.0031555448240776734,
-0.01408993007242424,
-0.011856807294476968
],
"c": -0.050544415289009256,
"resid_sd": 0.0829021325305866
},
"22": {
"a": 0.025400848536476676,
"b": [
0.0015273604346444946,
0.0036394032134594986,
-0.0047032535593291794,
0.0034775478185188847,
-0.012119419146588022,
-0.008634583952568884,
-0.0007631790574071959,
0.004993920496165609
],
"c": -0.4870807294378385,
"resid_sd": 0.04822550842600212
},
"23": {
"a": -0.05587802816240871,
"b": [
0.01406857760069024,
0.0059172101740833415,
0.0044465764049967365,
-0.011132439075206748,
-0.0010400604800028367,
0.014961238972157193,
0.010742825929913513,
0.014747360041289573
],
"c": 0.33521134448746265,
"resid_sd": 0.05017557855325155
},
"24": {
"a": 0.0049370716414339965,
"b": [
0.008894041166436753,
-0.00908350855056672,
-0.014321932350406566,
-0.008776687605409242,
0.020229383250537816,
-0.0027948594226914194,
0.006050209396240407,
0.002330804040261617
],
"c": -0.5399781709503776,
"resid_sd": 0.05175324332434786
},
"25": {
"a": -0.12516506679946068,
"b": [
0.0019457161986040777,
0.013230061454440745,
-0.006395884496823741,
-0.011211039125987372,
-0.007098265952044724,
-0.00284104457202615,
0.009322283979441492,
-0.007124408477830326
],
"c": 0.25158559951869375,
"resid_sd": 0.049467912143277656
},
"26": {
"a": -0.101143076631138,
"b": [
0.0017854708853567588,
0.016427981645496924,
0.014263692004812745,
-0.0029717224152206274,
0.01323093148674877,
-0.006632693693240274,
0.003279215292679487,
0.00869124821783761
],
"c": 0.5080151185421008,
"resid_sd": 0.04584953996768171
},
"27": {
"a": 0.18420129234170454,
"b": [
-0.0028402050181456115,
-0.007777056572010686,
-0.0033443892668485664,
0.009735344570806591,
-0.004242704712242066,
0.003502049900199706,
-0.010294821023477166,
0.00039534490772510206
],
"c": -0.728654048190043,
"resid_sd": 0.04628842480788998
},
"28": {
"a": -0.13195019587081866,
"b": [
0.0036691677741584484,
-0.010543039151308196,
-0.00045450397466616503,
-0.01054993791383508,
-0.017164214033896865,
-0.01863572295650477,
0.019814162495124462,
0.002767763163720134
],
"c": 0.5422340962093863,
"resid_sd": 0.051004168909130364
},
"29": {
"a": 0.8769613214021702,
"b": [
0.02209265784191933,
0.03976932414092133,
0.058546750822398845,
-0.03826174154721516,
-0.049100979534929645,
-0.0402001548554446,
0.02155112603506018,
-0.015164370111841258
],
"c": 0.019723311670543746,
"resid_sd": 0.09134925058322091
},
"30": {
"a": -0.048240720603351474,
"b": [
-0.022047359066957012,
0.00612416655343473,
0.015806540959173148,
-0.018697695032335492,
-0.008748612524275284,
0.004070071683504125,
0.0009572696396608681,
0.0029951231942931555
],
"c": -0.7595550644169861,
"resid_sd": 0.04978116082269309
},
"31": {
"a": 0.13350245952409845,
"b": [
-0.005693753550211926,
0.023500642245717743,
0.016159594870392525,
0.006298613122267377,
0.002818164700115449,
-0.007495236472117389,
0.004890243357236122,
-0.007080910056032252
],
"c": -0.4387247807967138,
"resid_sd": 0.04563079886068162
},
"32": {
"a": 0.2153262546327998,
"b": [
0.004840998913203545,
-0.003367686602263433,
0.010689112792072781,
-0.002749602150239711,
-0.018734124206489414,
0.009286116727800477,
-0.006913421297205859,
-0.007703671279012518
],
"c": 0.2389415378411769,
"resid_sd": 0.046950053232073075
},
"33": {
"a": 0.06738467646245329,
"b": [
-0.0016172395590187093,
0.011657613047782121,
0.0020802650047145196,
0.0007701357707804527,
-0.026729253554748787,
-0.0010805026857035258,
-0.004829460913441339,
-0.009035452776804622
],
"c": 0.7040255818917822,
"resid_sd": 0.051675734716883144
},
"34": {
"a": -0.012855851059519257,
"b": [
0.008732627965846855,
0.0062508806494139535,
0.0059757499585912114,
-0.02535999823270643,
0.009631128719257828,
-0.017509545525155434,
0.011306716863196783,
-0.006445294835005449
],
"c": 0.446413512589266,
"resid_sd": 0.0504730393603036
},
"35": {
"a": -0.2458951812866726,
"b": [
0.0009129366744890824,
-0.016327294418119444,
0.0055716578054899255,
0.002349174469375264,
-0.0004797704626286937,
0.018405680869041763,
-0.011560286768391093,
0.0038622248962556405
],
"c": -0.4931433744270089,
"resid_sd": 0.04583842022889356
},
"36": {
"a": -0.07176087220295964,
"b": [
-0.008889007788122514,
-0.0003491997985879718,
-0.029257990199968085,
0.0007173770346618457,
0.012402276428304895,
-0.009431418977760606,
0.001888207360757268,
0.002700120482821529
],
"c": -0.7218084277382466,
"resid_sd": 0.04241145782232286
},
"37": {
"a": 0.18087324553463494,
"b": [
-0.002719265221865671,
-0.015230350294038348,
-0.005822626563318163,
0.01372030493409614,
0.009688384981729989,
0.0021921057639104208,
-0.010025568794312989,
-0.016894886440536012
],
"c": -0.7254272726629859,
"resid_sd": 0.0435306495288019
},
"38": {
"a": -0.04669111713031644,
"b": [
0.0010512598186438497,
0.0053735545421982125,
0.0017486164097653802,
-0.007765716026273232,
0.021812615562777547,
-0.022499404728095876,
-0.010059370022498635,
-0.0005295052798284873
],
"c": 0.5879200743044337,
"resid_sd": 0.052523456658198624
},
"39": {
"a": 0.06516490092083953,
"b": [
0.00977610227676075,
-0.0016553460567782956,
-0.010493431872751122,
-0.015231755173249695,
0.0004448623678825303,
-0.0033120918460235235,
-3.336641436042497e-07,
-0.009234504924028185
],
"c": 0.06914853398282213,
"resid_sd": 0.047857019695779913
}
},
"source_files": [
"data/experiments/exp_seed100_ch0-5.json",
"data/experiments/exp_seed100_ch12-17.json",
"data/experiments/exp_seed100_ch18-23.json",
"data/experiments/exp_seed100_ch24-29.json",
"data/experiments/exp_seed100_ch30-35.json",
"data/experiments/exp_seed100_ch36-39.json",
"data/experiments/exp_seed100_ch6-11.json"
]
}
app/physim/__init__.py (64 chars)
"""Tools for experimenting with the MCP physim environment."""
app/physim/fit.py (1,838 chars)
from __future__ import annotations
from dataclasses import dataclass
from typing import Dict, Tuple
import numpy as np
@dataclass
class FirstOrderModel:
a: float
b: np.ndarray # [8]
c: float
resid_sd: float
def fit_first_order_arx(y: np.ndarray, u: np.ndarray, ridge: float = 1e-3) -> FirstOrderModel:
"""
Fits: y[t+1] = a*y[t] + b·u[t] + c + eps
y: [T]
u: [T,8]
"""
if y.ndim != 1:
raise ValueError("y must be 1D")
if u.ndim != 2 or u.shape[1] != 8:
raise ValueError("u must be [T,8]")
t = min(len(y), u.shape[0])
if t < 3:
raise ValueError("need at least 3 samples")
y = y[:t]
u = u[:t]
y0 = y[:-1]
y1 = y[1:]
x = np.concatenate([y0[:, None], u[:-1], np.ones((t - 1, 1))], axis=1) # [t-1, 10]
xtx = x.T @ x
xtx += ridge * np.eye(xtx.shape[0])
w = np.linalg.solve(xtx, x.T @ y1)
a = float(w[0])
b = w[1:9].astype(float)
c = float(w[9])
yhat = x @ w
resid = y1 - yhat
resid_sd = float(np.sqrt(np.mean(resid**2)))
return FirstOrderModel(a=a, b=b, c=c, resid_sd=resid_sd)
def simulate_first_order(model: FirstOrderModel, u: np.ndarray, y0: float) -> np.ndarray:
"""Simulates y over time given u[T,8] and scalar y0. Returns y[T]."""
t = u.shape[0]
y = np.empty((t,), dtype=float)
y[0] = y0
for k in range(t - 1):
y[k + 1] = model.a * y[k] + float(model.b @ u[k]) + model.c
return y
def tail_mean(y: np.ndarray, window: int = 20) -> float:
if len(y) < window:
return float(np.mean(y))
return float(np.mean(y[-window:]))
def tail_sd_of_mean(model: FirstOrderModel, window: int = 20) -> float:
"""
Heuristic: treat eps as iid with sd=model.resid_sd; SD of mean over window.
"""
return float(model.resid_sd / np.sqrt(window))
app/physim/io.py (739 chars)
from __future__ import annotations
import json
from pathlib import Path
from typing import Any, Dict
def ensure_dir(path: str | Path) -> Path:
p = Path(path)
p.mkdir(parents=True, exist_ok=True)
return p
def save_json(path: str | Path, obj: Any) -> None:
p = Path(path)
p.parent.mkdir(parents=True, exist_ok=True)
p.write_text(json.dumps(obj, indent=2, sort_keys=True))
def load_json(path: str | Path) -> Any:
return json.loads(Path(path).read_text())
def normalize_series_dict(series: Dict[str, Any] | None) -> Dict[int, list[float]]:
if not series:
return {}
out: Dict[int, list[float]] = {}
for k, v in series.items():
out[int(k)] = [float(x) for x in v]
return out
app/physim/predict.py (1,792 chars)
from __future__ import annotations
from dataclasses import dataclass
from typing import Dict, Sequence
import numpy as np
from physim.fit import FirstOrderModel, simulate_first_order, tail_mean
from physim.segments import downsample_for_stride, expand_segments_u
def model_from_json(d: dict) -> FirstOrderModel:
return FirstOrderModel(a=float(d["a"]), b=np.asarray(d["b"], dtype=float), c=float(d["c"]), resid_sd=float(d["resid_sd"]))
def convert_to_tick_model(model: FirstOrderModel, stride: int) -> FirstOrderModel:
"""
Converts a stride-step ARX model into an approximate per-tick model assuming
underlying dynamics are first-order and inputs are held constant within each
stride interval during identification.
"""
if stride <= 1:
return model
a_stride = float(model.a)
if a_stride <= 0.0:
# Fallback: don't attempt fractional powers; treat as per-tick already.
return model
a_tick = a_stride ** (1.0 / stride)
if abs(1.0 - a_tick) < 1e-9:
s = float(stride)
else:
s = (1.0 - a_stride) / (1.0 - a_tick)
b_tick = model.b / s
c_tick = model.c / s
resid_sd_tick = model.resid_sd / np.sqrt(s) # heuristic
return FirstOrderModel(a=float(a_tick), b=b_tick, c=float(c_tick), resid_sd=float(resid_sd_tick))
def predict_tail_mean(
model: FirstOrderModel,
segments: Sequence[dict],
stride: int,
y0: float,
window_ticks: int = 20,
) -> float:
# simulate at tick resolution for correct last-20-ticks behavior
m_tick = convert_to_tick_model(model, stride=stride)
u = expand_segments_u(segments) # [T,8] per-tick
y = simulate_first_order(m_tick, u, y0=y0)
return float(np.mean(y[-window_ticks:])) if len(y) >= window_ticks else float(np.mean(y))
app/physim/segments.py (2,659 chars)
from __future__ import annotations
from dataclasses import dataclass
from typing import Iterable, List, Sequence
import numpy as np
@dataclass(frozen=True)
class ExperimentSpec:
seed: int
pre_ticks: int = 200
drive_ticks: int = 1000
post_ticks: int = 200
hold: int = 4
amps: Sequence[float] = (0.3, 0.7, 1.0, 0.5)
amp_breaks: Sequence[float] = (0.25, 0.6, 0.85, 1.0)
def _amp_for_step(step_frac: float, amps: Sequence[float], breaks: Sequence[float]) -> float:
for amp, brk in zip(amps, breaks):
if step_frac <= brk:
return float(amp)
return float(amps[-1])
def generate_experiment_segments(spec: ExperimentSpec) -> List[dict]:
"""
Builds an open-loop excitation program as physim segments:
pre: zeros
drive: random piecewise-constant, changing each `hold` ticks, with staged amplitudes
post: zeros
"""
if spec.pre_ticks % spec.hold != 0:
raise ValueError("pre_ticks must be divisible by hold")
if spec.drive_ticks % spec.hold != 0:
raise ValueError("drive_ticks must be divisible by hold")
if spec.post_ticks % spec.hold != 0:
raise ValueError("post_ticks must be divisible by hold")
rng = np.random.RandomState(spec.seed)
levels = np.array([-1.0, -0.5, 0.0, 0.5, 1.0], dtype=float)
segments: List[dict] = []
segments.append({"t": spec.pre_ticks, "u": [0.0] * 8})
n_steps = spec.drive_ticks // spec.hold
for k in range(n_steps):
frac = (k + 1) / n_steps
amp = _amp_for_step(frac, spec.amps, spec.amp_breaks)
u = (rng.choice(levels, size=8) * amp).tolist()
segments.append({"t": spec.hold, "u": u})
segments.append({"t": spec.post_ticks, "u": [0.0] * 8})
return segments
def expand_segments_u(segments: Sequence[dict]) -> np.ndarray:
"""Expands physim segments into per-tick input array of shape [T, 8]."""
us: List[np.ndarray] = []
for seg in segments:
t = int(seg["t"])
u = np.asarray(seg["u"], dtype=float)
if u.shape != (8,):
raise ValueError(f"expected u shape (8,), got {u.shape}")
us.append(np.repeat(u[None, :], t, axis=0))
return np.concatenate(us, axis=0) if us else np.zeros((0, 8), dtype=float)
def downsample_for_stride(u: np.ndarray, stride: int) -> np.ndarray:
"""
Converts per-tick u[T,8] into per-sample u_ds[N,8] aligned to sensor series
sampled every `stride` ticks. Assumes u is piecewise constant at <= stride.
"""
if stride <= 0:
raise ValueError("stride must be positive")
n = u.shape[0] // stride
return u[: n * stride : stride].copy()
app/scripts/compute_answers.py (2,821 chars)
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import math
import sys
from pathlib import Path
import numpy as np
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from physim.io import load_json
from physim.predict import model_from_json, predict_tail_mean
def parse_window_ticks(window: str) -> int:
# formats like "last_20_ticks", "last_200_ticks"
parts = window.split("_")
for p in parts:
if p.isdigit():
return int(p)
raise ValueError(f"unrecognized window {window!r}")
def clamp01(x: float) -> float:
return float(max(-1.0, min(1.0, x)))
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--contracts", default="data/contracts.json")
ap.add_argument("--models", default="data/models/first_order.json")
ap.add_argument("--baseline", default="data/baseline/summary.json")
ap.add_argument("--stride", type=int, default=20)
args = ap.parse_args()
contracts_doc = load_json(args.contracts)
contracts = contracts_doc["contracts"]
models = load_json(args.models)["models"]
baseline = load_json(args.baseline)
base_mean = baseline["mean"]
base_sd_draws = baseline["sd_across_draws"]
base_tail_sd = baseline["mean_tail_sd"]
answers = []
for c in contracts:
cid = int(c["id"])
segments = c["protocol"]["segments"]
sensor = int(c["predict"]["channel"])
stat = c["predict"]["stat"]
window_ticks = parse_window_ticks(c["predict"]["window"])
if stat == "mean":
m = model_from_json(models[str(sensor)])
y0 = float(base_mean[str(sensor)])
pred = predict_tail_mean(m, segments=segments, stride=args.stride, y0=y0, window_ticks=window_ticks)
# Uncertainty: initial-condition variability + measurement noise (heuristic)
sd_draw = float(base_sd_draws.get(str(sensor), 0.02))
sd_meas = float(base_tail_sd.get(str(sensor), 0.05)) / math.sqrt(max(1, window_ticks))
sd = math.sqrt(sd_draw * sd_draw + sd_meas * sd_meas + 0.02 * 0.02)
half = max(0.04, 2.5 * sd)
answers.append({"id": cid, "mean": float(pred), "low": float(pred - half), "high": float(pred + half)})
elif stat == "sd":
# We don't model variance dynamics; use baseline tail SD as proxy.
pred = float(base_tail_sd[str(sensor)])
# Wider interval: variance can shift under drive.
half = 0.03
answers.append({"id": cid, "mean": pred, "low": max(0.0, pred - half), "high": pred + half})
else:
raise ValueError(f"unknown stat {stat!r}")
out = {"op": "answer", "answers": answers}
print(json.dumps(out))
if __name__ == "__main__":
main()
app/scripts/compute_baseline.py (1,473 chars)
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import glob
import json
from pathlib import Path
import numpy as np
import sys
from pathlib import Path as _Path
sys.path.insert(0, str(_Path(__file__).resolve().parents[1]))
from physim.io import load_json, save_json
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--in_glob", default="data/baseline/baseline_*.json")
ap.add_argument("--out", default="data/baseline/summary.json")
args = ap.parse_args()
paths = sorted(glob.glob(args.in_glob))
if not paths:
raise SystemExit("no baseline files found")
means = []
sds = []
for p in paths:
rec = load_json(p)
tm = {int(k): float(v) for k, v in rec["tail_mean"].items()}
ts = {int(k): float(v) for k, v in rec["tail_sd"].items()}
means.append([tm[i] for i in range(40)])
sds.append([ts[i] for i in range(40)])
means = np.asarray(means, dtype=float)
sds = np.asarray(sds, dtype=float)
out = {
"n": int(means.shape[0]),
"mean": {str(i): float(np.mean(means[:, i])) for i in range(40)},
"sd_across_draws": {str(i): float(np.std(means[:, i], ddof=1)) for i in range(40)},
"mean_tail_sd": {str(i): float(np.mean(sds[:, i])) for i in range(40)},
"source_files": paths,
}
save_json(args.out, out)
print(f"wrote {args.out} (n={out['n']})")
if __name__ == "__main__":
main()
app/scripts/fit_models.py (2,343 chars)
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import glob
import json
from pathlib import Path
import numpy as np
import sys
from pathlib import Path as _Path
sys.path.insert(0, str(_Path(__file__).resolve().parents[1]))
from physim.fit import FirstOrderModel, fit_first_order_arx
from physim.io import load_json, normalize_series_dict, save_json
from physim.segments import downsample_for_stride, expand_segments_u
def model_to_json(m: FirstOrderModel) -> dict:
return {"a": m.a, "b": m.b.tolist(), "c": m.c, "resid_sd": m.resid_sd}
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--in_glob", default="data/experiments/*.json")
ap.add_argument("--out", default="data/models/first_order.json")
ap.add_argument("--ridge", type=float, default=1e-3)
args = ap.parse_args()
paths = sorted(glob.glob(args.in_glob))
if not paths:
raise SystemExit(f"no files matched {args.in_glob!r}")
per_sensor: dict[int, list[FirstOrderModel]] = {}
for path in paths:
rec = load_json(path)
stride = int(rec["stride"])
segments = rec["segments"]
series = normalize_series_dict(rec.get("series"))
if not series:
continue
u = expand_segments_u(segments)
u_ds = downsample_for_stride(u, stride)
for sensor, y_list in series.items():
y = np.asarray(y_list, dtype=float)
t = min(len(y), u_ds.shape[0])
if t < 5:
continue
m = fit_first_order_arx(y[:t], u_ds[:t], ridge=args.ridge)
per_sensor.setdefault(sensor, []).append(m)
fused: dict[int, dict] = {}
for sensor, models in per_sensor.items():
# simple average across experiments (stable if experiments similar)
a = float(np.mean([m.a for m in models]))
b = np.mean(np.stack([m.b for m in models], axis=0), axis=0)
c = float(np.mean([m.c for m in models]))
resid_sd = float(np.sqrt(np.mean([m.resid_sd**2 for m in models])))
fused[sensor] = model_to_json(FirstOrderModel(a=a, b=b, c=c, resid_sd=resid_sd))
out_path = Path(args.out)
save_json(out_path, {"models": fused, "source_files": paths})
print(f"wrote {out_path} with {len(fused)} sensors")
if __name__ == "__main__":
main()
app/scripts/gen_segments.py (848 chars)
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from physim.segments import ExperimentSpec, generate_experiment_segments
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--seed", type=int, required=True)
ap.add_argument("--pre", type=int, default=200)
ap.add_argument("--drive", type=int, default=1000)
ap.add_argument("--post", type=int, default=200)
ap.add_argument("--hold", type=int, default=4)
args = ap.parse_args()
spec = ExperimentSpec(seed=args.seed, pre_ticks=args.pre, drive_ticks=args.drive, post_ticks=args.post, hold=args.hold)
segs = generate_experiment_segments(spec)
print(json.dumps(segs))
if __name__ == "__main__":
main()
app/scripts/predict_protocol.py (1,191 chars)
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
import numpy as np
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from physim.io import load_json
from physim.predict import model_from_json, predict_tail_mean
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--models", default="data/models/first_order.json")
ap.add_argument("--baseline", default="data/baseline/summary.json")
ap.add_argument("--sensor", type=int, required=True)
ap.add_argument("--stride", type=int, default=20)
ap.add_argument("--window_ticks", type=int, default=20)
ap.add_argument("--segments_json", required=True, help="JSON array of physim segments")
args = ap.parse_args()
models = load_json(args.models)["models"]
baseline = load_json(args.baseline)["mean"]
m = model_from_json(models[str(args.sensor)])
y0 = float(baseline[str(args.sensor)])
segments = json.loads(args.segments_json)
pred = predict_tail_mean(m, segments=segments, stride=args.stride, y0=y0, window_ticks=args.window_ticks)
print(pred)
if __name__ == "__main__":
main()
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | +0.774 | 0.087 | 0.0 | 0.996 | ✓ |
| 1 | S1 | -0.678 | 0.067 | 0.1 | 0.930 | ✓ |
| 2 | S1 | -0.397 | 0.049 | 0.6 | 0.565 | ✓ |
| 3 | S1 | -0.859 | 0.066 | 0.1 | 0.909 | ✓ |
| 4 | S2 | -0.174 | 0.037 | 0.2 | 0.837 | ✓ |
| 5 | S2 | +0.050 | 0.034 | 0.1 | 0.899 | ✓ |
| 6 | S2 | -0.523 | 0.079 | 0.1 | 0.867 | ✓ |
| 7 | S2 | +0.049 | 0.034 | 0.1 | 0.876 | ✓ |
| 8 | S3 | -0.862 | 0.066 | 0.0 | 0.959 | ✓ |
| 9 | S3 | +0.226 | 0.034 | 5.1 | 0.006 | ✗ |
| 10 | S3 | +0.558 | 0.073 | 0.0 | 0.952 | ✓ |
| 11 | S3 | +0.216 | 0.034 | 4.8 | 0.008 | ✗ |
| 12 | S4 | -0.172 | 0.037 | 0.0 | 0.992 | ✓ |
| 13 | S4 | -0.382 | 0.053 | 0.0 | 0.960 | ✓ |
| 14 | S4 | +0.198 | 0.046 | 0.0 | 0.998 | ✓ |
| 15 | S4 | -0.878 | 0.089 | 0.1 | 0.916 | ✓ |
| 16 | S5 | +0.049 | 0.034 | 0.1 | 0.870 | ✓ |
| 17 | S5 | +0.358 | 0.034 | 9.2 | 0.000 | ✗ |
| 18 | S5 | +0.209 | 0.034 | 4.6 | 0.010 | ✗ |
| 19 | S5 | +0.050 | 0.034 | 0.0 | 0.964 | ✓ |
Verbatim log (42 entries)
{"budget_left": 200000, "phase": "explore"}
{"ticks_run": 200, "budget_left": 199800}
{"ticks_run": 50, "budget_left": 199750}
{"budget_left": 199550}
{"budget_left": 198150}
{"ticks_run": 500, "budget_left": 197650}
{"budget_left": 197450}
{"ticks_run": 500, "budget_left": 196950}
{"ticks_run": 300, "budget_left": 196650}
{"budget_left": 196450}
{"budget_left": 195450}
{"ticks_run": 800, "budget_left": 194650}
{"budget_left": 194450}
{"budget_left": 192250}
{"ticks_run": 400, "budget_left": 191850}
{"budget_left": 191650}
{"ticks_run": 400, "budget_left": 191250}
{"budget_left": 191050}
{"ticks_run": 400, "budget_left": 190650}
{"budget_left": 190450}
{"ticks_run": 400, "budget_left": 190050}
{"budget_left": 189850}
{"ticks_run": 400, "budget_left": 189450}
{"budget_left": 189250}
{"ticks_run": 2600, "budget_left": 186650}
{"budget_left": 186450}
{"ticks_run": 2600, "budget_left": 183850}
{"budget_left": 183650}
{"ticks_run": 2600, "budget_left": 181050}
{"budget_left": 180850}
{"ticks_run": 2600, "budget_left": 178250}
{"budget_left": 178050}
{"ticks_run": 2600, "budget_left": 175450}
{"budget_left": 175250}
{"ticks_run": 2600, "budget_left": 172650}
{"budget_left": 172450}
{"ticks_run": 2600, "budget_left": 169850}
{"budget_left": 169650}
{"ticks_run": 800, "budget_left": 168850}
{"phase": "answer"}
{"received": 20}
Submitted predictions for all 20 contracts via `physim_answer()`.
Workspace artifacts:
- Baseline draws: `data/baseline/baseline_000.json` … `data/baseline/baseline_004.json`, summarized in `data/baseline/summary.json`
- Excitation runs (all sensors, same input program): `data/experiments/exp_seed100_*.json`
- Fitted per-sensor first-order ARX models: `data/models/first_order.json`
- Contracts +
anthropic/claude-fable-5 · C3 seed 0 · tier tools · accuracy 0.90 · preparation 1.00 · theory 0.78 · budget 25%
S1=0.93 · S2=0.86 · S3=0.86 · S4=0.96 · coverage 1.00 · 338 nodes
Narrative experiment log
- Free run (300 ticks; 300 ticks, all inputs 0).
- 2× single-port probe (800 ticks; port 0 at +0.12, 300t) — ch18 +0.63→+0.45.
- Free run (500 ticks; 500 ticks, all inputs 0).
- 7× single-port probe (2,100 ticks; port 2 at +0.12, 300t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (100 ticks; 100 ticks, all inputs 0).
- Single-port probe (400 ticks; port 0 at +0.12, 400t) — ch23 -0.14→-0.54, ch18 +0.30→+0.54.
- 2× free run (1,200 ticks; 600 ticks, all inputs 0).
- Single-port probe (1,200 ticks; port 0 at +0.12, 1200t) — ch18 +0.41→-0.57, ch23 -0.56→-0.85.
- ✗ free run rejected: series observation limited to <=6 channels.
- 2× free run (900 ticks; 800 ticks, all inputs 0) — ch34 -0.84→-0.42, ch33 -0.48→-0.13, ch16 -0.50→-0.21.
- 2× single-port probe (1,600 ticks; port 0 at -0.12, 900t).
- Reset to fresh initial conditions (−200 ticks).
- 2× single-port probe (400 ticks; port 0 at +0.05, 200t).
- Free run (300 ticks; 300 ticks, all inputs 0).
- Drive → release (700 ticks; drive +0.07 for 300t, release 400t).
- Free run (60 ticks; 60 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (150 ticks; port 0 at +0.12, 150t).
- Free run (350 ticks; 350 ticks, all inputs 0) — ch18 +0.60→+0.41.
- 2× single-port probe (2,000 ticks; port 0 at +0.12, 1000t).
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (150 ticks; port 1 at +0.12, 150t).
- Free run (350 ticks; 350 ticks, all inputs 0).
- Single-port probe (1,000 ticks; port 1 at +0.12, 1000t) — ch36 -0.65→-0.81.
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (150 ticks; port 2 at +0.12, 150t).
- 2× free run (700 ticks; 350 ticks, all inputs 0).
- Single-port probe (1,000 ticks; port 2 at +0.12, 1000t) — ch11 -0.74→-0.58.
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (150 ticks; port 3 at +0.12, 150t).
- Free run (350 ticks; 350 ticks, all inputs 0).
- Single-port probe (1,000 ticks; port 3 at +0.12, 1000t) — ch13 +0.59→-0.39, ch11 -0.77→+0.19, ch1 +0.49→-0.23.
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 2× single-port probe (300 ticks; port 5 at +0.12, 150t).
- Free run (350 ticks; 350 ticks, all inputs 0).
- Single-port probe (1,000 ticks; port 5 at +0.12, 1000t) — ch18 +0.15→-0.27, ch34 -0.75→-0.57.
- Free run (400 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (800 ticks; port 4 at +0.12, 800t).
- Free run (300 ticks; 300 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (800 ticks; port 6 at +0.12, 800t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (800 ticks; port 7 at +0.12, 800t).
- Reset to fresh initial conditions (−200 ticks).
- Multi-port probe (600 ticks; ports [0, 3] at -0.25, 600t).
- Free run (300 ticks; 300 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 5× drive → release (3,200 ticks; drive +0.12 for 100t, release 250t) — ch13 +0.01→-0.53, ch11 -0.02→+0.23, ch25 +0.06→+0.21.
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (800 ticks; drive +0.06 for 500t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (1,500 ticks; drive +0.25 for 400t, release 350t) — ch18 +0.41→-0.16, ch23 -0.55→-0.80.
- Free run (2,500 ticks; 2500 ticks, all inputs 0) — ch1 +0.49→+0.29, ch34 -0.64→-0.44, ch16 -0.40→-0.23.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Free run (1,200 ticks; 1200 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 4× free run (4,000 ticks; 600 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (1,200 ticks; port 1 at -0.12, 1200t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,100 ticks; drive -0.12 for 800t, release 300t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,300 ticks; drive +0.10 for 800t, release 500t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- 3× drive → release (1,350 ticks; drive -0.05 for 200t, release 300t) — ch18 +0.28→-0.66, ch23 -0.15→-0.83.
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (330 ticks; drive -0.12 for 80t, release 250t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (650 ticks; drive -0.07 for 400t, release 250t).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (330 ticks; drive -0.12 for 80t, release 250t).
- Free run (60 ticks; 60 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,550 ticks; drive +0.11 for 950t, release 600t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (500 ticks; port 0 at +0.09, 500t).
- Drive → release (1,050 ticks; drive +0.12 for 250t, release 800t) — ch1 +0.58→+0.22, ch11 -0.73→-0.41, ch25 -0.43→-0.27.
- Ended exploration → received 16 prediction contracts + 3 preparation contracts.
- Submitted 16 contract answers.
- Submitted preparation policy for contract 100 ("Flip port-3 branch: strong negative drive latches ch13 to ~-0.75,").
- Submitted preparation policy for contract 101 ("Flip port-3 branch: ch11 latches to ~+0.27 (plus slow upward aging drift),").
- Submitted preparation policy for contract 102 ("Flip port-0 branch: ch18 latches to ~-0.65, inside band [-0.952, -0.366].").
- Submitted an executable theory (4,084 chars).
Agent-written files (its instruments & theories)
app/physim/notes.md (3,947 chars)
# Physim world notes
Interface: 8 inputs, 40 sensors, obs window 20 ticks, budget 200000, reset costs 200.
Noise: all channels white-ish, sd ~0.05 (tail_sd 0.03-0.07 everywhere so far).
## Baseline (draw #1, after 300 ticks zero)
ch: 0:-0.54 1:0.576 2:0.036 3:-0.24 4:-0.28 5:-0.129 6:-0.607 7:-0.705 8:-0.627 9:0.096
10:-1.008 11:-0.742 12:-0.618 13:0.405 14:-0.072 15:-0.36 16:-0.476 17:-0.213 18:0.295 19:-0.446
20:-0.595 21:-0.669 22:0.349 23:-0.146 24:-0.393 25:-0.441 26:0.458 27:0.90 28:0.39 29:0.588
30:-0.482 31:0.289 32:-0.544 33:-0.452 34:-0.783 35:-0.501 36:-0.646 37:0.308 38:0.624 39:-0.435
## Port couplings (step +1, 300 ticks, changes > ~0.05)
- Port0: ch18 +0.34, ch23 -0.23
- Port1: ch11 +0.11, ch31 +0.12, ch33 +0.12, ch34 +0.11, ch36 -0.16
- Port2: ch16 +0.13, ch28 -0.13, ch1 -0.09, ch26 -0.09, ch14 +0.05?
- Port3: ch1 -0.36, ch11 +0.38, ch25 +0.28, ch13 -0.13
- Port4: ch13 -0.08 (weak)
- Port5: ch18 -0.26, ch23 +0.10 (same latent as port0, opposite sign)
- Port6: ~nothing clear
- Port7: ~nothing clear (maybe ch13 -0.04, ch11 +0.05)
## Key dynamics findings
1. PERSISTENCE: effects do NOT relax to baseline. After port0 step (ch18 0.295->0.63 during),
500+ ticks of zeros leave ch18 ~0.47, ch23 ~-0.40. Partial relaxation then hold.
2. SLOW DRIFT: after port3 step, its channels kept drifting the same direction for 1200+ ticks
at zero/other inputs: ch11 -0.195->-0.089, ch13 0.336->0.134, ch1 0.068->0.012.
(each arrow spans ~300 ticks steps). Could be slow integrator/adaptation latent.
3. Latents hypothesis: sensors = linear readout of a few latent states + offset + noise(0.05).
Latent A: driven by port0(+), port5(-); read by ch18(+), ch23(-).
Latent B: port3(+), port1(+ weaker); read by ch11(+), ch1(-), ch25(+), ch13(-)... check overlap w/ port1 set.
## Deep-drive findings (draw #2)
- Port0 +1 held 1600 ticks: ch18 fast +0.2 (tau~20), then slow creep +0.1 (tau~150?), then LONG decline
through zero to -0.57 (tau~500-800). ch23: fast +0.1, slow to -0.845 SATURATES (~tau 200-300).
- Release: NO decay of slow parts over 900+ ticks. ch18 stays -0.57, ch23 -0.83.
- Long port0 drive displaced MANY channels (all port-groups): ch1 -0.35, ch11 +0.36, ch14 +0.23,
ch16 +0.29, ch26 -0.19, ch28 -0.14, ch31 +0.21, ch33 +0.35, ch34 +0.42, ch36 -0.17, ch7 +0.15, ch4 -0.10.
- IRREVERSIBLE: port0=-1 x900 ticks did NOT undo anything (ch18 only -0.05 fast). port5=+1 x700 also
did not restore ch23/ch18 (ch18 fast only -0.08, vs -0.26 near baseline -> compressive nonlinearity
or fast latent rail). One-way ratchet / branch memory.
- Fresh-draw ICs consistent: draw#1 vs draw#2 baselines match within ~0.05.
- Responsive channels so far: 1,4,7,11,13,14,16,18,23,25,26,28,31,33,34,36 (+weak: 2?,22?). Others static.
## FINAL MODEL (fit6.py / model.pkl, validated mean-abs-err ~0.02-0.03)
- Sensors = BASE + linear readout of latents + white noise sd~0.05. 17 responsive channels.
- Fast reversible latents F_p per port, tau ~52.
- Aging A: autonomous 0->1 drift (Weibull lam~2451 k~1.23) from reset, input-independent,
suppressed ~80% while ports 0/3 driven negative. Readout = the shared "W pattern".
- Ratchet latches (permanent): Weibull fns of integrated |F_p|^2.33 for ports 0 (P0a,P0b),
3 (P3a,P3b,P3c), 5 (P5a). Positive drive charges gradually; port5 negative at 0.44x rate.
- AVALANCHE FLIPS: u<-0.50 on port 0 or 3 accumulates z=(|u|-0.5)*t; z>27 flips a bistable
branch (fixed pattern: ch18->-0.65/ch23->-0.85 for port0; ch1->-0.28,ch11->+0.27,
ch13->-0.75,ch25->+0.22 for port3). Permanent, ~60 ticks at u=-1.
- Contracts answered (16 predictions, 3 preps via flips, theory submitted).
## TODO
- reset, sample fresh ICs (several)
- step response series: time constant, latch fraction, bistable vs integrator
- amplitude sweep (nonlinearity, thresholds, sign asymmetry)
- long holds (duration dependence), drift characterization
- check sd/oscillation under strong drive
app/.vf-claude/a40435a192e546baa2f706c6b98375b0/.claude.json (389 chars)
{
"firstStartTime": "2026-08-13T20:29:23.018Z",
"machineID": "027d375c3fb8dfce99afcae8ebb6cd3cfb316f56f717816e8def592441c0196f",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "6420b890878693c6ef1a2cac1081c559b5d30ad238bdd96061bfc134c8a1bb72"
}
app/physim/data.py (12,293 chars)
# All physim observations. Each draw: list of (input_vec8, duration, tail_obs or None)
# tail_obs = dict channel -> mean of final 20 ticks of that segment-run.
# Times are ticks since reset (draw start). Noise sd ~0.05 per tick, SEM(tail20) ~0.011.
BASE = {0:-0.552, 1:0.615, 2:0.032, 3:-0.213, 4:-0.301, 5:-0.134, 6:-0.615, 7:-0.703,
8:-0.628, 9:0.090, 10:-0.996, 11:-0.775, 12:-0.622, 13:0.384, 14:-0.070,
15:-0.366, 16:-0.487, 17:-0.220, 18:0.298, 19:-0.434, 20:-0.599, 21:-0.649,
22:0.331, 23:-0.142, 24:-0.383, 25:-0.428, 26:0.466, 27:0.889, 28:0.410,
29:0.586, 30:-0.487, 31:0.281, 32:-0.548, 33:-0.470, 34:-0.828, 35:-0.510,
36:-0.628, 37:0.305, 38:0.625, 39:-0.433}
# (avg of fresh-draw baselines draws 1,2; consistent within ~0.05 across draws)
DRAWS = {
# draw1: initial port scan (300t steps at +1, some 200t gaps)
"d1": [
([0]*8, 300, {18:0.295, 23:-0.146, 1:0.576, 11:-0.742, 13:0.405, 16:-0.476, 25:-0.441,
26:0.458, 28:0.390, 31:0.289, 33:-0.452, 34:-0.783, 36:-0.646, 14:-0.072, 4:-0.280, 7:-0.705}),
([1,0,0,0,0,0,0,0], 300, {18:0.631, 23:-0.374, 14:-0.021, 1:0.564, 11:-0.718, 33:-0.405, 34:-0.740, 16:-0.435, 31:0.338}),
([0]*8, 200, None),
([0,1,0,0,0,0,0,0], 300, {11:-0.630, 31:0.413, 33:-0.332, 34:-0.675, 36:-0.804, 18:0.455, 23:-0.439, 1:0.520, 16:-0.413, 26:0.472, 28:0.443}),
([0]*8, 500, {11:-0.608, 18:0.474, 23:-0.402, 33:-0.284, 34:-0.636, 36:-0.723}),
([0,0,1,0,0,0,0,0], 300, {16:-0.286, 28:0.316, 1:0.433, 26:0.380, 14:0.047, 31:0.468, 18:0.477, 23:-0.418, 33:-0.252, 34:-0.662, 11:-0.575, 13:0.464}),
([0,0,0,1,0,0,0,0], 300, {1:0.068, 11:-0.195, 25:-0.142, 13:0.336, 16:-0.365, 34:-0.608, 33:-0.251, 18:0.463, 23:-0.416, 31:0.458}),
([0,0,0,0,1,0,0,0], 300, {13:0.258, 1:0.075, 11:-0.189, 25:-0.124, 33:-0.215, 34:-0.606, 18:0.461, 23:-0.413, 31:0.468, 16:-0.377}),
([0,0,0,0,0,1,0,0], 300, {18:0.203, 23:-0.309, 13:0.204, 1:0.050, 11:-0.145, 33:-0.231, 34:-0.582, 31:0.477, 16:-0.374, 25:-0.099}),
([0,0,0,0,0,0,1,0], 300, {18:0.192, 23:-0.376, 13:0.177, 1:0.039, 11:-0.135, 33:-0.211, 34:-0.605, 31:0.493, 16:-0.361, 4:-0.261}),
([0,0,0,0,0,0,0,1], 300, {18:0.182, 23:-0.377, 13:0.134, 1:0.012, 11:-0.089, 33:-0.192, 34:-0.596, 31:0.495, 16:-0.388, 25:-0.103}),
],
# draw2: baseline 100; port0 +1 x400; 0 x600; +1 x1200; 0 x800; 0 x100; -1 x900; port5 +1 x700
"d2": [
([0]*8, 100, {18:0.300, 23:-0.138, 1:0.639, 11:-0.769, 13:0.364, 16:-0.497, 33:-0.479, 34:-0.838, 31:0.280, 36:-0.623, 26:0.472, 28:0.416, 25:-0.421, 14:-0.080, 4:-0.306, 7:-0.699}),
([1,0,0,0,0,0,0,0], 400, {18:0.543, 23:-0.539}),
([0]*8, 600, {18:0.410, 23:-0.557}),
([1,0,0,0,0,0,0,0], 1200, {18:-0.570, 23:-0.846}),
([0]*8, 800, {18:-0.572, 23:-0.832, 1:0.293, 4:-0.412, 7:-0.546, 11:-0.405, 13:0.368, 14:0.154, 16:-0.211, 25:-0.365, 26:0.286, 28:0.277, 31:0.490, 33:-0.131, 34:-0.420, 36:-0.791}),
([0]*8, 100, {1:0.277, 11:-0.409, 18:-0.562, 23:-0.832}),
([-1,0,0,0,0,0,0,0], 900, {1:0.281, 11:-0.370, 16:-0.217, 18:-0.622, 23:-0.840, 34:-0.396}),
([0,0,0,0,0,1,0,0], 700, {1:0.264, 11:-0.348, 16:-0.201, 18:-0.649, 23:-0.827, 34:-0.361}),
],
# draw3: 0.4x200; 0x300; 0.6x300; 0x400; 0x60 (all-snapshot at end)
"d3": [
([0.4,0,0,0,0,0,0,0], 200, {18:0.392, 23:-0.138}),
([0]*8, 300, {18:0.332, 23:-0.157}),
([0.6,0,0,0,0,0,0,0], 300, None),
([0]*8, 400, {18:0.470, 23:-0.305}),
([0]*8, 60, {18:0.427, 23:-0.303, 1:0.510, 11:-0.641, 13:0.431, 14:0.002, 16:-0.401, 25:-0.445, 26:0.397, 28:0.362, 31:0.417, 33:-0.277, 34:-0.664, 36:-0.741}),
],
# draw4: port0 battery: +1x150; 0x350; +1x1000; 0x400
"d4": [
([1,0,0,0,0,0,0,0], 150, {18:0.596, 23:-0.184, 1:0.622, 11:-0.798, 16:-0.486, 33:-0.469, 34:-0.824, 31:0.285, 13:0.398, 25:-0.419, 26:0.478, 28:0.431, 36:-0.614}),
([0]*8, 350, {18:0.406, 23:-0.268, 1:0.571, 11:-0.736, 16:-0.428, 33:-0.396, 34:-0.754, 31:0.343, 36:-0.677, 26:0.444, 28:0.387, 13:0.396, 25:-0.442}),
([1,0,0,0,0,0,0,0], 1000, {18:-0.467, 23:-0.856, 1:0.442, 11:-0.568, 16:-0.384, 33:-0.271, 34:-0.622, 31:0.408, 4:-0.404, 13:0.455, 14:0.026, 25:-0.414, 26:0.381, 28:0.340, 36:-0.722}),
([0]*8, 400, {18:-0.437, 23:-0.817, 1:0.406, 11:-0.518, 16:-0.369, 33:-0.258, 34:-0.591, 31:0.431, 4:-0.402, 13:0.406, 14:0.052, 25:-0.408, 26:0.360, 28:0.322, 36:-0.773, 7:-0.693}),
],
# draw5: port1 battery
"d5": [
([0,1,0,0,0,0,0,0], 150, {26:0.532, 28:0.495, 36:-0.698, 34:-0.846, 31:0.264, 33:-0.485, 11:-0.779, 1:0.621, 18:0.305, 23:-0.142, 16:-0.480, 13:0.378, 25:-0.439}),
([0]*8, 350, {11:-0.712, 31:0.316, 33:-0.406, 34:-0.772, 36:-0.655, 26:0.450, 28:0.399, 1:0.569, 18:0.272, 23:-0.134, 16:-0.471, 13:0.432, 25:-0.452}),
([0,1,0,0,0,0,0,0], 1000, {11:-0.584, 31:0.439, 33:-0.284, 34:-0.669, 36:-0.807, 26:0.443, 28:0.400, 1:0.447, 18:0.245, 23:-0.125, 16:-0.387, 13:0.434, 14:0.015, 25:-0.412}),
([0]*8, 400, {11:-0.529, 31:0.464, 33:-0.242, 34:-0.625, 36:-0.743, 26:0.359, 28:0.317, 1:0.413, 18:0.262, 23:-0.125, 16:-0.388, 13:0.403, 14:0.035, 25:-0.425}),
],
# draw6: port2 battery
"d6": [
([0,0,1,0,0,0,0,0], 150, {16:-0.412, 7:-0.782, 1:0.624, 28:0.411, 26:0.465, 34:-0.883, 33:-0.461, 11:-0.798, 18:0.308, 23:-0.142, 13:0.361, 31:0.278}),
([0]*8, 350, {16:-0.439, 1:0.578, 11:-0.741, 33:-0.390, 34:-0.791, 31:0.342, 18:0.268, 23:-0.132, 26:0.448, 28:0.399, 13:0.409, 36:-0.684, 7:-0.690}),
([0,0,1,0,0,0,0,0], 1000, {16:-0.324, 7:-0.773, 1:0.454, 11:-0.580, 33:-0.271, 34:-0.692, 31:0.422, 18:0.259, 23:-0.119, 26:0.375, 28:0.336, 13:0.452, 14:0.016, 36:-0.750}),
([0]*8, 400, {16:-0.382, 7:-0.689, 1:0.434, 11:-0.561, 33:-0.259, 34:-0.615, 31:0.443, 18:0.272, 23:-0.134, 26:0.368, 28:0.322, 13:0.467, 14:0.036, 36:-0.762}),
],
# draw7: port3 battery
"d7": [
([0,0,0,1,0,0,0,0], 150, {13:0.737, 11:-0.843, 1:0.541, 25:-0.415, 16:-0.467, 33:-0.454, 34:-0.877, 18:0.282, 23:-0.132, 31:0.267, 26:0.470, 28:0.419, 36:-0.614}),
([0]*8, 350, {13:0.588, 1:0.488, 11:-0.767, 25:-0.410, 31:0.327, 33:-0.395, 34:-0.826, 16:-0.469, 18:0.298, 23:-0.139, 26:0.458, 28:0.418, 36:-0.667}),
([0,0,0,1,0,0,0,0], 1000, {1:-0.230, 11:0.189, 13:-0.391, 25:0.169, 12:-0.519, 16:-0.476, 33:-0.278, 34:-0.845, 31:0.465, 18:0.261, 23:-0.118, 26:0.362, 28:0.308, 36:-0.715, 14:-0.040}),
([0]*8, 400, {1:-0.223, 11:0.166, 13:-0.377, 25:0.167, 12:-0.529, 16:-0.493, 33:-0.257, 34:-0.885, 31:0.466, 18:0.262, 23:-0.123, 26:0.357, 28:0.319, 36:-0.748, 14:-0.043}),
],
# draw8: port5 battery
"d8": [
([0,0,0,0,0,1,0,0], 150, {18:0.174, 23:-0.060, 11:-0.813, 33:-0.449, 34:-0.825, 31:0.308, 1:0.630, 16:-0.457, 26:0.470, 28:0.417, 13:0.383, 36:-0.632}),
([0]*8, 350, {18:0.154, 23:-0.116, 11:-0.733, 33:-0.407, 34:-0.746, 31:0.342, 1:0.573, 16:-0.444, 26:0.447, 28:0.407, 13:0.424, 36:-0.664}),
([0,0,0,0,0,1,0,0], 1000, {18:-0.274, 23:-0.185, 11:-0.613, 33:-0.282, 34:-0.568, 31:0.468, 1:0.487, 16:-0.440, 26:0.386, 28:0.353, 13:0.420, 14:-0.001, 36:-0.725}),
([0]*8, 400, {18:-0.267, 23:-0.185, 11:-0.576, 33:-0.269, 34:-0.503, 31:0.476, 1:0.444, 16:-0.446, 26:0.353, 28:0.314, 13:0.412, 36:-0.745}),
],
# draw9: port4 800 + release 300
"d9": [
([0,0,0,0,1,0,0,0], 800, {11:-0.657, 16:-0.417, 26:0.411, 28:0.333, 31:0.389, 33:-0.381, 34:-0.701, 1:0.533, 13:0.442, 18:0.260, 23:-0.116, 36:-0.675, 25:-0.437}),
([0]*8, 300, {11:-0.624, 16:-0.411, 26:0.413, 28:0.341, 31:0.413, 33:-0.340, 34:-0.650, 1:0.475, 13:0.452, 18:0.276, 23:-0.134, 36:-0.693, 25:-0.421}),
],
# draw10: port6 800
"d10": [
([0,0,0,0,0,0,1,0], 800, {11:-0.677, 16:-0.447, 26:0.435, 28:0.388, 31:0.396, 33:-0.365, 34:-0.711, 1:0.536, 13:0.462, 18:0.289, 23:-0.123, 36:-0.686, 25:-0.426}),
],
# draw11: port7 800
"d11": [
([0,0,0,0,0,0,0,1], 800, {11:-0.698, 16:-0.410, 26:0.429, 28:0.372, 31:0.349, 33:-0.358, 34:-0.706, 1:0.540, 13:0.442, 18:0.301, 23:-0.154, 36:-0.710, 25:-0.439}),
],
# draw12: port0=-1 AND port3=-1 x600; release 300 (aging suppressed?)
"d12": [
([-1,0,0,-1,0,0,0,0], 600, {18:-0.649, 23:-0.846, 1:-0.263, 11:0.262, 13:-0.741, 25:0.222, 4:-0.427, 16:-0.433, 26:0.506, 28:0.414, 31:0.244, 33:-0.483, 34:-0.804, 36:-0.622, 14:-0.035}),
([0]*8, 300, {18:-0.645, 23:-0.849, 1:-0.263, 11:0.276, 13:-0.751, 25:0.211, 4:-0.381, 16:-0.428, 26:0.488, 28:0.428, 31:0.245, 33:-0.486, 34:-0.778, 36:-0.613, 14:-0.029}),
],
# draw13: port3 duration ladder (cumulative 100,300,700,1500 with 250-300 releases between)
"d13": [
([0,0,0,1,0,0,0,0], 100, None),
([0]*8, 250, {13:0.542, 1:0.523, 11:-0.755, 25:-0.394, 34:-0.838, 33:-0.424, 31:0.314, 16:-0.470, 18:0.319, 23:-0.134, 26:0.455, 28:0.403}),
([0,0,0,1,0,0,0,0], 200, None),
([0]*8, 250, {13:0.615, 1:0.294, 11:-0.555, 25:-0.257, 34:-0.841, 33:-0.361, 31:0.386, 16:-0.488, 18:0.296, 23:-0.127, 26:0.413, 28:0.374}),
([0,0,0,1,0,0,0,0], 400, None),
([0]*8, 250, {13:0.011, 1:-0.102, 11:-0.019, 25:0.059, 34:-0.868, 33:-0.263, 31:0.461, 16:-0.490, 18:0.270, 23:-0.126, 26:0.375, 28:0.325, 12:-0.556}),
([0,0,0,1,0,0,0,0], 800, None),
([0]*8, 300, {13:-0.528, 1:-0.254, 11:0.226, 25:0.215, 34:-0.919, 33:-0.202, 31:0.513, 16:-0.505, 18:0.285, 23:-0.112, 26:0.322, 28:0.282, 12:-0.445, 14:-0.037}),
],
# draw14: port0 0.5x500; release 300
"d14": [
([0.5,0,0,0,0,0,0,0], 500, None),
([0]*8, 300, {18:0.415, 23:-0.312, 33:-0.376, 34:-0.718, 31:0.361, 11:-0.701, 16:-0.416, 1:0.553, 13:0.466, 26:0.436, 28:0.382}),
],
# draw15: ports0+1 together x400; rel 350; port0 x400; rel 350; idle 2500
"d15": [
([1,1,0,0,0,0,0,0], 400, None),
([0]*8, 350, {23:-0.551, 18:0.415, 33:-0.372, 34:-0.712, 31:0.412, 11:-0.683, 16:-0.427, 1:0.543, 26:0.420, 28:0.370, 13:0.396, 36:-0.699}),
([1,0,0,0,0,0,0,0], 400, None),
([0]*8, 350, {23:-0.797, 18:-0.162, 33:-0.277, 34:-0.636, 31:0.473, 11:-0.568, 16:-0.396, 1:0.489, 4:-0.400, 26:0.380, 28:0.342, 13:0.435, 36:-0.737}),
([0]*8, 2500, {23:-0.802, 18:-0.203, 33:-0.129, 34:-0.444, 31:0.536, 11:-0.423, 16:-0.228, 1:0.292, 4:-0.387, 26:0.303, 28:0.244, 13:0.341, 14:0.164, 25:-0.372, 36:-0.755, 7:-0.579}),
],
# draw16: pure idle 1200 (control)
"d16": [
([0]*8, 1200, {33:-0.327, 34:-0.663, 31:0.425, 11:-0.648, 16:-0.421, 1:0.515, 26:0.408, 28:0.344, 18:0.252, 23:-0.133, 13:0.433, 14:-0.009, 25:-0.465, 36:-0.696}),
],
# draw17: pure idle checkpoints 600/1200/2400/4000
"d17": [
([0]*8, 600, {33:-0.396, 34:-0.745, 31:0.347, 11:-0.725, 16:-0.424, 1:0.563}),
([0]*8, 600, {33:-0.268, 34:-0.617, 31:0.441, 11:-0.630, 16:-0.394, 1:0.508}),
([0]*8, 1200, {33:-0.224, 34:-0.559, 31:0.459, 11:-0.444, 16:-0.341, 1:0.373}),
([0]*8, 1600, {33:-0.153, 34:-0.430, 31:0.527, 11:-0.364, 16:-0.265, 1:0.283, 26:0.284, 28:0.226, 13:0.331, 14:0.129, 25:-0.360, 18:0.243, 23:-0.142, 7:-0.593, 36:-0.745, 12:-0.619}),
],
# draw18: port1=-1 x1200
"d18": [
([0,-1,0,0,0,0,0,0], 1200, {26:0.325, 28:0.255, 36:-0.609, 33:-0.305, 34:-0.630, 31:0.431, 11:-0.642, 16:-0.409, 1:0.492, 18:0.255, 23:-0.118, 13:0.435, 25:-0.446, 14:0.032}),
],
# draw19: port5=-1 x800; rel 300
"d19": [
([0,0,0,0,0,-1,0,0], 800, None),
([0]*8, 300, {18:0.069, 23:-0.100, 33:-0.311, 34:-0.709, 31:0.422, 11:-0.665, 16:-0.369, 1:0.488, 26:0.403, 28:0.342, 13:0.468, 36:-0.699, 25:-0.437}),
],
}
# validation & negative-threshold draws
DRAWS["v1"] = [
([0,0,0,0.8,0,0,0,0],300,None),([0]*8,200,None),([-0.7,0,0,0,0,0,0,0],300,None),
([0]*8,500,{1:0.3484,4:-0.3975,7:-0.7299,11:-0.5804,12:-0.617,13:0.598,14:-0.0191,
16:-0.4482,18:-0.6382,23:-0.8446,25:-0.3446,26:0.3949,28:0.3072,31:0.4697,33:-0.2937,34:-0.7183,36:-0.7288}),
]
DRAWS["n1"] = [
([-0.4,0,0,0,0,0,0,0],200,None),([0]*8,300,{18:0.2726,23:-0.1166,1:0.5704,11:-0.7458,13:0.407,25:-0.4248}),
([-0.7,0,0,0,0,0,0,0],100,None),([0]*8,300,{18:0.2758,23:-0.1461,1:0.5327,11:-0.6892,13:0.4667,25:-0.4362}),
([-0.7,0,0,0,0,0,0,0],150,None),([0]*8,300,{18:-0.6615,23:-0.8349,1:0.4985,11:-0.6244,13:0.4309,25:-0.4447}),
]
DRAWS["n2"] = [
([-1,0,0,0,0,0,0,0],80,None),([0]*8,250,{18:-0.6655,23:-0.8573,1:0.5812,11:-0.773,13:0.4316,25:-0.4494}),
]
DRAWS["n3"] = [
([-0.55,0,0,0,0,0,0,0],400,None),([0]*8,250,{18:0.2511,23:-0.1237,1:0.5716,11:-0.7489,13:0.4416,25:-0.441}),
]
DRAWS["n4"] = [
([0,0,0,-1,0,0,0,0],80,None),([0]*8,250,{1:-0.2749,11:0.2619,13:-0.7462,25:0.2247,18:0.2729,23:-0.1472}),
([0]*8,60,{1:-0.2787,11:0.2657,13:-0.7495,25:0.237,4:-0.2966,12:-0.6203,14:-0.0623,16:-0.4746,
18:0.29,23:-0.1345,26:0.4739,28:0.4037,31:0.2794,33:-0.5052,34:-0.8171,36:-0.5785}),
]
app/physim/fit.py (3,234 chars)
import numpy as np
from scipy.optimize import minimize
import data
CHANNELS = [1,4,7,11,12,13,14,16,18,23,25,26,28,31,33,34,36]
BASE = data.BASE
# Latents: A (aging), P0a,P0b, P3a,P3b, P5a,P5b, F0,F1,F2,F3,F4,F5,F6,F7
# dynamics params (theta):
# tau_f, e (charge exponent), ka0, kb0, ka3, kb3, ka5, kb5, lamA, kA(weibull), agesupp(neg 0/3 factor)
LATENT_NAMES = ["A","P0a","P0b","P3a","P3b","P5a","P5b","F0","F1","F2","F3","F5"]
def simulate(segs, theta, dt=5):
tau_f, e, ka0, kb0, ka3, kb3, ka5, kb5, lamA, kA = theta
F = np.zeros(8)
P0a=P0b=P3a=P3b=P5a=P5b=0.0
t = 0.0
out = []
for u, dur, obs in segs:
u = np.asarray(u, float)
n = int(dur // dt)
for i in range(n):
F += (u - F) * (dt / tau_f)
a0 = abs(F[0])**e; a3 = abs(F[3])**e; a5 = abs(F[5])**e
P0a += ka0 * a0 * (1-P0a) * dt
P0b += kb0 * P0a * (1-P0b) * dt
P3a += ka3 * a3 * (1-P3a) * dt
P3b += kb3 * P3a * (1-P3b) * dt
P5a += ka5 * a5 * (1-P5a) * dt
P5b += kb5 * P5a * (1-P5b) * dt
t += dt
A = 1 - np.exp(-(t/lamA)**kA)
lat = np.array([A,P0a,P0b,P3a,P3b,P5a,P5b,F[0],F[1],F[2],F[3],F[5]])
out.append((lat, obs))
return out
def collect(theta):
X = {}; Y = {}
for ch in CHANNELS: X[ch]=[]; Y[ch]=[]
for name, segs in data.DRAWS.items():
for lat, obs in simulate(segs, theta):
if obs is None: continue
for ch, val in obs.items():
if ch in X:
X[ch].append(lat); Y[ch].append(val - BASE[ch])
return X, Y
def solve_readouts(theta, ridge=1e-3):
X, Y = collect(theta)
R = {}; loss = 0.0; npts=0
for ch in CHANNELS:
A_ = np.array(X[ch]); y = np.array(Y[ch])
if len(y) < 6: continue
M = A_.T @ A_ + ridge*np.eye(A_.shape[1])
r = np.linalg.solve(M, A_.T @ y)
R[ch] = r
res = A_ @ r - y
loss += float(res @ res); npts += len(y)
return R, loss, npts
def objective(logtheta):
theta = np.exp(logtheta)
try:
_, loss, npts = solve_readouts(theta)
return loss
except Exception:
return 1e9
theta0 = np.array([20, 2.7, 0.004, 0.004, 0.005, 0.004, 0.002, 0.002, 2400, 1.15])
res = minimize(objective, np.log(theta0), method="Nelder-Mead",
options={"maxiter": 2000, "xatol":1e-3, "fatol":1e-4})
theta = np.exp(res.x)
R, loss, npts = solve_readouts(theta)
print("theta:", dict(zip(["tau_f","e","ka0","kb0","ka3","kb3","ka5","kb5","lamA","kA"], np.round(theta,5))))
print("rms residual:", np.sqrt(loss/npts), "npts:", npts)
print("\nreadouts (channel: " + ", ".join(LATENT_NAMES) + ")")
for ch in CHANNELS:
if ch in R:
print(f"ch{ch:2d}:", np.round(R[ch],3))
# per-channel rms
X, Y = collect(theta)
print("\nper-channel rms:")
for ch in CHANNELS:
if ch in R:
A_ = np.array(X[ch]); y = np.array(Y[ch])
r = A_ @ R[ch] - y
print(f"ch{ch:2d}: rms={np.sqrt(np.mean(r**2)):.035f}"[:24], f" n={len(y)} max={np.max(np.abs(r)):.3f}")
np.save("/app/physim/theta.npy", theta)
np.save("/app/physim/readouts.npy", np.array([R.get(ch, np.zeros(12)) for ch in CHANNELS]))
app/physim/fit2.py (4,101 chars)
import numpy as np
from scipy.optimize import minimize
import data
CHANNELS = [1,4,7,11,12,13,14,16,18,23,25,26,28,31,33,34,36]
BASE = data.BASE
# latents vector: [A, P0a, P0b, P3a, P3b, P5a, gF0, gF1, gF2, gF3, gF5]
# gFp = gated fast latent (gain shrinks as corresponding P_b charges)
LN = ["A","P0a","P0b","P3a","P3b","P5a","gF0","gF1","gF2","gF3","gF5"]
MASK = {
1: ["A","P3a","P3b","gF2","gF3"],
4: ["A","P0b","gF0"],
7: ["A","gF2"],
11: ["A","P3a","P3b","gF1","gF3"],
12: ["A","P3b"],
13: ["A","P3a","P3b","gF3"],
14: ["A"],
16: ["A","P3a","P3b","gF2"],
18: ["A","P0a","P0b","P5a","gF0","gF5"],
23: ["A","P0a","P0b","P5a","gF0","gF5"],
25: ["A","P3a","P3b","gF3"],
26: ["A","gF1"],
28: ["A","gF1"],
31: ["A","gF1"],
33: ["A","gF1"],
34: ["A","P3a","P3b","gF1"],
36: ["A","gF1"],
}
def simulate(segs, theta, dt=5):
tau_f, e, ka0, kb0, ka3, kb3, ka5, lamA, kA, supp = theta
F = np.zeros(8)
P0a=P0b=P3a=P3b=P5a=0.0
t = 0.0; Aeff = 0.0 # integrate aging with suppression
out = []
for u, dur, obs in segs:
u = np.asarray(u, float)
n = int(round(dur / dt))
for i in range(n):
F += (u - F) * (dt / tau_f)
a0 = abs(F[0])**e; a3 = abs(F[3])**e; a5 = abs(F[5])**e
P0a += ka0 * a0 * (1-P0a) * dt
P0b += kb0 * P0a * (1-P0b) * dt
P3a += ka3 * a3 * (1-P3a) * dt
P3b += kb3 * P3a * (1-P3b) * dt
P5a += ka5 * a5 * (1-P5a) * dt
# aging: Weibull hazard in effective time, suppressed by negative drive on ports0/3
sfac = 1.0 - supp*min(1.0, max(-F[0], -F[3], 0.0))
t += dt
haz = (kA/lamA)*max(t/lamA,1e-9)**(kA-1)
Aeff += sfac * haz * (1-Aeff) * dt
g0 = (1-P0b); g3 = (1-P3b); g5 = (1-P5a)
lat = np.array([Aeff,P0a,P0b,P3a,P3b,P5a,F[0]*g0,F[1],F[2],F[3]*g3,F[5]*g5])
out.append((lat, obs))
return out
def collect(theta):
X = {}; Y = {}
for ch in CHANNELS: X[ch]=[]; Y[ch]=[]
for name, segs in data.DRAWS.items():
for lat, obs in simulate(segs, theta):
if obs is None: continue
for ch, val in obs.items():
if ch in X:
X[ch].append(lat); Y[ch].append(val - BASE[ch])
return X, Y
IDX = {n:i for i,n in enumerate(LN)}
def solve_readouts(theta, ridge=3e-3):
X, Y = collect(theta)
R = {}; loss = 0.0; npts=0
for ch in CHANNELS:
A_ = np.array(X[ch]); y = np.array(Y[ch])
cols = [IDX[n] for n in MASK[ch]]
Am = A_[:, cols]
M = Am.T @ Am + ridge*np.eye(len(cols))
r = np.linalg.solve(M, Am.T @ y)
full = np.zeros(len(LN)); full[cols] = r
R[ch] = full
res = Am @ r - y
loss += float(res @ res); npts += len(y)
return R, loss, npts
def objective(logtheta):
theta = np.exp(logtheta)
theta[-1] = min(theta[-1], 1.0)
try:
_, loss, npts = solve_readouts(theta)
return loss
except Exception:
return 1e9
theta0 = np.array([20, 2.7, 0.004, 0.004, 0.005, 0.004, 0.002, 2400, 1.15, 0.9])
res = minimize(objective, np.log(theta0), method="Nelder-Mead",
options={"maxiter": 4000, "maxfev": 4000, "xatol":1e-3, "fatol":1e-4})
theta = np.exp(res.x); theta[-1] = min(theta[-1], 1.0)
R, loss, npts = solve_readouts(theta)
names = ["tau_f","e","ka0","kb0","ka3","kb3","ka5","lamA","kA","supp"]
print("theta:", {n: round(v,5) for n,v in zip(names, theta)})
print("rms:", round(float(np.sqrt(loss/npts)),4), "npts:", npts)
print("\nreadouts:")
for ch in CHANNELS:
s = ", ".join(f"{n}:{R[ch][IDX[n]]:+.3f}" for n in MASK[ch])
print(f"ch{ch:2d}: {s}")
X, Y = collect(theta)
print("\nper-channel rms / worst:")
for ch in CHANNELS:
A_ = np.array(X[ch]); y = np.array(Y[ch])
r = A_ @ R[ch] - y
print(f"ch{ch:2d}: rms={np.sqrt(np.mean(r**2)):.3f} n={len(y)} max={np.max(np.abs(r)):.3f}")
import pickle
with open("/app/physim/model.pkl","wb") as f:
pickle.dump({"theta":theta, "R":R, "MASK":MASK, "LN":LN, "BASE":BASE}, f)
print("saved model.pkl")
app/physim/fit3.py (4,284 chars)
import numpy as np
from scipy.optimize import minimize
import data
CHANNELS = [1,4,7,11,12,13,14,16,18,23,25,26,28,31,33,34,36]
BASE = data.BASE
LN = ["A","P0a","P0b","P3a","P3b","P5a","gF0","gF1","gF2","gF3","gF5"]
IDX = {n:i for i,n in enumerate(LN)}
MASK = {
1: ["A","P3a","P3b","gF2","gF3"],
4: ["A","P0b","gF0"],
7: ["A","gF2"],
11: ["A","P3a","P3b","gF1","gF3"],
12: ["A","P3b"],
13: ["A","P3a","P3b","gF3"],
14: ["A"],
16: ["A","P3a","P3b","gF2"],
18: ["A","P0a","P0b","P5a","gF0","gF5"],
23: ["A","P0a","P0b","P5a","gF0","gF5"],
25: ["A","P3a","P3b","gF3"],
26: ["A","gF1"],
28: ["A","gF1"],
31: ["A","gF1"],
33: ["A","gF1"],
34: ["A","P3a","P3b","gF1"],
36: ["A","gF1"],
}
PNAMES = ["tau_f","e","l0a","l0b","k0b","l3a","l3b","k3b","l5a","lamA","kA","supp"]
def simulate(segs, theta, dt=5):
tau_f, e, l0a, l0b, k0b, l3a, l3b, k3b, l5a, lamA, kA, supp = theta
F = np.zeros(8)
s0=s3=s5=0.0; t=0.0; Aeff=0.0
out = []
for u, dur, obs in segs:
u = np.asarray(u, float)
n = int(round(dur / dt))
for i in range(n):
F += (u - F) * np.clip(dt / tau_f, 0, 1)
s0 += abs(F[0])**e * dt
s3 += abs(F[3])**e * dt
s5 += abs(F[5])**e * dt
sfac = 1.0 - supp*min(1.0, max(-F[0], -F[3], 0.0))
t += dt
haz = (kA/lamA)*max(t/lamA,1e-9)**(kA-1)
Aeff += sfac * haz * (1-Aeff) * dt
P0a = 1-np.exp(-s0/l0a); P0b = 1-np.exp(-(s0/l0b)**k0b)
P3a = 1-np.exp(-s3/l3a); P3b = 1-np.exp(-(s3/l3b)**k3b)
P5a = 1-np.exp(-s5/l5a)
lat = np.array([Aeff,P0a,P0b,P3a,P3b,P5a,
F[0]*(1-P0b),F[1],F[2],F[3]*(1-P3b),F[5]*(1-P5a)])
out.append((lat, obs))
return out
def collect(theta):
X = {ch:[] for ch in CHANNELS}; Y = {ch:[] for ch in CHANNELS}
for name, segs in data.DRAWS.items():
for lat, obs in simulate(segs, theta):
if obs is None: continue
for ch, val in obs.items():
if ch in X:
X[ch].append(lat); Y[ch].append(val - BASE[ch])
return X, Y
def solve_readouts(theta, ridge=5e-3):
X, Y = collect(theta)
R = {}; loss = 0.0; npts=0
for ch in CHANNELS:
A_ = np.array(X[ch]); y = np.array(Y[ch])
cols = [IDX[n] for n in MASK[ch]]
Am = A_[:, cols]
r = np.linalg.solve(Am.T @ Am + ridge*np.eye(len(cols)), Am.T @ y)
full = np.zeros(len(LN)); full[cols] = r
R[ch] = full
res = Am @ r - y
loss += float(res @ res); npts += len(y)
return R, loss, npts
BOUNDS = [(15,50),(1.8,4.0),(80,900),(500,3000),(1.3,4.0),
(80,900),(200,2000),(1.3,4.0),(200,3000),(1800,4000),(0.85,1.8),(0.0,1.0)]
def obj(theta):
theta = np.clip(theta, [b[0] for b in BOUNDS], [b[1] for b in BOUNDS])
try:
return solve_readouts(theta)[1]
except Exception:
return 1e9
if __name__ == "__main__":
starts = [
np.array([30,2.7,250,1100,2.5, 200,550,2.2, 900, 2600,1.1,0.85]),
np.array([25,2.2,350,1400,2.0, 300,700,2.0, 1200, 3000,1.0,0.5]),
np.array([40,3.2,180,900,3.0, 150,450,2.6, 700, 2400,1.3,0.9]),
]
best=None
for s in starts:
r = minimize(obj, s, method="Powell", bounds=BOUNDS,
options={"maxiter":6000,"xtol":1e-3,"ftol":1e-5})
print("start done, loss", r.fun)
if best is None or r.fun < best.fun: best = r
theta = np.clip(best.x, [b[0] for b in BOUNDS], [b[1] for b in BOUNDS])
R, loss, npts = solve_readouts(theta)
print("theta:", {n: round(float(v),5) for n,v in zip(PNAMES, theta)})
print("rms:", round(float(np.sqrt(loss/npts)),4))
X, Y = collect(theta)
for ch in CHANNELS:
A_ = np.array(X[ch]); y = np.array(Y[ch])
r = A_ @ R[ch] - y
print(f"ch{ch:2d}: rms={np.sqrt(np.mean(r**2)):.3f} n={len(y)} max={np.max(np.abs(r)):.3f}")
print("\nreadouts:")
for ch in CHANNELS:
s = ", ".join(f"{n}:{R[ch][IDX[n]]:+.3f}" for n in MASK[ch])
print(f"ch{ch:2d}: {s}")
import pickle
with open("/app/physim/model.pkl","wb") as f:
pickle.dump({"theta":theta, "R":R, "MASK":MASK, "LN":LN, "BASE":BASE, "PNAMES":PNAMES}, f)
print("saved model.pkl")
app/physim/fit5.py (4,180 chars)
import numpy as np
from scipy.optimize import minimize
import data, pickle
CHANNELS = [1,4,7,11,12,13,14,16,18,23,25,26,28,31,33,34,36]
BASE = data.BASE
LN = ["A","P0a","P0b","P3a","P3b","P3c","P5a","gF0","gF1","gF2","gF3","gF5"]
IDX = {n:i for i,n in enumerate(LN)}
MASK = {
1:["A","P3a","P3b","P3c","gF2","gF3"], 4:["A","P0b","gF0"], 7:["A","gF2"],
11:["A","P3a","P3b","P3c","gF1","gF3"], 12:["A","P3b","P3c"], 13:["A","P3a","P3b","P3c","gF3"],
14:["A"], 16:["A","P3a","P3c","gF2"], 18:["A","P0a","P0b","P5a","gF0","gF5"],
23:["A","P0a","P0b","P5a","gF0","gF5"], 25:["A","P3a","P3b","P3c","gF3"],
26:["A","gF1"], 28:["A","gF1"], 31:["A","gF1"], 33:["A","gF1"],
34:["A","P3a","P3b","P3c","gF1"], 36:["A","gF1"],
}
PN = ["tau_f","e","l0a","l0b","k0b","l3a","l3b","k3b","l3c","k3c","l5a","lamA","kA","supp",
"w0n","w3n","w5n","beta0","beta3"]
def simulate(segs, th, dt=5):
(tau_f,e,l0a,l0b,k0b,l3a,l3b,k3b,l3c,k3c,l5a,lamA,kA,supp,w0n,w3n,w5n,beta0,beta3)=th
F=np.zeros(8); t=0.0; Aeff=0.0
sp=np.zeros(3); sn=np.zeros(3); out=[]
for u,dur,obs in segs:
u=np.asarray(u,float); n=int(round(dur/dt))
for i in range(n):
F += (u-F)*min(dt/tau_f,1)
for j,(p,wn) in enumerate([(0,w0n),(3,w3n),(5,w5n)]):
a=abs(F[p])**e*dt
if F[p]>=0: sp[j]+=a
else: sn[j]+=wn*a
sfac=1.0-supp*min(1.0,max(-F[0],-F[3],0.0))
t+=dt
haz=(kA/lamA)*max(t/lamA,1e-9)**(kA-1)
Aeff+=sfac*haz*(1-Aeff)*dt
s0=sp[0]+sn[0]; s3=sp[1]+sn[1]; s5=sp[2]+sn[2]
nf0=sn[0]/max(s0,1e-9); nf3=sn[1]/max(s3,1e-9)
mb0=1+beta0*nf0; mb3=1+beta3*nf3
P0a=1-np.exp(-s0/l0a); P0b=(1-np.exp(-(s0/l0b)**k0b))*mb0
P3a=1-np.exp(-s3/l3a); P3b=(1-np.exp(-(s3/l3b)**k3b))*mb3
P3c=(1-np.exp(-(s3/l3c)**k3c))*mb3
P5a=1-np.exp(-s5/l5a)
lat=np.array([Aeff,P0a,P0b,P3a,P3b,P3c,P5a,
F[0]*max(1-P0b,0),F[1],F[2],F[3]*max(1-P3c,0),F[5]*(1-P5a)])
out.append((lat,obs))
return out
def solve(th,ridge=5e-3):
X={ch:[] for ch in CHANNELS}; Y={ch:[] for ch in CHANNELS}
for name,segs in data.DRAWS.items():
for lat,obs in simulate(segs,th):
if obs is None: continue
for ch,val in obs.items():
if ch in X: X[ch].append(lat); Y[ch].append(val-BASE[ch])
R={}; loss=0.0; npts=0
for ch in CHANNELS:
A_=np.array(X[ch]); y=np.array(Y[ch]); cols=[IDX[n] for n in MASK[ch]]
Am=A_[:,cols]
r=np.linalg.solve(Am.T@Am+ridge*np.eye(len(cols)),Am.T@y)
full=np.zeros(len(LN)); full[cols]=r; R[ch]=full
res=Am@r-y; loss+=float(res@res); npts+=len(y)
return R,loss,npts,X,Y
B=[(15,55),(1.8,4.0),(80,900),(400,3000),(1.5,4.0),(80,900),(200,2000),(1.2,4.0),
(300,3000),(1.5,5.0),(200,3000),(1800,4000),(0.85,1.8),(0.0,1.0),
(0.3,2.5),(0.3,2.5),(0.1,2.0),(0.0,0.6),(0.0,0.6)]
def obj(th):
th=np.clip(th,[b[0] for b in B],[b[1] for b in B])
try: return solve(th)[1]
except Exception: return 1e9
if __name__=="__main__":
starts=[np.array([45,2.75,510,616,1.9,206,295,1.5,900,3.0,620,2860,1.17,0.17,2.37,0.59,0.36,0.05,0.6]),
np.array([30,2.3,300,900,2.5,250,500,2.0,700,2.5,800,2600,1.1,0.5,1.2,1.0,0.4,0.1,0.3])]
best=None
for s in starts:
r=minimize(obj,s,method="Powell",bounds=B,options={"maxiter":10000,"xtol":1e-3,"ftol":1e-5})
print("loss",r.fun)
if best is None or r.fun<best.fun: best=r
th=np.clip(best.x,[b[0] for b in B],[b[1] for b in B])
R,loss,npts,X,Y=solve(th)
print("theta:",{n:round(float(v),4) for n,v in zip(PN,th)})
print("rms:",round(float(np.sqrt(loss/npts)),4))
for ch in CHANNELS:
A_=np.array(X[ch]); y=np.array(Y[ch]); r=A_@R[ch]-y
print(f"ch{ch:2d}: rms={np.sqrt(np.mean(r**2)):.3f} max={np.max(np.abs(r)):.3f}")
print("readouts:")
for ch in CHANNELS:
print(f"ch{ch:2d}:", ", ".join(f"{n}:{R[ch][IDX[n]]:+.3f}" for n in MASK[ch]))
pickle.dump({"theta":th,"R":R,"MASK":MASK,"LN":LN,"BASE":BASE,"PN":PN},open("/app/physim/model.pkl","wb"))
print("saved")
app/physim/fit6.py (4,621 chars)
import numpy as np
from scipy.optimize import minimize
import data, pickle
CHANNELS = [1,4,7,11,12,13,14,16,18,23,25,26,28,31,33,34,36]
BASE = data.BASE
LN = ["A","P0a","P0b","P3a","P3b","P3c","P5a","FL0","FL3","gF0","gF1","gF2","gF3","gF5"]
IDX = {n:i for i,n in enumerate(LN)}
MASK = {
1:["A","P3a","P3b","P3c","FL3","gF2","gF3"], 4:["A","P0b","FL0","gF0"], 7:["A","gF2"],
11:["A","P3a","P3b","P3c","FL3","gF1","gF3"], 12:["A","P3b","P3c","FL3"],
13:["A","P3a","P3b","P3c","FL3","gF3"], 14:["A"],
16:["A","P3a","P3c","FL3","gF2"],
18:["A","P0a","P0b","P5a","FL0","gF0","gF5"],
23:["A","P0a","P0b","P5a","FL0","gF0","gF5"],
25:["A","P3a","P3b","P3c","FL3","gF3"],
26:["A","gF1"], 28:["A","gF1"], 31:["A","gF1"], 33:["A","gF1"],
34:["A","P3a","P3b","P3c","FL3","gF1"], 36:["A","gF1","FL3"],
}
PN = ["tau_f","e","l0a","l0b","k0b","l3a","l3b","k3b","l3c","k3c","l5a","lamA","kA","supp",
"w5n","uc","zc"]
# flip: z_p += max(-u_p - uc, 0)*dt ; flip when z_p >= zc (ports 0 and 3)
# when flipped: gradual P_p* zeroed, FL_p=1, fast gain gated to 10%
def simulate(segs, th, dt=5):
(tau_f,e,l0a,l0b,k0b,l3a,l3b,k3b,l3c,k3c,l5a,lamA,kA,supp,w5n,uc,zc)=th
F=np.zeros(8); t=0.0; Aeff=0.0
s=np.zeros(3) # gradual stress ports 0,3,5 (positive-drive only for 0,3; both signs for 5)
z=np.zeros(2); fl=[False,False]
out=[]
for u,dur,obs in segs:
u=np.asarray(u,float); n=int(round(dur/dt))
for i in range(n):
F += (u-F)*min(dt/tau_f,1)
# gradual stress
if F[0]>0: s[0]+=F[0]**e*dt
if F[3]>0: s[1]+=F[3]**e*dt
s[2]+=(abs(F[5])**e)*(1.0 if F[5]>=0 else w5n)*dt
# flip clocks (use input directly for crispness)
z[0]+=max(-u[0]-uc,0)*dt
z[1]+=max(-u[3]-uc,0)*dt
if z[0]>=zc: fl[0]=True
if z[1]>=zc: fl[1]=True
sfac=1.0-supp*min(1.0,max(-F[0],-F[3],0.0))
t+=dt
haz=(kA/lamA)*max(t/lamA,1e-9)**(kA-1)
Aeff+=sfac*haz*(1-Aeff)*dt
P0a=1-np.exp(-s[0]/l0a); P0b=1-np.exp(-(s[0]/l0b)**k0b)
P3a=1-np.exp(-s[1]/l3a); P3b=1-np.exp(-(s[1]/l3b)**k3b)
P3c=1-np.exp(-(s[1]/l3c)**k3c)
P5a=1-np.exp(-s[2]/l5a)
g0=max(1-P0b,0); g3=max(1-P3c,0)
if fl[0]: P0a=P0b=0.0; g0=0.1
if fl[1]: P3a=P3b=P3c=0.0; g3=0.1
lat=np.array([Aeff,P0a,P0b,P3a,P3b,P3c,P5a,float(fl[0]),float(fl[1]),
F[0]*g0,F[1],F[2],F[3]*g3,F[5]*(1-P5a)])
out.append((lat,obs))
return out
def solve(th,ridge=5e-3):
X={ch:[] for ch in CHANNELS}; Y={ch:[] for ch in CHANNELS}
for name,segs in data.DRAWS.items():
for lat,obs in simulate(segs,th):
if obs is None: continue
for ch,val in obs.items():
if ch in X: X[ch].append(lat); Y[ch].append(val-BASE[ch])
R={}; loss=0.0; npts=0
for ch in CHANNELS:
A_=np.array(X[ch]); y=np.array(Y[ch]); cols=[IDX[n] for n in MASK[ch]]
Am=A_[:,cols]
r=np.linalg.solve(Am.T@Am+ridge*np.eye(len(cols)),Am.T@y)
full=np.zeros(len(LN)); full[cols]=r; R[ch]=full
res=Am@r-y; loss+=float(res@res); npts+=len(y)
return R,loss,npts,X,Y
B=[(15,55),(1.8,4.0),(80,900),(400,3000),(1.5,4.0),(80,900),(200,2000),(1.2,4.0),
(300,3000),(1.5,5.0),(200,3000),(1800,4000),(0.85,1.8),(0.0,1.0),
(0.1,2.0),(0.45,0.68),(5,40)]
def obj(th):
th=np.clip(th,[b[0] for b in B],[b[1] for b in B])
try: return solve(th)[1]
except Exception: return 1e9
if __name__=="__main__":
starts=[np.array([48,2.4,494,635,2.1,515,251,4.0,948,5.0,733,2900,1.13,0.56,0.38,0.58,25]),
np.array([30,2.7,300,900,2.5,300,400,2.5,800,3.0,800,2600,1.1,0.8,0.5,0.6,30])]
best=None
for st in starts:
r=minimize(obj,st,method="Powell",bounds=B,options={"maxiter":12000,"xtol":1e-3,"ftol":1e-5})
print("loss",r.fun)
if best is None or r.fun<best.fun: best=r
th=np.clip(best.x,[b[0] for b in B],[b[1] for b in B])
R,loss,npts,X,Y=solve(th)
print("theta:",{n:round(float(v),4) for n,v in zip(PN,th)})
print("rms:",round(float(np.sqrt(loss/npts)),4),"npts",npts)
for ch in CHANNELS:
A_=np.array(X[ch]); y=np.array(Y[ch]); r=A_@R[ch]-y
print(f"ch{ch:2d}: rms={np.sqrt(np.mean(r**2)):.3f} max={np.max(np.abs(r)):.3f}")
print("readouts:")
for ch in CHANNELS:
print(f"ch{ch:2d}:", ", ".join(f"{n}:{R[ch][IDX[n]]:+.3f}" for n in MASK[ch]))
pickle.dump({"theta":th,"R":R,"MASK":MASK,"LN":LN,"BASE":BASE,"PN":PN},open("/app/physim/model.pkl","wb"))
print("saved")
app/physim/predict.py (2,641 chars)
import numpy as np, pickle
_m = pickle.load(open("/app/physim/model.pkl","rb"))
TH = _m["theta"]; R = _m["R"]; LN = _m["LN"]; BASE = _m["BASE"]
IDX = {n:i for i,n in enumerate(LN)}
ALL_CH = sorted(R.keys())
NOISE = 0.05
# observed floors/ceilings (from all experiments); clamp predictions
CLAMP = {18:(-0.68,0.70), 23:(-0.87,0.02), 1:(-0.30,0.66), 11:(-0.86,0.30),
13:(-1.15+0.384,0.76), 25:(-0.47,0.25), 34:(-0.93,-0.40), 33:(-0.51,-0.10),
16:(-0.51,-0.19), 31:(0.24,0.55), 26:(0.27,0.54), 28:(0.22,0.50),
36:(-0.82,-0.57), 4:(-0.43,-0.25), 7:(-0.79,-0.54), 12:(-0.64,-0.42), 14:(-0.09,0.17)}
def trajectory(segments, channels=None, dt=1):
(tau_f,e,l0a,l0b,k0b,l3a,l3b,k3b,l3c,k3c,l5a,lamA,kA,supp,w5n,uc,zc)=TH
channels = channels or ALL_CH
F=np.zeros(8); t=0.0; Aeff=0.0
s=np.zeros(3); z=np.zeros(2); fl=[False,False]
total = sum(int(round(d)) for _,d in segments)
Y = {ch: np.empty(total) for ch in channels}
i0=0
for u,dur in segments:
u=np.asarray(u,float); n=int(round(dur))
for i in range(n):
F += (u-F)*min(dt/tau_f,1)
if F[0]>0: s[0]+=F[0]**e*dt
if F[3]>0: s[1]+=F[3]**e*dt
s[2]+=(abs(F[5])**e)*(1.0 if F[5]>=0 else w5n)*dt
z[0]+=max(-u[0]-uc,0)*dt
z[1]+=max(-u[3]-uc,0)*dt
if z[0]>=zc: fl[0]=True
if z[1]>=zc: fl[1]=True
sfac=1.0-supp*min(1.0,max(-F[0],-F[3],0.0))
t+=dt
haz=(kA/lamA)*max(t/lamA,1e-9)**(kA-1)
Aeff+=sfac*haz*(1-Aeff)*dt
P0a=1-np.exp(-s[0]/l0a); P0b=1-np.exp(-(s[0]/l0b)**k0b)
P3a=1-np.exp(-s[1]/l3a); P3b=1-np.exp(-(s[1]/l3b)**k3b)
P3c=1-np.exp(-(s[1]/l3c)**k3c)
P5a=1-np.exp(-s[2]/l5a)
g0=max(1-P0b,0); g3=max(1-P3c,0)
if fl[0]: P0a=P0b=0.0; g0=0.1
if fl[1]: P3a=P3b=P3c=0.0; g3=0.1
lat=np.array([Aeff,P0a,P0b,P3a,P3b,P3c,P5a,float(fl[0]),float(fl[1]),
F[0]*g0,F[1],F[2],F[3]*g3,F[5]*(1-P5a)])
for ch in channels:
v = BASE[ch] + float(R[ch]@lat)
if ch in CLAMP:
lo,hi = CLAMP[ch]; v = min(max(v,lo),hi)
Y[ch][i0+i] = v
i0 += n
return Y
def tail_mean(segments, channels=None, win=20):
Y = trajectory(segments, channels=channels)
return {ch: float(np.mean(y[-win:])) for ch,y in Y.items()}
def window_stats(segments, ch, win=200):
Y = trajectory(segments, channels=[ch])
seg = Y[ch][-win:]
return float(np.mean(seg)), float(np.sqrt(NOISE**2 + np.var(seg)))
Preparation contracts
| id | channel | band | success | released finals |
|---|
| 100 | 13 | [-1.09, -0.39] | 100% | -0.75, -0.75, -0.74, -0.76 |
| 101 | 11 | [+0.04, +0.53] | 100% | +0.27, +0.26, +0.28, +0.29 |
| 102 | 18 | [-0.95, -0.37] | 100% | -0.66, -0.64, -0.67, -0.65 |
Executable theory
accuracy 0.784 · per-stratum {'S1': 0.88, 'S2': 0.83, 'S3': 0.72, 'S4': 0.7} · 4,084 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.625 | 0.060 | 0.1 | 0.898 | ✓ |
| 1 | S1 | +0.393 | 0.088 | 0.1 | 0.926 | ✓ |
| 2 | S1 | +0.876 | 0.077 | 0.0 | 0.980 | ✓ |
| 3 | S1 | +0.290 | 0.073 | 0.1 | 0.905 | ✓ |
| 4 | S2 | -0.550 | 0.067 | 0.0 | 0.984 | ✓ |
| 5 | S2 | +0.878 | 0.077 | 0.0 | 0.994 | ✓ |
| 6 | S2 | +0.411 | 0.057 | 0.4 | 0.700 | ✓ |
| 7 | S2 | +0.401 | 0.052 | 0.3 | 0.765 | ✓ |
| 8 | S3 | -0.478 | 0.074 | 0.1 | 0.943 | ✓ |
| 9 | S3 | +0.444 | 0.052 | 0.2 | 0.842 | ✓ |
| 10 | S3 | +0.437 | 0.088 | 0.1 | 0.874 | ✓ |
| 11 | S3 | -0.686 | 0.062 | 0.2 | 0.793 | ✓ |
| 12 | S4 | -0.654 | 0.062 | 0.1 | 0.905 | ✓ |
| 13 | S4 | -0.745 | 0.088 | 0.0 | 0.976 | ✓ |
| 14 | S4 | +0.602 | 0.088 | 0.0 | 0.966 | ✓ |
| 15 | S4 | -0.435 | 0.074 | 0.0 | 0.999 | ✓ |
Verbatim log (290 entries)
physim.status({})
physim.status({})
{"budget_left": 200000, "phase": "explore"}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
I'll start by observing the system's baseline behavior with zero input.
{"ticks_run": 300, "budget_left": 199700}
physim.run({"segments": [{"t": 300, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Baseline recorded: all 40 sensors sit at nonzero offsets with noise sd ≈ 0.05. Now I'll probe each input port with a step to find which sensors respond.
{"ticks_run": 300, "budget_left": 199400}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 1, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Port 0 clearly moves ch18 (+0.34) and ch23 (−0.23); everything else is noise. Sparse coupling. Probing remaining ports:
{"ticks_run": 500, "budget_left": 198900}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 11, 33, 34, 36], "series": true, "max_numbers": 360})
{"ticks_run": 500, "budget_left": 198400}
physim.run({"segments": [{"t": 300, "u": [0, 0, 1, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 198100}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 197800}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 1, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 1, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 197500}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 197200}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 1, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 196900}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 1]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 196600}
Write: /app/physim/notes.md
Ports 6 and 7 are weak. I also see slow drift on port-3-affected channels (ch1, ch11, ch13 keep creeping over 1200 ticks). Let me save findings to disk, then run structured experiments.
physim.reset({})
Now resetting for a fresh draw to (a) sample initial conditions and (b) run clean step-response experiments with time-series.
{"budget_left": 196400}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 100, "budget_left": 196300}
physim.run({"segments": [{"t": 400, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 360})
Fresh draw baseline matches draw #1 closely (within ~0.05) — initial conditions are consistent across draws. Now a clean step-response with time series on ch18/ch23:
{"ticks_run": 400, "budget_left": 195900}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 360})
ch18 shows fast rise then slow creep; ch23 has a fast *positive* bump then a slow, large *negative* drift — two latents with different timescales. Watching the release:
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 360})
ch18 shows fast rise then slow creep; ch23 has a fast *positive* bump then a slow, large *negative* drift — two latents with different timescales. Watching the release:
{"ticks_run": 600, "budget_left": 195300}
physim.run({"segments": [{"t": 1200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 360})
{"ticks_run": 1200, "budget_left": 194100}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all", "series": true, "max_numbers": 360})
{"error": "series observation limited to <=6 channels"}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 800, "budget_left": 192500}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 11, 1], "series": true, "max_numbers": 2000})
{"ticks_run": 100, "budget_left": 192400}
physim.run({"segments": [{"t": 900, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 11, 34, 16, 1], "series": true, "max_numbers": 5400})
{"ticks_run": 900, "budget_left": 191500}
physim.run({"segments": [{"t": 700, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": [18, 23, 11, 34, 16, 1], "series": true, "max_numbers": 2100})
{"ticks_run": 700, "budget_left": 190800}
Edit: /app/physim/notes.md
Edit: /app/physim/notes.md
physim.reset({})
{"budget_left": 190600}
physim.run({"segments": [{"t": 200, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 200})
Fresh draw #3. Now testing whether a *weak* push (u₀=+0.4) latches or fully relaxes:
physim.run({"segments": [{"t": 200, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 200})
Fresh draw #3. Now testing whether a *weak* push (u₀=+0.4) latches or fully relaxes:
{"ticks_run": 200, "budget_left": 190400}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 160})
{"ticks_run": 300, "budget_left": 190100}
physim.run({"segments": [{"t": 300, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23], "series": true, "max_numbers": 240})
Weak push (0.4) fully relaxes — there's an amplitude threshold for latching. Testing 0.6 and 0.8 with resets in between:
{"ticks_run": 700, "budget_left": 189400}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
u=0.6 latches (~-0.14 persistent on ch23). Let me grab an all-channel snapshot of this mildly-latched state to see if cross-channel displacement patterns scale together:
{"ticks_run": 60, "budget_left": 189340}
physim.reset({})
{"budget_left": 189140}
physim.run({"segments": [{"t": 150, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 188990}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 188640}
physim.run({"segments": [{"t": 1000, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 1000, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1000, "budget_left": 187640}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 187240}
physim.reset({})
{"budget_left": 187040}
physim.run({"segments": [{"t": 150, "u": [0, 1, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 186890}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 186540}
physim.run({"segments": [{"t": 1000, "u": [0, 1, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1000, "budget_left": 185540}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 185140}
physim.reset({})
{"budget_left": 184940}
physim.run({"segments": [{"t": 150, "u": [0, 0, 1, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 184790}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 184440}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 1, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1000, "budget_left": 183440}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 183040}
physim.reset({})
{"budget_left": 182840}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 182690}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Port 3 is interesting: fast response is ch13 +0.35, but by 300 ticks slow processes overtake and flip signs. Continuing:
{"ticks_run": 350, "budget_left": 182340}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 0, 1, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1000, "budget_left": 181340}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 180940}
physim.reset({})
{"budget_left": 180740}
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 150, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "all"})
{"ticks_run": 150, "budget_left": 180590}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 180240}
physim.run({"segments": [{"t": 1000, "u": [0, 0, 0, 0, 0, 1, 0, 0]}], "channels": "all"})
{"ticks_run": 1000, "budget_left": 179240}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 400, "budget_left": 178840}
physim.reset({})
Port 5 shares W plus its own private slow (ch18 −0.57 deep, but ch23 barely). Now quick deep-drive batteries for the "weak" ports 4, 6, 7:
{"budget_left": 178640}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 1, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 800, "budget_left": 177840}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 300, "budget_left": 177540}
physim.reset({})
{"budget_left": 177340}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 0, 0, 1, 0]}], "channels": "all"})
{"ticks_run": 800, "budget_left": 176540}
physim.reset({})
physim.reset({})
{"budget_left": 176340}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 1]}], "channels": "all"})
{"ticks_run": 800, "budget_left": 175540}
physim.reset({})
{"budget_left": 175340}
physim.run({"segments": [{"t": 600, "u": [-1, 0, 0, -1, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 600, "budget_left": 174740}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Negative drive charges the private slows just as strongly (|u|-driven) but does NOT charge W at all (W is positive-rectified). Checking latch on release:
{"ticks_run": 300, "budget_left": 174440}
physim.reset({})
Privates latch deep; W untouched by negative drive. Now a duration ladder on port 3 to get its private charge curve:
{"budget_left": 174240}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 350, "budget_left": 173890}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 450, "budget_left": 173440}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 650, "budget_left": 172790}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1100, "budget_left": 171690}
physim.reset({})
Port 3's private charge curve captured (ch13 flips + → −0.9 between 300 and 1500 ticks). Now amplitude dependence of port 0's private slow at u=0.5:
{"budget_left": 171490}
physim.run({"segments": [{"t": 500, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 800, "budget_left": 170690}
physim.reset({})
{"budget_left": 170490}
physim.run({"segments": [{"t": 400, "u": [1, 1, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 750, "budget_left": 169740}
physim.run({"segments": [{"t": 400, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 750, "budget_left": 168990}
physim.run({"segments": [{"t": 2500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
Re-drive continues charging toward saturation as expected. Now testing very-long-idle stability of the latched state (2500 ticks):
{"ticks_run": 2500, "budget_left": 166490}
physim.reset({})
physim.reset({})
{"budget_left": 166290}
physim.run({"segments": [{"t": 1200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1200, "budget_left": 165090}
physim.reset({})
{"budget_left": 164890}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [33, 34, 31, 16, 1, 11]})
{"ticks_run": 600, "budget_left": 164290}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [33, 34, 31, 16, 1, 11]})
{"ticks_run": 600, "budget_left": 163690}
physim.run({"segments": [{"t": 1200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [33, 34, 31, 16, 1, 11]})
{"ticks_run": 1200, "budget_left": 162490}
physim.run({"segments": [{"t": 1600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1600, "budget_left": 160890}
physim.reset({})
Pure aging curve captured: ~19% @600, ~46% @1200, ~58% @2400, ~85% @4000 ticks. Now checking whether negative drive suppresses aging (the earlier negative-drive run aged suspiciously slowly):
{"budget_left": 160690}
physim.run({"segments": [{"t": 1200, "u": [0, -1, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1200, "budget_left": 159490}
physim.reset({})
Negative port 1 ages normally — the suppression was specific to ports 0/3 negative drive (or draw variability). One more probe: port 5 negative from fresh:
physim.reset({})
Negative port 1 ages normally — the suppression was specific to ports 0/3 negative drive (or draw variability). One more probe: port 5 negative from fresh:
{"budget_left": 159290}
physim.run({"segments": [{"t": 800, "u": [0, 0, 0, 0, 0, -1, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1100, "budget_left": 158190}
Write: /app/physim/data.py
Now I'll compile all collected data into a Python dataset and fit a quantitative model offline.
Edit: /app/physim/data.py
Edit: /app/physim/data.py
Write: /app/physim/fit.py
Now the fitting script — cascade-latch model (each of ports 0/3/5 has a fast-charging latch feeding a slower opposite-sign latch, plus autonomous aging A(t), plus reversible fast latents):
Write: /app/physim/fit2.py
The fit works but has degeneracies (ill-conditioned P5 cascade, fast-gain compression in charged states). Refining with structural masks, gain gating, and aging suppression:
The optimizer wandered into nonsense (τ_f=336, e=12.7). Adding bounds and restarts:
The optimizer wandered into nonsense (τ_f=336, e=12.7). Adding bounds and restarts:
Write: /app/physim/fit3.py
The cascade structure is wrong — the slow "b" latch charges only while driven (sigmoid in integrated drive), not from the latched "a". Rewriting the model:
Progress — but negative drives break the fit: port 3 charges *faster/deeper* under negative drive, port 5 *slower*. Adding sign-dependent rate weights and saturation multipliers:
Overall rms 0.037. Let me inspect where the worst residuals live, then validate against live held-out protocols:
Overall rms 0.037. Let me inspect where the worst residuals live, then validate against live held-out protocols:
Write: /app/physim/fit5.py
ch13 needs its own late latent (shared P3b can't serve both ch11 and ch13). Adding a third port-3 latent and refitting:
Write: /app/physim/predict.py
Model rms is 0.031 overall. Writing the predictor module, then validating against live multi-stage protocols the model hasn't seen:
physim.reset({})
{"budget_left": 157990}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channel)
{"ticks_run": 1300, "budget_left": 156690}
physim.reset({})
Validation exposes a big miss: negative port-0 drive (−0.7 × 300) fully charged P0 (avalanche/bistable flip), while the model expected partial charge. Probing the negative-drive threshold:
physim.reset({})
Validation exposes a big miss: negative port-0 drive (−0.7 × 300) fully charged P0 (avalanche/bistable flip), while the model expected partial charge. Probing the negative-drive threshold:
{"budget_left": 156490}
physim.run({"segments": [{"t": 200, "u": [-0.4, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 1, 13, 11, 25]})
{"ticks_run": 500, "budget_left": 155990}
physim.run({"segments": [{"t": 100, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 1, 13, 11, 25]})
{"ticks_run": 400, "budget_left": 155590}
physim.run({"segments": [{"t": 150, "u": [-0.7, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 1, 13, 11, 25]})
{"ticks_run": 450, "budget_left": 155140}
physim.reset({})
Avalanche threshold found for port 0 negative (~150-250 ticks at 0.7). Refining the threshold and checking port 3's:
{"budget_left": 154940}
physim.run({"segments": [{"t": 80, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 1, 13, 11, 25]})
{"ticks_run": 330, "budget_left": 154610}
physim.reset({})
{"budget_left": 154410}
physim.run({"segments": [{"t": 400, "u": [-0.55, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 23, 1, 13, 11, 25]})
{"ticks_run": 650, "budget_left": 153760}
physim.reset({})
Port 0's flip needs amplitude > ~0.6 (−0.55×400 does nothing). Checking port 3's negative flip threshold:
physim.reset({})
Port 0's flip needs amplitude > ~0.6 (−0.55×400 does nothing). Checking port 3's negative flip threshold:
{"budget_left": 153560}
physim.run({"segments": [{"t": 80, "u": [0, 0, 0, -1, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [1, 11, 13, 25, 18, 23]})
{"ticks_run": 330, "budget_left": 153230}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 60, "budget_left": 153170}
Write: /app/physim/fit6.py
Write: /app/physim/fit6.py
Write: /app/physim/predict.py
Residual errors are in exotic corners (post-flip floors, aging on ch13). Adding per-channel clamps and updating the predictor to the flip model:
physim.reset({})
Now validation V2 — a different multi-stage shape (weak port-2 push, port-5 negative, port-1 drive, long settle):
physim.reset({})
Now validation V2 — a different multi-stage shape (weak port-2 push, port-5 negative, port-1 drive, long settle):
{"budget_left": 152970}
physim.run({"segments": [{"t": 250, "u": [0, 0, 0.6, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, -0.8, 0, 0]}, {"t": 400, "u": [0, 0.9, 0, 0, 0, 0, 0, 0]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "chann)
{"ticks_run": 1550, "budget_left": 151420}
physim.reset({})
V2 validates beautifully (mean error 0.023). One more validation on the tricky port 0/3 positive gradual dynamics with during-drive checkpoints:
{"budget_left": 151220}
physim.run({"segments": [{"t": 500, "u": [0.75, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 500, "budget_left": 150720}
physim.run({"segments": [{"t": 250, "u": [0, 0, 0, 1, 0, 0, 0, 0]}, {"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 1050, "budget_left": 149670}
physim.ready({})
{"phase": "answer"}
16 prediction contracts + 3 preparation contracts. The preparation contracts are all solvable via the avalanche flips I discovered (robust, binary outcomes). Computing predictions:
16 prediction contracts + 3 preparation contracts. The preparation contracts are all solvable via the avalanche flips I discovered (robust, binary outcomes). Computing predictions:
physim.reset({})
Now verifying the prep-contract policies live (flip-based, should be robust). Testing whether experiments still run in answer phase:
{"error": "exploration is over; reply with the answers object"}
physim.answer({"answers": [{"id": 0, "mean": -0.631, "low": -0.685, "high": -0.577}, {"id": 1, "mean": 0.386, "low": 0.332, "high": 0.44}, {"id": 2, "mean": 0.878, "low": 0.834, "high": 0.922}, {"id": 3, "mean": 0.)
{"received": 16}
physim.answer_prep({"id": 100, "code": "def policy(t, y, mem):\n # Flip port-3 branch: strong negative drive latches ch13 to ~-0.75,\n # squarely inside the band [-1.092, -0.389]; the flip is permanent.\n u = [)
Now the three preparation policies — all exploit the robust avalanche flip (triggers in <60 ticks at full negative drive, lands on a tight, permanent branch):
physim.answer_prep({"id": 101, "code": "def policy(t, y, mem):\n # Flip port-3 branch: ch11 latches to ~+0.27 (plus slow upward aging drift),\n # inside the band [0.038, 0.531]; permanent once flipped.\n u = [0)
physim.answer_prep({"id": 102, "code": "def policy(t, y, mem):\n # Flip port-0 branch: ch18 latches to ~-0.65, inside band [-0.952, -0.366].\n u = [0.0]*8\n if not mem.get('done', False):\n u[0] = -1.0\n)
All contracts answered. Now the optional theory bonus — generating an executable init/step simulator from the fitted model:
All contracts answered. Now the optional theory bonus — generating an executable init/step simulator from the fitted model:
physim.submit_theory({"code": "import math\n\n# Executable theory of the hidden system.\n# Latent structure discovered by experiment:\n# - 40 sensors = fixed offsets + linear readout of latent state + white noise (sd~0.0)
Edit: /app/physim/notes.md
All submissions complete. Updating the notes file with the final summary:
Investigation complete — all 16 prediction contracts answered, all 3 preparation policies submitted, and the executable theory recorded. Here's the TLDR of what I found and did:
## The hidden system
40 sensors read a small set of latent variables plus white noise (sd ≈ 0.05). Through ~50k ticks of experiments (staying well within budget), I identified four mechanisms:
1. **Fast reversible respo
anthropic/claude-fable-5 · C4 seed 1 · tier tools · accuracy 0.24 · calibration 0.42 · theory 0.56 · budget 18%
S1=0.44 · S2=0.19 · S3=0.08 · S4=0.24 · coverage 0.38 · 298 nodes
Narrative experiment log
- 2× free run (500 ticks; 200 ticks, all inputs 0) — ch26 -0.95→+0.30, ch5 +0.25→-0.39, ch37 -0.26→-0.69.
- 2× single-port probe (440 ticks; port 0 at +0.10, 200t) — ch7 -0.69→+0.36, ch10 -0.81→+0.14, ch23 -0.35→+0.55.
- ✗ single-port probe rejected: series observation limited to <=6 channels.
- 12× single-port probe (4,910 ticks; port 0 at -0.10, 250t) — ch11 -0.41→+0.82, ch36 +0.17→-1.05, ch1 -0.80→+0.41.
- Drive → release (700 ticks; drive +0.10 for 400t, release 300t) — ch4 +0.61→-0.55, ch0 +0.40→+1.15, ch36 -1.05→-0.53.
- Free run (600 ticks; 600 ticks, all inputs 0) — ch4 -0.55→+0.20.
- 5× single-port probe (2,600 ticks; port 0 at -0.12, 520t) — ch4 +0.34→-0.79.
- 3× free run (2,640 ticks; 520 ticks, all inputs 0) — ch4 +0.29→+0.63.
- Drive → release (1,300 ticks; drive -1.00 for 600t, release 700t) — ch4 +0.63→-0.61.
- Reset to fresh initial conditions (−200 ticks).
- Free run (500 ticks; 500 ticks, all inputs 0).
- 2× drive → release (2,800 ticks; drive +0.12 for 800t, release 600t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,200 ticks; drive +0.12 for 400t, release 800t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,000 ticks; drive +0.12 for 150t, release 850t).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (1,600 ticks; drive +0.12 for 200t, release 600t).
- Reset to fresh initial conditions (−200 ticks).
- 2× drive → release (1,760 ticks; drive +0.75 for 200t, release 600t) — ch4 -0.55→-1.21.
- 11× free run (1,396 ticks; 700 ticks, all inputs 0) — ch22 +0.57→-0.72, ch11 -0.81→+0.15, ch10 +0.05→-0.82.
- 4× single-port probe (624 ticks; port 0 at +0.07, 156t) — ch11 +0.00→+0.48, ch33 -0.14→+0.19, ch28 +0.74→+0.42.
- 2× free run (312 ticks; 156 ticks, all inputs 0).
- 4× single-port probe (624 ticks; port 2 at +0.07, 156t).
- Free run (156 ticks; 156 ticks, all inputs 0).
- 4× single-port probe (624 ticks; port 4 at +0.07, 156t) — ch24 -0.38→-0.81, ch12 -0.60→-0.33, ch38 -0.62→-0.37.
- 2× free run (312 ticks; 156 ticks, all inputs 0).
- 4× single-port probe (624 ticks; port 6 at +0.07, 156t).
- Free run (156 ticks; 156 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- 8× free run (1,296 ticks; 162 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (2,000 ticks; drive +0.07 for 1500t, release 500t).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,800 ticks; drive -0.07 for 1500t, release 300t).
- 2× free run (800 ticks; 400 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,200 ticks; drive -0.07 for 900t, release 300t).
- Multi-port probe (1,200 ticks; ports [2, 3, 4, 6] at +0.07, 1200t).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (900 ticks; port 1 at +0.10, 900t).
- Reset to fresh initial conditions (−200 ticks).
- Free run (340 ticks; 340 ticks, all inputs 0).
- Drive → release (600 ticks; drive +0.05 for 400t, release 200t) — ch4 -0.08→-1.07.
- Reset to fresh initial conditions (−200 ticks).
- Drive → release (1,000 ticks; drive +0.10 for 300t, release 700t).
- Ended exploration → received 16 prediction contracts.
- ✗ free run rejected: exploration is over; reply with the answers object.
- Submitted 16 contract answers.
- Submitted 16 contract answers.
- Submitted an executable theory (17,360 chars).
Agent-written files (its instruments & theories)
app/model.md (2,459 chars)
# FINAL EMPIRICAL MODEL
## Architecture
Single relaxation oscillator (spike ~25 ticks wide) drives all 36 live sensors via fixed
per-channel waveform templates (phase-locked, various lags/signs). Sensors 2,16,17,39 are DEAD:
constants 0.177, -0.085, 0.126, 0.071 with noise sd~0.045.
Inputs inject NO DC into sensors (<=0.05 at |u|<=0.6). Inputs act only on the oscillator.
## Period logic (empirical)
- Fresh draw: SLOW branch, period 81+-1 (6/6 draws). Phase random.
- Drive condition (any of): u0 > ~0.4; |u1| > ~0.4; u_p > ~0.4 for p in 2..7 (negatives inert
for p=0,2,4,6 (tested); assume same for 3,5,7).
- Period under drive: >=0.45 -> 39-41 (transition ~150-200 ticks: first intervals 60-80,50,42,...).
u=0.4 -> ~46 irregular. <=0.3 -> 81 (NO effect at all: weak pushes invisible).
- Release after drive of duration D (not latched):
D~300: period ~70-73 for 700+ ticks, slowly -> 81. Amplitude full.
D~600: period ~40-55 lingering, reduced spike amplitude (~60% of full) recovering ~500 ticks.
- LATCH (permanent fast, period 39-40 at u=0, full amplitude):
* u0 >= ~0.9 for >=150 ticks (u0=0.8 x700 does NOT latch)
* OR cumulative fast-driving ~800-900+ ticks (900 latched twice; 600-700 didn't)
* repeated onsets (3x60-tick pulses port1 @1.0 within ~600 ticks) latched once.
Latch survives >=2000 ticks and all-ports -1 x600. No un-latch found.
## Templates (period-folded waveforms)
- fast (39 ticks): /app/templates_fast.npy + /app/stats_fast.json (tavg, lo20/hi20 = min/max of
20-tick rolling mean, sd_cycle=sd of 200-tick window (5.1 cycles), pk/tr).
- slow (81 ticks): /app/templates_slow.npy + /app/stats_slow.json (also sd200lo/hi for 200-tick window).
- Spike event shape identical between branches; slow = longer flat inter-spike baseline.
- Waveform amplitude under strong drive == latched amplitude == fresh amplitude (full),
EXCEPT transient shrink after 600+ tick drives on release.
## Prediction recipes
- mean(final 20 ticks): midpoint = tavg(branch); interval = [lo20, hi20] (phase unknown, no reset).
Dead channels: value +- 0.05.
- sd(200-tick window): fast: sd_cycle_fast +-10%; slow: sd200lo..sd200hi +-10%. Dead: 0.045-0.05.
- count upward crossings (200-tick window): window/period; spikes cross once per period
(threshold-dependent: use template + threshold from contract).
- Periods: slow 81, driven(>=0.45) 40, driven(0.4) 46, post-release-300 72, latched 39.5.
## Budget: ~163k at ready() time.
app/notes.md (2,090 chars)
# Physim system notes
## Interface
8 inputs, 40 sensors, obs window = final 20 ticks. Budget 200k. reset=200.
## Core structure
- Single global relaxation oscillator (spiking). All sensors = mix of oscillator waveform + DC(inputs) + noise (sd ~0.05).
- Baseline (u=0): period ~80 ticks. Spike shape on ch4: flat ~-0.5, ramp up to +2.5 over ~10 ticks, crash to -1.5, slow recovery to -0.5 (~40 ticks), flat.
- Spike width ~20-25 ticks total. Quiet 20-tick window between spikes has sd~0.05 => "silent-looking" tails are just inter-spike windows. No true bistability observed.
- Oscillator never stopped in any condition tried so far (u0=-1: period ~82).
## Period vs input (ch4 spike counting)
- u=0: ~80
- u0=+1: ~39 ; u0=+0.8: ~41 ; u0=+0.4: ~44 ; u0=-1: ~82 (negative barely slows)
- u1=+0.8: ~39 ; u2=+0.8: ~39 ; u6=+0.8: ~40 (transient from 80->40 over ~150-200 ticks)
- Frequency saturates ~period 39-40 for strong positive drive on ANY port tried.
- Period adaptation timescale after step: ~150 ticks (drifts to asymptote).
- Spike amplitude on ch4 fluctuates/declines slowly under sustained drive (ports 1,2): peaks 2.5 -> ~1.5-1.8 late in 520-tick runs. Slow amplitude adaptation?
## Channels
- Pure-noise/constant channels (sd~0.04 always, mean const): 2 (~0.18), 16 (~-0.08), 17 (~0.12), 39 (~0.07)
- Strong oscillator channels: 4, 26 (downward spikes), 30, 37, 14, 5, 3, 0, 18, 25, 36, ...
- Nearly every channel oscillates when amplitude is high (strong drive).
## DC tail means (phase-contaminated for osc channels) per port at +0.8
port0: ch14 -1.10 (base 0.21), ch27 -1.27 (base -0.75), ch13 -0.69, ch20 0.67
port1: ch18 1.18 (base 0.55), ch20 0.96, ch28 0.66, ch35 -0.56, ch13 -0.64
port3 ~= port7 responses (very similar means across all channels)
port6: suppress-look was window artifact.
## Open questions
- Frequency vs each port at small levels (+-0.3): which ports drive freq?
- DC gain map: random-input regression
- amplitude adaptation dynamics
- phase reset by steps (predictability of final-20-tick window phase)
- waveform per channel (weights/phase lags)
app/.vf-claude/c931d3dac0cc4be593743296dc55d04a/.claude.json (389 chars)
{
"firstStartTime": "2026-08-14T13:49:49.415Z",
"machineID": "39825d948d47b3e468cb6b2b9a3e17fc128093aeca53d5b566bded509e051575",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "ac5ac4c1832b40910ec7c75ec623e66b0c2dc612004af7bfa56c902e79c07fb8"
}
app/analyze_fast.py (1,750 chars)
import numpy as np, json
from data_fast_wave import BATCHES
P = 40 # fast period estimate; refine by autocorr of concatenated ch4? use per-batch alignment instead
# Estimate period from B1 ch4 via spike peak spacing
def peaks(x, thr=1.0):
x = np.asarray(x); idx=[]
for i in range(1,len(x)-1):
if x[i]>thr and x[i]>=x[i-1] and x[i]>=x[i+1]: idx.append(i)
return idx
for b in BATCHES:
print('peaks ch4:', peaks(b[4]))
# Align batches: find shift s such that batch ch4 matches reference template.
# Build reference from B1 ch4: assume period P=40, fold.
ref = np.asarray(BATCHES[0][4])
def fold(x, P, phase0=0.0):
# returns template on grid 0..P-1 by averaging folded samples
x = np.asarray(x); n=len(x)
grid = np.zeros(P); cnt=np.zeros(P)
for i in range(n):
k = int(round((i+phase0))) % P
grid[k]+=x[i]; cnt[k]+=1
return grid/np.maximum(cnt,1)
# Determine best P by minimizing fold residual of ch4 across all batches jointly
best=None
for Ptry in np.arange(38.0, 42.01, 0.25):
tot=0
for b in BATCHES:
x=np.asarray(b[4]); n=len(x)
# fold with fractional period: phase_i = (i mod Ptry)/Ptry * 40 bins
bins=40
acc=np.zeros(bins); cnt=np.zeros(bins)
ph=(np.arange(n)%Ptry)/Ptry*bins
k=np.floor(ph).astype(int)%bins
for i in range(n): acc[k[i]]+=x[i]; cnt[i%1]+=0
for i in range(n): pass
# residual: variance within bins
res=0
vals={}
for i in range(n): vals.setdefault(k[i],[]).append(x[i])
for kk,vv in vals.items():
vv=np.asarray(vv); res+=((vv-vv.mean())**2).sum()
tot+=res
if best is None or tot<best[1]: best=(Ptry,tot)
print('best period:', best)
app/data_fast_wave.py (19,136 chars)
# Fast-branch (latched) waveform library at u=0, period ~40. stride 1, 60 ticks per batch.
# Each batch: dict channel -> list of 60 samples. ch4 present in every batch as phase reference.
B1 = {
4:[-1.56,-1.443,-1.306,-1.38,-1.285,-1.262,-1.241,-1.139,-1.044,-1.056,-1.048,-0.919,-0.948,-0.85,-0.82,-0.659,-0.763,-0.603,-0.631,-0.485,-0.266,0.152,0.51,1.076,1.651,2.19,2.427,2.578,2.469,2.238,1.849,1.291,0.619,-0.117,-0.64,-1.152,-1.523,-1.442,-1.506,-1.519,-1.456,-1.424,-1.301,-1.321,-1.222,-1.133,-1.079,-1.046,-0.982,-1.043,-1.0,-0.896,-0.829,-0.825,-0.778,-0.676,-0.615,-0.579,-0.52,-0.217],
0:[-0.916,-1.369,-2.017,-2.216,-2.237,-2.485,-2.185,-1.853,-1.287,-0.687,0.124,0.729,1.13,1.44,1.476,1.517,1.502,1.512,1.36,1.404,1.223,1.245,1.187,1.171,1.086,1.119,0.982,1.012,0.925,0.929,0.847,0.742,0.796,0.657,0.67,0.55,0.431,0.054,-0.381,-0.827,-1.334,-1.888,-2.241,-2.406,-2.414,-2.221,-1.974,-1.371,-0.718,-0.013,0.688,1.116,1.589,1.545,1.561,1.551,1.51,1.452,1.359,1.403],
1:[-1.799,-1.625,-1.613,-1.537,-1.508,-1.538,-1.462,-1.412,-1.433,-1.244,-1.261,-1.17,-1.151,-1.159,-1.074,-1.096,-0.884,-0.922,-0.79,-0.86,-0.748,-0.627,-0.329,0.235,0.675,1.251,1.719,1.957,1.967,2.067,1.902,1.581,1.045,0.355,-0.255,-0.82,-1.3,-1.529,-1.712,-1.763,-1.686,-1.571,-1.605,-1.563,-1.595,-1.496,-1.386,-1.323,-1.311,-1.309,-1.077,-1.179,-1.151,-1.06,-1.004,-1.023,-0.916,-0.93,-0.844,-0.748],
2:[0.107,0.218,0.208,0.166,0.237,0.269,0.109,0.148,0.226,0.177,0.133,0.223,0.261,0.211,0.196,0.284,0.201,0.172,0.253,0.174,0.311,0.128,0.29,0.114,0.172,0.167,0.225,0.221,0.181,0.165,0.118,0.149,0.127,0.189,0.138,0.204,0.208,0.173,0.176,0.141,0.226,0.144,0.195,0.086,0.075,0.275,0.1,0.136,0.118,0.161,0.196,0.059,0.158,0.151,0.208,0.064,0.167,0.106,0.19,0.241],
3:[-0.503,-0.556,-0.497,-0.473,-0.447,-0.346,-0.376,-0.368,-0.382,-0.289,-0.407,-0.301,-0.209,-0.094,-0.25,-0.262,-0.193,-0.168,-0.186,-0.144,-0.133,-0.033,0.107,0.252,0.384,0.629,0.769,1.039,1.089,1.069,1.141,0.986,0.863,0.652,0.361,0.133,-0.127,-0.336,-0.493,-0.482,-0.504,-0.564,-0.428,-0.413,-0.367,-0.387,-0.389,-0.267,-0.349,-0.298,-0.236,-0.203,-0.211,-0.261,-0.233,-0.273,-0.187,-0.176,-0.155,-0.079],
5:[-0.775,-1.003,-0.994,-1.098,-0.985,-0.966,-0.972,-0.762,-0.856,-0.826,-0.814,-0.735,-0.669,-0.74,-0.665,-0.637,-0.589,-0.538,-0.607,-0.538,-0.537,-0.4,-0.377,-0.388,-0.171,0.03,0.473,0.759,1.116,1.386,1.646,1.749,1.538,1.466,1.141,0.799,0.272,-0.132,-0.628,-0.764,-1.0,-1.102,-1.047,-1.068,-0.949,-1.009,-0.901,-0.878,-0.836,-0.725,-0.826,-0.656,-0.803,-0.671,-0.642,-0.631,-0.612,-0.615,-0.571,-0.493],
}
B2 = {
4:[0.231,0.514,1.114,1.61,2.19,2.413,2.548,2.5,2.26,1.889,1.317,0.692,-0.082,-0.781,-1.127,-1.444,-1.553,-1.437,-1.424,-1.349,-1.47,-1.346,-1.366,-1.244,-1.24,-1.141,-1.049,-1.1,-1.035,-1.015,-0.948,-0.947,-0.853,-0.757,-0.73,-0.715,-0.637,-0.563,-0.231,0.049,0.588,0.99,1.672,1.996,2.336,2.583,2.501,2.296,1.928,1.382,0.723,0.129,-0.607,-1.153,-1.291,-1.572,-1.593,-1.497,-1.408,-1.452],
6:[-0.17,0.122,0.499,0.933,1.174,1.278,1.424,1.384,1.251,0.966,0.7,0.22,-0.276,-0.665,-0.97,-1.044,-1.075,-1.114,-1.041,-1.002,-1.07,-0.922,-0.879,-0.882,-0.892,-0.815,-0.837,-0.817,-0.834,-0.72,-0.707,-0.743,-0.757,-0.595,-0.697,-0.531,-0.583,-0.55,-0.45,-0.25,0.222,0.387,0.826,1.165,1.349,1.467,1.318,1.253,1.047,0.72,0.332,-0.178,-0.624,-0.927,-1.15,-1.072,-1.16,-1.12,-1.076,-1.039],
7:[-1.178,-1.41,-1.528,-1.48,-1.501,-1.444,-1.261,-1.27,-1.335,-1.135,-1.199,-1.137,-1.147,-1.118,-1.024,-1.013,-0.866,-0.895,-0.999,-0.849,-0.865,-0.802,-0.808,-0.793,-0.625,-0.371,0.043,0.397,0.821,1.217,1.571,1.785,1.801,1.67,1.46,0.951,0.446,-0.085,-0.662,-1.114,-1.32,-1.453,-1.525,-1.422,-1.39,-1.358,-1.257,-1.286,-1.12,-1.195,-1.062,-1.144,-1.026,-1.07,-0.97,-0.915,-0.915,-0.852,-0.862,-0.797],
8:[0.86,0.519,0.223,-0.221,-0.554,-0.683,-0.739,-0.85,-0.804,-0.775,-0.683,-0.737,-0.688,-0.7,-0.645,-0.629,-0.623,-0.586,-0.587,-0.526,-0.483,-0.52,-0.404,-0.511,-0.432,-0.426,-0.367,-0.325,-0.23,-0.052,0.163,0.338,0.645,0.927,1.121,1.346,1.275,1.168,1.061,0.881,0.467,0.16,-0.194,-0.607,-0.68,-0.804,-0.769,-0.86,-0.796,-0.763,-0.667,-0.774,-0.693,-0.628,-0.596,-0.681,-0.603,-0.626,-0.517,-0.474],
9:[0.49,0.492,0.413,0.436,0.409,0.358,0.309,0.333,0.279,0.236,0.233,0.206,0.241,0.307,0.159,0.135,0.128,-0.024,-0.004,-0.251,-0.656,-0.863,-1.086,-1.286,-1.473,-1.445,-1.345,-1.229,-0.908,-0.477,-0.24,0.029,0.236,0.562,0.62,0.549,0.641,0.563,0.581,0.438,0.486,0.525,0.44,0.415,0.351,0.392,0.285,0.239,0.375,0.259,0.356,0.138,0.283,0.103,0.106,0.181,-0.022,-0.059,-0.264,-0.612],
10:[0.54,0.939,1.25,1.586,1.657,1.711,1.498,1.226,0.983,0.534,0.079,-0.413,-0.87,-1.123,-1.185,-1.271,-1.172,-1.16,-1.136,-0.996,-1.005,-1.082,-1.087,-0.98,-0.895,-0.957,-0.853,-0.829,-0.842,-0.735,-0.771,-0.714,-0.693,-0.624,-0.547,-0.484,-0.347,-0.175,0.199,0.585,0.93,1.272,1.527,1.736,1.73,1.618,1.314,0.927,0.476,0.062,-0.309,-0.899,-1.157,-1.167,-1.206,-1.202,-1.136,-1.238,-1.163,-1.099],
}
B3 = {
4:[-1.291,-1.29,-1.224,-1.155,-1.088,-1.054,-1.059,-0.937,-0.981,-0.887,-0.927,-0.802,-0.778,-0.739,-0.683,-0.576,-0.561,-0.358,-0.057,0.472,1.046,1.578,2.013,2.375,2.576,2.53,2.439,2.047,1.379,0.717,0.163,-0.505,-0.993,-1.349,-1.521,-1.583,-1.46,-1.46,-1.4,-1.274,-1.265,-1.216,-1.174,-1.173,-1.109,-1.059,-1.003,-0.985,-0.883,-0.848,-0.798,-0.792,-0.723,-0.704,-0.676,-0.581,-0.386,-0.071,0.335,0.976],
11:[-1.325,-1.226,-1.148,-1.087,-1.044,-1.066,-0.977,-0.926,-0.975,-0.811,-0.842,-0.773,-0.787,-0.708,-0.624,-0.621,-0.544,-0.474,-0.581,-0.488,-0.37,-0.383,-0.048,0.267,0.752,1.056,1.617,2.139,2.283,2.315,2.261,2.098,1.67,1.19,0.49,-0.002,-0.606,-1.031,-1.133,-1.217,-1.284,-1.143,-1.081,-1.151,-1.009,-0.99,-1.037,-0.86,-0.963,-0.767,-0.846,-0.661,-0.706,-0.624,-0.595,-0.535,-0.49,-0.545,-0.523,-0.441],
12:[-0.492,-0.566,-0.481,-0.534,-0.442,-0.4,-0.379,-0.454,-0.438,-0.264,-0.356,-0.276,-0.155,-0.009,0.203,0.599,0.891,1.244,1.426,1.559,1.537,1.472,1.243,1.055,0.544,0.083,-0.232,-0.559,-0.655,-0.771,-0.843,-0.785,-0.899,-0.797,-0.764,-0.775,-0.66,-0.63,-0.65,-0.577,-0.534,-0.562,-0.42,-0.486,-0.497,-0.493,-0.367,-0.433,-0.353,-0.306,-0.323,-0.181,0.049,0.233,0.603,0.806,1.129,1.362,1.516,1.499],
13:[0.756,0.866,0.952,0.925,0.826,0.788,0.473,0.223,-0.172,-0.464,-0.774,-0.89,-0.945,-1.007,-0.977,-0.943,-0.856,-0.77,-0.848,-0.883,-0.707,-0.665,-0.733,-0.683,-0.749,-0.633,-0.653,-0.582,-0.511,-0.556,-0.521,-0.602,-0.5,-0.506,-0.466,-0.29,-0.023,0.123,0.427,0.67,0.881,0.968,0.944,0.843,0.744,0.494,0.14,-0.157,-0.494,-0.758,-0.837,-0.967,-0.926,-0.921,-0.855,-0.853,-0.836,-0.835,-0.744,-0.7],
14:[-0.43,-0.031,0.184,0.464,0.882,1.179,1.389,1.463,1.274,1.067,0.876,0.519,-0.011,-0.333,-0.764,-1.042,-1.313,-1.393,-1.449,-1.477,-1.424,-1.364,-1.365,-1.23,-1.273,-1.166,-1.182,-1.17,-1.091,-1.028,-1.048,-0.995,-0.998,-0.864,-0.954,-0.814,-0.737,-0.696,-0.584,-0.319,-0.076,0.098,0.447,0.816,1.108,1.273,1.357,1.383,1.179,0.948,0.523,0.161,-0.304,-0.739,-1.137,-1.296,-1.451,-1.429,-1.435,-1.418],
15:[0.583,0.557,0.615,0.534,0.504,0.438,0.266,-0.07,-0.323,-0.427,-0.65,-0.819,-0.826,-0.716,-0.592,-0.391,-0.155,0.156,0.521,0.767,0.944,0.924,1.033,0.992,1.026,0.937,0.874,0.926,0.958,0.889,0.906,0.762,0.815,0.821,0.74,0.729,0.714,0.682,0.733,0.594,0.761,0.668,0.545,0.59,0.403,0.296,0.032,-0.187,-0.414,-0.691,-0.807,-0.886,-0.826,-0.7,-0.482,-0.176,0.172,0.48,0.736,1.027],
}
B4 = {
4:[1.429,1.879,2.25,2.521,2.578,2.401,2.054,1.539,0.881,0.244,-0.47,-1.018,-1.286,-1.554,-1.473,-1.488,-1.415,-1.339,-1.244,-1.265,-1.253,-1.201,-1.239,-1.091,-1.032,-1.093,-0.979,-0.763,-0.913,-0.791,-0.781,-0.794,-0.692,-0.743,-0.495,-0.469,-0.212,0.303,0.981,1.471,1.9,2.268,2.451,2.505,2.423,2.086,1.599,0.973,0.202,-0.388,-0.913,-1.319,-1.526,-1.616,-1.487,-1.473,-1.445,-1.394,-1.311,-1.353],
16:[-0.058,-0.099,-0.165,-0.042,0.018,-0.028,-0.033,-0.028,-0.045,-0.112,-0.17,-0.033,-0.103,-0.117,0.002,-0.006,-0.046,-0.158,-0.098,0.016,-0.046,-0.173,-0.111,-0.003,-0.163,-0.091,-0.109,-0.108,-0.1,-0.086,-0.125,-0.085,-0.093,-0.082,-0.121,-0.094,-0.079,-0.129,-0.027,-0.105,-0.137,-0.046,-0.026,-0.103,-0.103,-0.01,-0.13,-0.167,-0.14,0.013,-0.023,-0.005,-0.147,-0.107,-0.014,-0.113,-0.167,-0.051,-0.067,-0.093],
17:[0.21,0.101,0.109,0.131,0.078,0.141,0.129,0.053,0.105,0.102,0.097,0.165,0.13,0.178,0.073,0.056,0.156,0.171,0.123,0.108,0.152,0.175,0.159,0.212,0.136,0.094,0.147,0.074,0.144,0.161,0.054,0.139,0.006,0.046,0.226,0.134,0.193,0.165,0.159,0.052,0.106,0.113,0.103,0.122,0.038,0.098,-0.011,0.137,0.037,0.241,0.195,0.208,0.05,0.174,0.173,0.212,0.067,0.099,0.099,0.095],
18:[1.551,1.541,1.467,1.449,1.353,1.287,1.232,1.28,1.149,1.14,1.037,0.948,0.957,0.842,0.931,0.881,0.765,0.77,0.791,0.646,0.736,0.58,0.453,0.069,-0.465,-0.91,-1.52,-1.922,-2.229,-2.458,-2.383,-2.195,-1.952,-1.354,-0.627,0.046,0.636,1.139,1.45,1.468,1.521,1.486,1.416,1.349,1.317,1.279,1.192,1.215,1.064,1.05,1.063,0.874,0.98,0.853,0.863,0.712,0.819,0.651,0.677,0.694],
19:[0.466,0.631,0.972,1.144,1.214,1.32,1.154,1.005,0.885,0.611,0.266,-0.099,-0.355,-0.536,-0.828,-0.731,-0.722,-0.784,-0.765,-0.693,-0.677,-0.739,-0.572,-0.675,-0.575,-0.606,-0.498,-0.53,-0.508,-0.498,-0.49,-0.4,-0.385,-0.368,-0.391,-0.203,-0.184,0.048,0.103,0.366,0.614,0.974,1.208,1.284,1.238,1.2,1.063,0.846,0.456,0.188,-0.145,-0.343,-0.705,-0.656,-0.852,-0.672,-0.736,-0.694,-0.785,-0.765],
20:[-1.841,-1.422,-1.068,-0.522,0.012,0.57,1.006,1.267,1.4,1.425,1.36,1.384,1.356,1.37,1.307,1.232,1.225,1.037,1.193,1.019,0.955,1.056,0.812,0.843,0.828,0.779,0.776,0.732,0.67,0.626,0.499,0.331,-0.135,-0.62,-1.065,-1.41,-1.787,-1.853,-1.954,-1.879,-1.585,-1.163,-0.571,0.017,0.456,0.936,1.244,1.397,1.445,1.384,1.289,1.29,1.355,1.229,1.183,1.158,1.067,1.115,0.993,0.946],
}
B5 = {
4:[-1.152,-1.145,-1.098,-1.007,-1.096,-1.001,-0.933,-0.921,-0.883,-0.825,-0.718,-0.603,-0.541,-0.459,-0.371,-0.06,0.549,1.36,2.063,2.487,2.654,2.613,2.504,2.354,1.864,1.352,0.386,-0.598,-1.277,-1.489,-1.591,-1.558,-1.531,-1.472,-1.36,-1.351,-1.263,-1.215,-1.152,-1.172,-1.088,-1.054,-1.019,-0.93,-0.932,-0.796,-0.746,-0.796,-0.82,-0.686,-0.581,-0.584,-0.512,-0.319,-0.084,0.246,0.924,1.393,1.925,2.247],
21:[-0.04,0.263,0.536,0.94,1.151,1.481,1.585,1.651,1.458,1.219,0.836,0.344,-0.084,-0.469,-0.89,-1.036,-1.115,-1.106,-1.052,-1.073,-1.006,-0.975,-0.841,-0.935,-0.827,-0.849,-0.818,-0.734,-0.671,-0.679,-0.639,-0.626,-0.612,-0.563,-0.495,-0.423,-0.469,-0.407,-0.306,-0.133,0.177,0.581,0.885,1.188,1.403,1.587,1.521,1.448,1.23,0.87,0.458,0.054,-0.422,-0.81,-1.021,-1.121,-1.127,-1.053,-1.03,-1.104],
22:[-0.518,-0.535,-0.443,-0.451,-0.467,-0.31,-0.097,0.155,0.547,0.926,1.293,1.718,1.862,1.919,1.874,1.636,1.256,0.783,0.375,-0.18,-0.647,-0.969,-1.103,-1.15,-1.062,-1.012,-0.983,-0.977,-0.906,-0.89,-0.843,-0.837,-0.798,-0.746,-0.719,-0.702,-0.591,-0.591,-0.555,-0.517,-0.438,-0.429,-0.406,-0.474,-0.401,-0.121,0.104,0.485,0.86,1.418,1.695,1.808,1.87,1.765,1.582,1.324,0.947,0.403,-0.049,-0.55],
23:[-1.036,-1.142,-1.109,-1.123,-0.944,-0.644,-0.483,-0.157,0.085,0.337,0.603,0.648,0.606,0.752,0.615,0.672,0.576,0.59,0.641,0.656,0.454,0.488,0.413,0.463,0.453,0.403,0.479,0.346,0.347,0.316,0.259,0.34,0.162,0.095,-0.052,-0.214,-0.361,-0.652,-0.826,-1.11,-1.09,-1.185,-1.144,-1.022,-0.644,-0.374,-0.119,0.087,0.298,0.561,0.653,0.727,0.705,0.643,0.711,0.644,0.628,0.636,0.542,0.535],
24:[0.671,1.184,1.56,1.881,2.005,1.997,1.919,1.627,1.233,0.8,0.24,-0.257,-0.693,-1.018,-1.203,-1.242,-1.131,-1.138,-1.135,-0.936,-0.93,-0.95,-0.945,-0.842,-0.731,-0.69,-0.739,-0.674,-0.646,-0.62,-0.639,-0.605,-0.554,-0.417,-0.509,-0.381,-0.205,-0.032,0.327,0.651,1.135,1.561,1.908,1.991,2.067,1.903,1.583,1.315,0.687,0.264,-0.212,-0.719,-0.988,-1.14,-1.226,-1.159,-1.096,-1.048,-0.961,-0.938],
25:[0.551,0.638,0.565,0.522,0.553,0.497,0.489,0.392,0.272,0.323,0.287,0.268,0.315,0.243,0.253,0.184,0.242,0.118,0.03,-0.234,-0.467,-0.826,-1.217,-1.466,-1.662,-1.686,-1.662,-1.618,-1.397,-1.004,-0.687,-0.18,0.126,0.507,0.656,0.732,0.72,0.722,0.63,0.626,0.592,0.47,0.529,0.448,0.526,0.387,0.393,0.376,0.376,0.308,0.326,0.308,0.272,0.26,0.19,0.152,0.029,-0.105,-0.306,-0.469],
}
B6 = {
4:[2.571,2.576,2.543,2.207,1.72,1.072,0.29,-0.312,-0.911,-1.282,-1.496,-1.514,-1.548,-1.474,-1.455,-1.307,-1.359,-1.254,-1.166,-1.161,-1.119,-1.096,-0.968,-0.891,-0.902,-0.861,-0.865,-0.764,-0.742,-0.68,-0.621,-0.567,-0.409,-0.184,0.312,1.003,1.774,2.311,2.618,2.716,2.582,2.451,2.193,1.598,0.853,-0.087,-0.972,-1.485,-1.61,-1.557,-1.673,-1.532,-1.497,-1.346,-1.351,-1.178,-1.265,-1.183,-1.144,-1.087],
26:[0.115,-0.091,-0.478,-0.821,-1.317,-1.802,-2.226,-2.527,-2.784,-2.616,-2.431,-2.003,-1.474,-1.013,-0.309,0.202,0.682,1.111,1.261,1.241,1.222,1.265,1.154,1.073,1.081,0.914,1.029,0.812,0.753,0.823,0.75,0.644,0.648,0.59,0.539,0.412,0.385,0.492,0.281,0.228,-0.048,-0.34,-0.833,-1.212,-1.827,-2.21,-2.514,-2.654,-2.641,-2.565,-2.088,-1.605,-1.096,-0.422,0.086,0.72,1.06,1.128,1.209,1.179],
27:[-1.584,-1.467,-1.381,-1.353,-1.267,-1.317,-1.275,-1.197,-1.171,-1.149,-1.05,-1.086,-1.052,-0.945,-0.849,-0.862,-0.831,-0.792,-0.718,-0.603,-0.437,-0.115,0.323,0.914,1.486,1.767,1.986,1.941,1.879,1.598,1.145,0.488,-0.064,-0.686,-1.358,-1.697,-1.645,-1.555,-1.604,-1.514,-1.5,-1.448,-1.369,-1.278,-1.208,-1.22,-1.346,-1.217,-1.121,-1.107,-1.016,-1.049,-0.913,-1.04,-0.969,-0.807,-0.816,-0.776,-0.669,-0.476],
28:[-1.546,-1.4,-1.031,-0.593,-0.124,0.237,0.628,0.862,0.954,0.97,0.912,0.909,0.89,0.888,0.812,0.801,0.807,0.739,0.703,0.658,0.623,0.615,0.631,0.55,0.601,0.486,0.465,0.512,0.399,0.34,0.348,0.137,-0.088,-0.46,-0.773,-1.274,-1.427,-1.564,-1.659,-1.534,-1.338,-1.092,-0.676,-0.219,0.288,0.543,0.821,0.843,0.999,0.969,0.896,0.864,0.816,0.789,0.846,0.81,0.764,0.62,0.714,0.638],
29:[0.404,0.448,0.362,0.307,0.254,0.119,0.085,-0.074,-0.362,-0.713,-0.981,-1.319,-1.519,-1.536,-1.49,-1.409,-1.282,-0.908,-0.477,-0.171,0.373,0.644,0.751,0.736,0.827,0.764,0.783,0.659,0.678,0.653,0.558,0.57,0.464,0.547,0.493,0.315,0.458,0.401,0.432,0.425,0.36,0.221,0.287,0.214,0.12,0.06,-0.12,-0.286,-0.644,-1.117,-1.337,-1.512,-1.567,-1.443,-1.46,-1.149,-0.85,-0.432,-0.024,0.276],
30:[-0.66,-0.612,-0.514,-0.472,-0.254,0.083,0.466,1.083,1.499,1.886,2.094,2.284,2.02,1.773,1.401,0.783,0.167,-0.546,-1.118,-1.368,-1.453,-1.476,-1.422,-1.312,-1.373,-1.237,-1.189,-1.221,-1.095,-1.051,-1.075,-1.036,-0.928,-0.971,-0.901,-0.826,-0.845,-0.695,-0.776,-0.592,-0.409,-0.215,0.153,0.614,1.177,1.648,1.966,2.0,2.075,1.844,1.438,1.049,0.426,-0.215,-0.736,-1.107,-1.263,-1.415,-1.421,-1.4],
}
B7 = {
4:[-1.124,-1.016,-1.009,-0.952,-0.841,-0.854,-0.787,-0.789,-0.752,-0.634,-0.568,-0.488,-0.311,0.269,0.727,1.152,1.746,2.199,2.516,2.623,2.465,2.278,1.894,1.192,0.489,-0.174,-0.685,-1.286,-1.549,-1.505,-1.583,-1.428,-1.417,-1.5,-1.254,-1.288,-1.172,-1.172,-1.206,-1.142,-1.069,-0.945,-0.912,-0.866,-0.936,-0.872,-0.831,-0.763,-0.713,-0.694,-0.49,-0.311,0.081,0.483,1.197,1.795,2.358,2.579,2.665,2.545],
31:[-0.643,-0.542,-0.524,-0.471,-0.508,-0.511,-0.401,-0.497,-0.269,-0.127,0.176,0.343,0.542,0.673,0.847,0.896,0.886,0.737,0.64,0.282,0.011,-0.315,-0.515,-0.747,-0.818,-0.825,-0.865,-0.839,-0.796,-0.717,-0.67,-0.677,-0.633,-0.734,-0.691,-0.611,-0.703,-0.683,-0.535,-0.525,-0.569,-0.518,-0.547,-0.502,-0.435,-0.393,-0.422,-0.28,-0.122,0.063,0.338,0.542,0.74,0.854,0.888,0.79,0.758,0.59,0.265,0.028],
32:[0.33,0.199,0.191,0.18,-0.102,-0.238,-0.435,-0.666,-0.918,-1.1,-1.143,-1.124,-1.106,-0.888,-0.726,-0.389,-0.096,0.228,0.477,0.651,0.647,0.675,0.532,0.726,0.635,0.532,0.591,0.493,0.51,0.444,0.502,0.395,0.443,0.382,0.423,0.346,0.454,0.34,0.372,0.265,0.221,0.226,0.059,0.044,-0.204,-0.407,-0.649,-0.963,-1.004,-1.144,-1.099,-1.074,-0.79,-0.621,-0.397,-0.08,0.225,0.43,0.588,0.654],
33:[-1.807,-1.605,-1.455,-0.86,-0.366,0.203,0.76,0.945,1.331,1.411,1.402,1.331,1.275,1.244,1.278,1.156,1.211,1.113,1.084,1.054,0.918,0.922,0.895,0.912,0.819,0.819,0.801,0.741,0.586,0.719,0.583,0.488,0.277,-0.071,-0.593,-0.916,-1.266,-1.575,-1.817,-1.695,-1.639,-1.391,-0.93,-0.47,0.161,0.664,1.081,1.289,1.359,1.312,1.249,1.319,1.27,1.349,1.146,1.126,1.174,1.025,1.071,0.935],
34:[0.822,0.788,0.683,0.722,0.721,0.649,0.571,0.641,0.52,0.461,0.427,0.418,0.345,0.356,0.421,0.258,0.147,-0.092,-0.455,-0.888,-1.321,-1.79,-2.075,-2.215,-2.094,-1.93,-1.829,-1.329,-0.805,-0.216,0.32,0.696,0.972,1.031,1.017,1.049,0.922,0.976,0.964,0.916,0.893,0.807,0.763,0.807,0.64,0.596,0.597,0.539,0.644,0.431,0.427,0.377,0.414,0.412,0.344,0.225,-0.021,-0.468,-0.942,-1.514],
35:[-0.505,-0.469,-0.517,-0.566,-0.412,-0.494,-0.359,-0.41,-0.409,-0.33,-0.106,0.026,0.113,0.375,0.732,0.928,1.085,1.174,1.169,1.063,0.827,0.607,0.342,0.036,-0.327,-0.584,-0.73,-0.786,-0.821,-0.724,-0.683,-0.882,-0.774,-0.606,-0.658,-0.697,-0.665,-0.602,-0.571,-0.487,-0.508,-0.518,-0.51,-0.391,-0.369,-0.408,-0.306,-0.352,-0.341,-0.253,-0.107,0.208,0.342,0.688,0.948,1.199,1.138,1.236,1.107,0.926],
}
B8 = {
4:[2.357,1.826,1.28,0.648,-0.235,-0.869,-1.319,-1.616,-1.48,-1.557,-1.512,-1.483,-1.292,-1.294,-1.189,-1.381,-1.146,-1.134,-1.039,-0.94,-1.039,-0.814,-0.866,-0.88,-0.805,-0.8,-0.725,-0.679,-0.794,-0.504,-0.268,0.024,0.586,1.11,1.67,2.118,2.412,2.592,2.562,2.413,1.871,1.381,0.74,0.06,-0.618,-1.082,-1.466,-1.562,-1.614,-1.433,-1.447,-1.469,-1.305,-1.368,-1.219,-1.139,-1.153,-1.009,-1.034,-0.981],
36:[-0.49,-0.21,0.005,0.504,0.855,1.224,1.469,1.644,1.79,1.667,1.56,1.178,0.646,0.183,-0.398,-0.851,-1.12,-1.216,-1.206,-1.278,-1.196,-1.126,-1.181,-1.084,-1.075,-1.029,-0.878,-0.963,-0.895,-0.92,-0.825,-0.826,-0.774,-0.739,-0.742,-0.759,-0.773,-0.597,-0.619,-0.366,-0.353,0.059,0.329,0.77,1.141,1.613,1.732,1.709,1.695,1.393,1.151,0.6,0.231,-0.332,-0.739,-1.13,-1.317,-1.362,-1.202,-1.194],
37:[-0.662,-1.234,-1.51,-1.566,-1.634,-1.64,-1.559,-1.581,-1.497,-1.465,-1.434,-1.323,-1.249,-1.252,-1.209,-1.183,-1.059,-1.143,-0.975,-0.951,-0.916,-0.889,-0.825,-0.786,-0.686,-0.396,0.045,0.362,0.864,1.3,1.738,2.106,2.287,2.238,2.105,1.73,1.2,0.625,-0.06,-0.654,-1.115,-1.551,-1.592,-1.635,-1.622,-1.65,-1.537,-1.615,-1.451,-1.38,-1.376,-1.39,-1.197,-1.198,-1.158,-1.157,-1.036,-0.971,-0.912,-0.934],
38:[0.439,0.337,0.32,0.05,-0.354,-0.721,-1.248,-1.681,-1.935,-2.034,-2.109,-2.051,-1.731,-1.262,-0.836,-0.209,0.408,0.813,1.09,1.21,1.315,1.149,1.126,1.185,1.095,1.046,1.038,0.994,0.883,0.786,0.909,0.822,0.774,0.826,0.73,0.687,0.619,0.531,0.547,0.441,0.487,0.343,0.121,-0.238,-0.741,-1.16,-1.644,-1.953,-2.135,-2.097,-1.955,-1.746,-1.317,-0.814,-0.271,0.263,0.712,1.068,1.215,1.278],
39:[0.024,0.013,0.047,0.073,0.065,0.111,0.039,0.109,0.043,0.027,0.03,0.194,0.05,0.014,0.146,0.031,0.024,0.018,0.135,0.036,0.081,0.087,0.059,0.094,0.117,0.089,0.17,0.007,0.061,0.062,0.09,0.152,0.1,0.031,0.008,0.023,0.168,0.006,0.104,0.018,0.195,0.012,0.085,0.115,0.08,-0.023,0.139,0.017,-0.059,0.047,0.086,0.099,0.093,-0.025,0.036,0.076,0.074,0.101,0.07,0.126],
0:[0.88,0.856,0.855,0.794,0.734,0.699,0.535,0.447,0.09,-0.418,-1.05,-1.376,-1.967,-2.328,-2.453,-2.351,-2.288,-1.816,-1.128,-0.575,-0.015,0.734,1.201,1.469,1.446,1.59,1.511,1.382,1.421,1.317,1.31,1.309,1.243,1.175,1.129,1.13,1.009,0.878,0.988,0.929,0.941,0.803,0.778,0.755,0.644,0.571,0.423,0.092,-0.431,-0.967,-1.466,-1.593,-2.144,-2.375,-2.411,-2.244,-1.822,-1.262,-0.626,0.018],
}
BATCHES = [B1,B2,B3,B4,B5,B6,B7,B8]
app/data_slow_wave.py (15,296 chars)
# Slow-branch waveform library at u=0 (fresh draws), period ~81. stride 3, 162 ticks per batch (2 cycles).
S1 = {
4:[-0.783,-0.685,-0.349,0.776,2.19,2.493,1.262,-0.869,-1.5,-1.419,-1.269,-1.251,-0.93,-0.882,-0.743,-0.648,-0.513,-0.49,-0.522,-0.51,-0.512,-0.643,-0.552,-0.6,-0.541,-0.474,-0.664,-0.511,-0.554,-0.364,0.629,2.139,2.506,1.363,-0.573,-1.615,-1.451,-1.28,-1.193,-0.914,-0.819,-0.838,-0.592,-0.578,-0.506,-0.412,-0.537,-0.56,-0.578,-0.564,-0.648,-0.553,-0.539,-0.486],
0:[0.74,0.713,0.647,0.561,0.609,0.554,0.623,0.629,0.64,0.699,0.539,0.651,0.581,0.636,0.578,0.683,0.605,-0.25,-1.743,-2.435,-1.478,0.537,1.571,1.507,1.297,1.122,1.115,0.889,0.876,0.831,0.601,0.545,0.64,0.609,0.644,0.704,0.708,0.724,0.608,0.636,0.631,0.642,0.657,0.512,0.081,-1.375,-2.391,-1.722,0.107,1.442,1.498,1.371,1.298,1.102],
1:[-0.893,-0.861,-0.785,-0.766,-0.618,-0.738,-0.837,-0.831,-0.722,-0.848,-0.697,-0.686,-0.792,-0.773,-0.699,-0.855,-0.801,-0.764,0.404,2.331,2.022,0.603,-1.836,-1.649,-1.552,-1.451,-1.3,-1.146,-1.031,-0.873,-0.819,-0.711,-0.861,-0.755,-0.809,-0.828,-0.777,-0.756,-0.764,-0.752,-0.844,-0.712,-0.838,-0.802,-0.783,0.014,2.133,2.061,1.046,-1.637,-1.776,-1.578,-1.469,-1.277],
3:[-0.267,-0.123,-0.12,-0.087,0.202,0.887,1.176,0.877,0.074,-0.478,-0.512,-0.472,-0.351,-0.366,-0.354,-0.16,-0.169,-0.059,-0.075,-0.019,-0.143,-0.112,-0.104,-0.074,-0.206,-0.055,-0.148,-0.078,-0.074,-0.038,-0.058,0.049,0.727,1.136,0.954,0.183,-0.361,-0.574,-0.438,-0.337,-0.384,-0.269,-0.19,-0.109,-0.103,-0.002,-0.05,-0.222,-0.15,-0.209,-0.067,-0.094,-0.086,-0.119],
5:[-0.482,-0.394,-0.506,-0.39,-0.39,-0.047,0.767,1.523,1.294,0.177,-0.956,-1.032,-0.952,-0.878,-0.72,-0.695,-0.573,-0.554,-0.387,-0.386,-0.321,-0.307,-0.364,-0.471,-0.473,-0.372,-0.453,-0.334,-0.44,-0.434,-0.369,-0.292,-0.23,0.545,1.524,1.524,0.523,-0.748,-1.104,-0.886,-0.735,-0.751,-0.533,-0.532,-0.456,-0.435,-0.244,-0.35,-0.341,-0.271,-0.393,-0.452,-0.337,-0.342],
6:[-0.639,-0.629,-0.538,-0.526,-0.413,-0.53,-0.475,-0.498,-0.513,-0.509,-0.49,-0.511,-0.476,-0.538,-0.435,-0.522,-0.51,-0.447,0.388,1.32,1.168,0.193,-1.066,-1.097,-0.953,-0.931,-0.826,-0.796,-0.601,-0.528,-0.547,-0.447,-0.509,-0.479,-0.503,-0.52,-0.591,-0.483,-0.55,-0.499,-0.489,-0.52,-0.513,-0.505,-0.462,0.225,1.252,1.328,0.404,-0.836,-1.134,-1.022,-0.942,-0.856],
}
S2 = {
4:[-0.582,-0.509,-0.462,0.228,1.727,2.523,1.997,0.054,-1.49,-1.524,-1.41,-1.179,-1.153,-0.81,-0.735,-0.688,-0.547,-0.442,-0.468,-0.493,-0.634,-0.543,-0.586,-0.62,-0.543,-0.503,-0.461,-0.596,-0.589,-0.56,-0.215,1.193,2.4,2.334,0.708,-1.129,-1.52,-1.447,-1.222,-1.098,-0.917,-0.803,-0.78,-0.481,-0.573,-0.468,-0.435,-0.576,-0.539,-0.597,-0.598,-0.506,-0.479,-0.497],
7:[-0.753,-0.685,-0.585,-0.634,-0.713,-0.674,-0.653,-0.727,-0.67,-0.745,-0.688,-0.744,-0.726,-0.655,-0.676,-0.615,0.287,1.498,1.718,0.553,-1.032,-1.467,-1.305,-1.25,-1.086,-1.091,-0.877,-0.809,-0.687,-0.62,-0.667,-0.634,-0.693,-0.826,-0.702,-0.75,-0.662,-0.681,-0.613,-0.704,-0.663,-0.697,-0.691,-0.205,1.222,1.827,0.954,-0.63,-1.398,-1.4,-1.232,-1.236,-1.046,-0.971],
8:[-0.246,-0.26,-0.285,-0.363,-0.291,-0.325,-0.298,-0.281,-0.263,-0.352,-0.288,-0.269,-0.088,0.91,1.306,0.833,-0.066,-0.756,-0.82,-0.693,-0.629,-0.509,-0.509,-0.398,-0.414,-0.37,-0.295,-0.278,-0.265,-0.293,-0.33,-0.29,-0.316,-0.399,-0.307,-0.312,-0.232,-0.261,-0.321,-0.219,0.472,1.204,1.078,0.225,-0.691,-0.72,-0.691,-0.591,-0.537,-0.5,-0.454,-0.309,-0.281,-0.308],
9:[0.571,0.46,0.341,0.325,0.163,0.204,0.13,0.055,0.073,0.189,0.052,0.186,0.081,0.1,0.144,0.101,0.054,0.061,0.17,0.071,-0.002,-0.642,-1.28,-1.327,-0.563,0.398,0.508,0.561,0.436,0.367,0.382,0.341,0.168,0.2,0.076,0.134,0.089,0.056,0.054,0.158,0.22,0.078,0.157,0.097,0.087,0.042,0.139,0.1,-0.45,-1.156,-1.362,-0.854,0.2,0.706],
10:[-0.583,-0.544,-0.385,0.264,1.369,1.679,0.967,-0.438,-1.33,-1.214,-1.081,-0.982,-0.901,-0.793,-0.771,-0.587,-0.505,-0.503,-0.465,-0.478,-0.473,-0.546,-0.557,-0.543,-0.441,-0.464,-0.415,-0.418,-0.464,-0.444,0.046,0.998,1.673,1.389,0.056,-1.089,-1.287,-1.223,-1.06,-0.898,-0.799,-0.65,-0.666,-0.506,-0.443,-0.465,-0.542,-0.468,-0.453,-0.6,-0.491,-0.613,-0.559,-0.497],
11:[-0.731,-0.59,-0.503,-0.357,-0.288,-0.358,-0.284,-0.432,-0.27,-0.362,-0.385,-0.319,-0.343,-0.345,-0.335,-0.382,-0.351,-0.364,0.104,2.346,2.564,1.839,-0.982,-1.213,-1.108,-0.96,-0.888,-0.697,-0.645,-0.494,-0.369,-0.215,-0.35,-0.32,-0.289,-0.399,-0.381,-0.276,-0.386,-0.402,-0.423,-0.285,-0.341,-0.318,-0.355,-0.174,1.318,2.517,2.056,0.108,-1.246,-1.123,-1.03,-0.848],
}
S3 = {
4:[-0.581,-0.449,-0.538,-0.359,0.716,2.047,2.409,1.486,-0.628,-1.609,-1.441,-1.251,-1.181,-1.018,-0.857,-0.696,-0.638,-0.472,-0.448,-0.469,-0.546,-0.564,-0.568,-0.605,-0.544,-0.512,-0.551,-0.585,-0.483,-0.511,-0.505,0.284,1.744,2.496,1.886,0.012,-1.447,-1.473,-1.283,-1.251,-1.027,-0.876,-0.878,-0.633,-0.541,-0.612,-0.442,-0.533,-0.636,-0.657,-0.51,-0.55,-0.57,-0.555],
12:[-0.44,-0.319,-0.219,-0.261,-0.219,-0.227,-0.291,-0.168,-0.321,-0.265,-0.384,-0.29,-0.337,-0.35,-0.216,-0.213,-0.264,0.517,1.429,1.506,0.506,-0.664,-0.819,-0.764,-0.71,-0.675,-0.509,-0.392,-0.383,-0.326,-0.269,-0.216,-0.307,-0.245,-0.342,-0.293,-0.186,-0.229,-0.381,-0.263,-0.275,-0.253,-0.299,-0.279,0.216,1.148,1.589,0.905,-0.29,-0.829,-0.852,-0.687,-0.491,-0.507],
13:[-0.621,-0.386,-0.481,-0.445,-0.565,-0.47,-0.523,-0.561,-0.521,-0.463,-0.507,-0.435,-0.489,-0.518,-0.493,-0.475,0.107,0.87,0.915,0.248,-0.629,-0.877,-0.915,-0.795,-0.722,-0.519,-0.58,-0.642,-0.452,-0.465,-0.44,-0.423,-0.403,-0.412,-0.51,-0.46,-0.595,-0.441,-0.496,-0.412,-0.484,-0.566,-0.436,-0.188,0.506,0.942,0.593,-0.333,-0.838,-0.852,-0.86,-0.725,-0.718,-0.621],
14:[-0.725,-0.695,-0.755,-0.728,-0.812,-0.75,-0.729,-0.84,-0.647,-0.25,0.875,1.639,0.972,-0.438,-1.448,-1.312,-1.3,-1.309,-1.126,-1.047,-0.847,-0.852,-0.753,-0.654,-0.744,-0.764,-0.645,-0.671,-0.724,-0.758,-0.769,-0.741,-0.697,-0.788,-0.748,-0.725,-0.334,0.531,1.465,1.179,0.139,-1.323,-1.416,-1.32,-1.35,-1.055,-1.005,-0.917,-0.755,-0.802,-0.75,-0.679,-0.667,-0.712],
15:[0.661,0.606,0.575,0.551,0.52,0.572,0.547,0.552,0.621,0.59,0.503,0.595,0.582,0.608,0.594,0.485,0.439,0.129,-0.572,-0.788,-0.323,0.636,1.003,1.032,0.881,0.825,0.751,0.775,0.656,0.565,0.539,0.595,0.482,0.507,0.49,0.493,0.59,0.577,0.525,0.56,0.571,0.606,0.533,0.468,0.397,-0.289,-0.784,-0.521,0.366,0.905,1.022,0.813,0.792,0.698],
18:[0.811,0.743,0.593,0.57,0.443,0.536,0.497,0.534,0.586,0.658,0.565,0.553,0.489,0.63,0.583,0.534,0.469,-0.466,-1.998,-2.27,-1.014,0.844,1.471,1.308,1.152,1.155,0.96,0.822,0.768,0.577,0.566,0.466,0.564,0.608,0.587,0.6,0.635,0.547,0.627,0.547,0.56,0.506,0.541,0.551,-0.038,-1.654,-2.293,-1.635,0.276,1.496,1.54,1.258,1.121,1.049],
}
S4 = {
4:[-0.491,-0.581,-0.549,-0.516,-0.104,1.244,2.383,2.348,0.688,-1.128,-1.535,-1.496,-1.216,-1.139,-0.958,-0.82,-0.643,-0.639,-0.535,-0.503,-0.51,-0.47,-0.616,-0.443,-0.471,-0.55,-0.506,-0.523,-0.491,-0.591,-0.604,-0.309,0.694,2.128,2.387,1.383,-0.612,-1.48,-1.516,-1.3,-1.132,-1.03,-0.879,-0.76,-0.691,-0.535,-0.469,-0.445,-0.516,-0.512,-0.682,-0.505,-0.582,-0.556],
19:[-0.338,-0.291,-0.25,-0.193,-0.288,-0.322,-0.175,0.519,1.215,1.325,0.464,-0.551,-0.977,-0.739,-0.78,-0.662,-0.485,-0.423,-0.386,-0.299,-0.277,-0.291,-0.245,-0.329,-0.276,-0.273,-0.31,-0.315,-0.253,-0.384,-0.293,-0.339,-0.316,-0.325,0.147,1.116,1.382,0.857,-0.27,-0.763,-0.738,-0.755,-0.594,-0.6,-0.471,-0.449,-0.213,-0.251,-0.29,-0.241,-0.326,-0.257,-0.325,-0.277],
20:[0.873,0.697,0.58,0.611,0.635,0.627,0.521,0.609,0.603,0.649,0.594,0.605,0.641,0.577,0.651,0.672,0.502,0.365,-1.04,-1.971,-1.548,-0.009,1.337,1.373,1.299,1.076,1.03,0.871,0.746,0.746,0.46,0.477,0.559,0.544,0.565,0.638,0.633,0.635,0.658,0.583,0.684,0.59,0.547,0.567,0.449,-0.583,-1.799,-1.824,-0.51,1.005,1.361,1.311,1.183,0.995],
21:[-0.677,-0.465,-0.411,-0.341,-0.479,-0.42,-0.483,-0.48,-0.356,-0.459,-0.426,-0.4,-0.517,-0.329,-0.452,-0.43,-0.346,0.271,1.356,1.435,0.725,-0.515,-1.105,-1.072,-0.862,-0.864,-0.754,-0.584,-0.48,-0.5,-0.418,-0.384,-0.43,-0.47,-0.511,-0.523,-0.473,-0.516,-0.379,-0.527,-0.332,-0.398,-0.424,-0.414,0.003,1.036,1.529,1.181,-0.379,-1.063,-1.023,-1.018,-0.845,-0.726],
22:[-0.472,-0.374,-0.276,-0.279,-0.362,-0.353,-0.34,-0.433,-0.322,-0.385,-0.374,-0.359,-0.37,-0.389,-0.32,0.317,1.368,1.825,1.138,-0.335,-1.081,-0.968,-0.888,-0.864,-0.789,-0.598,-0.515,-0.451,-0.373,-0.398,-0.355,-0.39,-0.526,-0.302,-0.335,-0.335,-0.346,-0.449,-0.388,-0.391,-0.411,-0.349,-0.082,1.148,1.836,1.489,0.116,-1.065,-1.03,-0.918,-0.724,-0.672,-0.611,-0.499],
23:[0.165,0.259,0.263,0.28,0.174,0.236,0.22,0.17,0.221,0.2,0.17,-0.486,-1.114,-1.194,-0.328,0.596,0.701,0.632,0.61,0.455,0.396,0.56,0.341,0.276,0.285,0.196,0.203,0.181,0.241,0.237,0.29,0.23,0.264,0.312,0.263,0.218,0.191,0.076,-0.241,-1.072,-1.23,-0.697,0.326,0.734,0.552,0.622,0.59,0.408,0.38,0.247,0.197,0.172,0.259,0.329],
}
S5 = {
4:[-0.524,-0.471,-0.547,-0.572,-0.501,0.243,1.709,2.474,1.935,-0.062,-1.482,-1.47,-1.401,-1.226,-1.045,-0.983,-0.845,-0.703,-0.618,-0.462,-0.462,-0.58,-0.596,-0.569,-0.509,-0.624,-0.503,-0.507,-0.571,-0.594,-0.65,-0.494,-0.258,1.122,2.396,2.334,0.737,-1.218,-1.583,-1.385,-1.26,-1.086,-1.003,-0.839,-0.656,-0.706,-0.571,-0.5,-0.468,-0.518,-0.592,-0.626,-0.431,-0.577],
24:[-0.419,-0.367,-0.325,-0.285,-0.427,-0.38,-0.387,-0.345,-0.387,-0.445,-0.354,-0.303,-0.318,-0.298,-0.013,1.191,2.028,1.627,0.222,-1.095,-1.041,-0.988,-0.865,-0.801,-0.575,-0.541,-0.512,-0.464,-0.335,-0.348,-0.377,-0.35,-0.447,-0.466,-0.518,-0.423,-0.432,-0.351,-0.334,-0.44,-0.275,-0.291,0.645,1.894,1.896,0.685,-0.783,-1.165,-0.979,-0.897,-0.888,-0.76,-0.655,-0.524],
25:[0.066,0.19,0.113,0.16,0.1,0.078,0.207,0.161,0.023,0.158,0.147,0.026,-0.688,-1.581,-1.538,-0.67,0.465,0.704,0.674,0.547,0.474,0.328,0.283,0.155,0.217,0.121,0.055,0.091,0.09,-0.045,0.146,0.07,0.082,0.094,0.108,0.078,0.051,0.096,0.025,-0.501,-1.437,-1.714,-1.104,0.201,0.648,0.565,0.54,0.468,0.423,0.297,0.26,0.107,0.067,0.089],
26:[0.313,0.301,0.293,0.29,0.239,0.18,0.21,0.227,0.36,-0.05,-1.263,-2.548,-2.554,-0.921,0.969,1.243,1.064,1.074,0.804,0.783,0.561,0.426,0.347,0.126,0.162,0.267,0.211,0.418,0.294,0.283,0.375,0.235,0.303,0.211,0.33,0.34,0.104,-0.774,-2.225,-2.664,-1.572,0.345,1.191,1.207,1.024,0.792,0.632,0.522,0.46,0.337,0.251,0.179,0.225,0.154],
27:[-1.457,-1.369,-1.145,-1.083,-1.013,-0.839,-0.842,-0.793,-0.637,-0.734,-0.724,-0.65,-0.763,-0.842,-0.773,-0.683,-0.658,-0.69,-0.762,-0.796,-0.708,-0.237,1.112,1.829,1.308,-0.434,-1.594,-1.501,-1.417,-1.209,-1.097,-1.011,-1.026,-0.793,-0.769,-0.707,-0.67,-0.763,-0.667,-0.61,-0.777,-0.758,-0.715,-0.7,-0.69,-0.756,-0.735,-0.748,-0.525,0.591,1.837,1.573,0.228,-1.267],
28:[0.672,0.573,0.489,0.543,0.323,0.382,0.379,0.369,0.409,0.454,0.421,0.431,0.449,0.331,0.373,0.324,0.321,0.362,0.258,-0.289,-1.3,-1.488,-0.625,0.698,0.969,0.929,0.816,0.675,0.614,0.466,0.478,0.385,0.469,0.277,0.374,0.311,0.358,0.363,0.313,0.352,0.382,0.372,0.408,0.414,0.337,0.382,-0.03,-1.111,-1.613,-1.074,0.235,0.943,0.89,0.874],
}
S6 = {
4:[-0.449,-0.564,-0.533,-0.571,-0.535,-0.463,0.67,2.108,2.448,1.462,-0.611,-1.564,-1.511,-1.3,-1.158,-1.074,-0.903,-0.724,-0.6,-0.488,-0.526,-0.558,-0.579,-0.521,-0.512,-0.571,-0.405,-0.503,-0.579,-0.535,-0.539,-0.545,-0.512,0.198,1.75,2.489,2.001,-0.002,-1.478,-1.535,-1.248,-1.288,-1.07,-1.003,-0.702,-0.663,-0.512,-0.5,-0.548,-0.49,-0.546,-0.572,-0.634,-0.564],
29:[0.433,0.408,0.371,0.368,0.106,0.185,0.252,0.238,0.259,0.248,0.205,0.27,0.165,0.17,0.187,0.23,0.274,0.231,-0.163,-1.023,-1.583,-1.238,0.016,0.686,0.745,0.637,0.504,0.431,0.422,0.397,0.372,0.191,0.257,0.169,0.22,0.252,0.145,0.16,0.168,0.204,0.255,0.213,0.219,0.281,0.223,-0.024,-0.838,-1.465,-1.351,-0.415,0.701,0.756,0.709,0.642],
30:[-0.561,-0.484,-0.552,-0.499,-0.637,-0.565,-0.36,0.662,1.785,1.899,0.778,-0.894,-1.426,-1.302,-1.151,-0.97,-0.912,-0.799,-0.665,-0.546,-0.55,-0.489,-0.549,-0.655,-0.533,-0.613,-0.63,-0.57,-0.588,-0.614,-0.572,-0.588,-0.519,-0.451,0.258,1.475,2.097,1.282,-0.333,-1.396,-1.333,-1.197,-1.147,-0.983,-0.785,-0.76,-0.588,-0.572,-0.411,-0.533,-0.602,-0.597,-0.59,-0.697],
31:[-0.459,-0.447,-0.422,-0.474,-0.305,-0.413,-0.329,-0.319,-0.45,0.125,0.801,0.843,0.251,-0.596,-0.902,-0.769,-0.775,-0.663,-0.634,-0.547,-0.502,-0.445,-0.48,-0.474,-0.396,-0.277,-0.397,-0.431,-0.49,-0.408,-0.379,-0.445,-0.37,-0.441,-0.364,-0.37,0.039,0.634,0.869,0.486,-0.324,-0.835,-0.758,-0.752,-0.687,-0.578,-0.557,-0.499,-0.482,-0.453,-0.386,-0.409,-0.464,-0.33],
32:[0.295,0.29,0.22,0.255,0.136,0.195,0.108,0.196,0.194,0.267,0.252,0.308,0.25,0.198,0.252,0.206,0.138,0.022,-0.493,-1.063,-1.047,-0.247,0.635,0.619,0.539,0.549,0.468,0.445,0.343,0.264,0.191,0.305,0.185,0.291,0.232,0.219,0.131,0.297,0.291,0.238,0.262,0.252,0.225,0.191,0.142,-0.326,-0.866,-1.129,-0.509,0.388,0.703,0.703,0.567,0.414],
33:[0.656,0.689,0.542,0.628,0.566,0.51,0.581,0.556,0.642,0.597,0.572,0.502,0.651,0.705,0.615,0.321,-0.744,-1.785,-1.384,-0.077,1.212,1.309,1.287,1.129,1.096,0.915,0.79,0.768,0.556,0.596,0.564,0.632,0.65,0.541,0.587,0.629,0.645,0.611,0.634,0.53,0.659,0.567,0.58,-0.409,-1.478,-1.591,-0.606,0.972,1.244,1.283,1.153,1.096,0.923,0.739],
}
S7 = {
4:[-0.488,-0.583,-0.517,-0.517,-0.477,-0.501,-0.129,1.168,2.369,2.329,0.669,-1.155,-1.566,-1.337,-1.293,-1.045,-0.946,-0.911,-0.702,-0.512,-0.553,-0.525,-0.388,-0.541,-0.657,-0.588,-0.601,-0.518,-0.504,-0.503,-0.6,-0.55,-0.528,-0.34,0.606,2.1,2.479,1.402,-0.622,-1.572,-1.49,-1.307,-1.128,-0.989,-0.899,-0.771,-0.641,-0.599,-0.546,-0.569,-0.443,-0.66,-0.682,-0.6],
34:[0.304,0.259,0.248,0.227,0.282,0.244,0.223,-0.275,-1.443,-2.091,-1.458,-0.009,0.956,1.05,0.9,0.796,0.706,0.556,0.523,0.373,0.308,0.253,0.255,0.192,0.285,0.327,0.255,0.325,0.367,0.255,0.277,0.263,0.279,0.176,-0.221,-1.058,-1.954,-1.846,-0.496,0.784,0.979,0.975,0.825,0.632,0.565,0.512,0.438,0.365,0.167,0.195,0.295,0.289,0.363,0.373],
35:[-0.614,-0.527,-0.481,-0.525,-0.467,-0.451,-0.27,-0.353,-0.35,-0.289,-0.311,-0.309,-0.365,-0.277,-0.352,-0.29,-0.273,-0.367,-0.297,-0.356,-0.359,0.132,0.854,1.256,0.616,-0.348,-0.821,-0.785,-0.654,-0.615,-0.554,-0.444,-0.452,-0.365,-0.376,-0.326,-0.203,-0.332,-0.308,-0.319,-0.403,-0.253,-0.234,-0.287,-0.313,-0.298,-0.338,-0.296,-0.073,0.63,1.144,0.889,-0.213,-0.832],
36:[-0.562,-0.521,-0.535,-0.564,-0.574,-0.431,-0.516,-0.532,-0.566,-0.603,-0.553,-0.568,-0.529,-0.493,0.337,1.411,1.816,0.782,-0.646,-1.252,-1.194,-1.043,-0.941,-0.872,-0.861,-0.623,-0.545,-0.552,-0.504,-0.503,-0.507,-0.536,-0.47,-0.571,-0.521,-0.561,-0.655,-0.495,-0.567,-0.5,-0.561,-0.017,1.002,1.712,1.195,-0.203,-1.181,-1.11,-1.132,-1.186,-0.939,-0.83,-0.701,-0.604],
37:[-0.716,-0.779,-0.748,-0.674,-0.65,-0.715,-0.689,-0.564,0.447,1.828,2.221,1.132,-0.834,-1.745,-1.517,-1.464,-1.271,-1.039,-0.997,-0.847,-0.763,-0.628,-0.595,-0.707,-0.741,-0.7,-0.718,-0.69,-0.74,-0.653,-0.771,-0.782,-0.7,-0.712,-0.585,-0.085,1.403,2.29,1.638,-0.196,-1.565,-1.687,-1.477,-1.392,-1.236,-1.127,-0.906,-0.84,-0.663,-0.651,-0.645,-0.634,-0.722,-0.858],
38:[1.036,0.908,0.766,0.676,0.573,0.435,0.4,0.321,0.429,0.306,0.447,0.399,0.364,0.445,0.342,0.333,0.483,0.405,0.39,0.321,-0.022,-1.091,-1.994,-1.799,-0.203,1.09,1.087,1.101,0.864,0.778,0.849,0.562,0.531,0.456,0.432,0.367,0.299,0.348,0.446,0.434,0.469,0.396,0.485,0.454,0.354,0.413,0.414,0.305,-0.748,-1.858,-1.968,-0.575,0.801,1.275],
}
SBATCH = [S1,S2,S3,S4,S5,S6,S7]
# dead channels: 2 (~0.177), 16 (~-0.085), 17 (~0.126), 39 (~0.071); sd ~0.045
app/predict.py (3,431 chars)
import numpy as np, json
Tf = np.load('/app/templates_fast.npy') # 40 x 39, aligned: bin0 = ch4 spike peak
Ts = np.load('/app/templates_slow.npy') # 36 x 81, aligned: bin0 = ch4 spike peak
fast_ch = sorted([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])
slow_ch = [0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]
Tfd = {c:Tf[i] for i,c in enumerate(fast_ch)}
Tsd = {c:Ts[i] for i,c in enumerate(slow_ch)}
rng = np.random.default_rng(0)
def window_mean(ch, peaks, P, tpl, wa, wb):
# evaluate template-based signal mean over window [wa,wb) given spike peak times
ts = np.arange(wa, wb) + 0.5
# phase rel. to most recent peak
peaks = np.asarray(peaks)
vals = np.empty(len(ts))
B = len(tpl)
for j,t in enumerate(ts):
prev = peaks[peaks<=t]
ph = (t - (prev[-1] if len(prev) else peaks[0]-P)) / P * B
vals[j] = np.interp(ph % B, np.arange(B), tpl, period=B)
return vals.mean()
def upcross_time(tpl):
# time (bins) after peak where signal crosses its mean upward with steepest slope
B=len(tpl); m=tpl.mean(); best=None
for i in range(B):
a,b = tpl[i], tpl[(i+1)%B]
if a<m<=b:
if best is None or (b-a)>best[1]: best=((i+ (m-a)/(b-a)), b-a)
return best[0]
def count_cross(ch, peaks, P, tpl, wa, wb, off_sys):
B=len(tpl); oc = upcross_time(tpl)*P/B + off_sys
times = np.asarray(peaks)+oc
return np.sum((times>=wa)&(times<wb))
def slow_peaks(Tend, T0m, Ps, jit, r):
t=[T0m + r.normal(0,1.5)]
while t[-1] < Tend+100: t.append(t[-1]+Ps+r.normal(0,jit))
return t
def driven_peaks(Tend, T0m, I1, Pf, jit, r):
t=[T0m + r.normal(0,1.5)]
t.append(t[-1]+I1+r.normal(0,3))
# second interval slightly长 ~ (Pf+3)
t.append(t[-1]+Pf+2+r.normal(0,jit))
while t[-1]<Tend+100: t.append(t[-1]+Pf+r.normal(0,jit))
return t
def run_contract(kind, ch, Tend, stat, nsys=400, ndraw=120):
truths=[]
for s in range(nsys):
# systematics
T0m = 15 + rng.normal(0,1.2)
Ps = 81 + rng.normal(0,0.8)
I1 = 58 + rng.normal(0,4)
Pf = 39.7 + rng.normal(0,0.8)
off = rng.normal(0,3) # crossing-threshold definition offset
terr= rng.normal(0,0.04) # template mean error
vals=[]
for d in range(ndraw):
if kind=='slow':
pk = slow_peaks(Tend,T0m,Ps,1.5,rng); P=Ps; tpl=Tsd[ch]
else:
pk = driven_peaks(Tend,T0m,I1,Pf,1.2,rng); P=Pf; tpl=Tfd[ch]
if stat=='mean':
vals.append(window_mean(ch,pk,P,tpl,Tend-20,Tend)+terr)
else:
vals.append(count_cross(ch,pk,P,tpl,Tend-20,Tend,off))
truths.append(np.mean(vals))
truths=np.array(truths)
return dict(mean=float(np.median(truths)), lo=float(np.quantile(truths,0.04)),
hi=float(np.quantile(truths,0.96)), sd=float(truths.std()))
CONTRACTS = [
(0,'slow',0,306,'mean'), (1,'slow',36,337,'rate'), (2,'slow',34,332,'mean'),
(3,'slow',3,288,'rate'), (4,'driven',6,367,'mean'), (5,'driven',14,392,'rate'),
(6,'driven',24,420,'mean'), (7,'driven',0,384,'rate'),
]
for cid,kind,ch,Tend,stat in CONTRACTS:
r=run_contract(kind,ch,Tend,stat)
print(cid, kind, 'ch',ch, stat, 'Tend',Tend, '->', {k:round(v,3) for k,v in r.items()})
app/predict_pulse.py (3,554 chars)
import numpy as np
Ts = np.load('/app/templates_slow.npy')
slow_ch = [0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]
Tsd = {c:Ts[i] for i,c in enumerate(slow_ch)}
rng = np.random.default_rng(1)
def upcross_time(tpl):
B=len(tpl); m=tpl.mean(); best=None
for i in range(B):
a,b=tpl[i],tpl[(i+1)%B]
if a<m<=b:
if best is None or (b-a)>best[1]: best=((i+(m-a)/(b-a)),b-a)
return best[0]
# pulse schedule per contract: list of (start, len) with amplitude 1.0 (any port - same effect)
def sched_regular(plen, gap, n):
s=[]; t=0
for i in range(n): s.append((t,plen)); t+=plen+gap
return s
CON = {
8: dict(ch=24, stat='mean', Tend=539, pulses=sched_regular(8,64,5)),
9: dict(ch=30, stat='rate', Tend=489, pulses=sched_regular(8,36,8)),
10: dict(ch=25, stat='mean', Tend=546, pulses=sched_regular(8,43,7)),
11: dict(ch=36, stat='rate', Tend=460, pulses=sched_regular(8,48,6)),
12: dict(ch=23, stat='mean', Tend=420, pulses=[(0,10),(80,10),(110,10),(160,10),(220,10),(240,10),(320,10),(330,10),(400,10)]),
13: dict(ch=3, stat='rate', Tend=420, pulses=[(0,10),(60,10),(110,10),(120,10),(180,10),(240,10),(300,10),(320,10),(360,10)]),
14: dict(ch=13, stat='mean', Tend=420, pulses=[(0,10),(90,10),(180,10),(220,10),(270,10),(290,10),(360,10)]),
15: dict(ch=9, stat='rate', Tend=420, pulses=[(0,10),(70,10),(90,10),(130,10),(180,10),(200,10),(260,10),(330,10),(350,10),(390,10)]),
}
def simulate(pulses, Tend, T0m, Ps, tau_c, tau_d, floor_k, jit, r):
"""tick-by-tick phase integration; returns spike peak times."""
# initial condition: first spike would be at T0 under no drive -> phase0 = (Ps-T0)/Ps
T0 = T0m + r.normal(0,1.5)
phase = (Ps-T0)/Ps
rr = 0.0; floor=0.0
pk=[]
pset = np.zeros(Tend+1)
for (s,l) in pulses: pset[s:s+l]=1
for t in range(Tend):
if pset[t]:
rr += (1-rr)/tau_c
floor = min(0.55, floor + floor_k)
else:
rr = floor + (rr-floor)*np.exp(-1/tau_d)
P = Ps - (Ps-39.7)*min(rr,1.0)
phase += 1.0/P
if phase >= 1.0:
phase -= 1.0
pk.append(t + r.normal(0,jit))
return pk
def window_stat(ch, pk, wa, wb, stat, off_sys, Ps):
tpl = Tsd[ch]; B=81
base = tpl[50:76].mean()
if stat=='rate':
oc = upcross_time(tpl) + off_sys
times = np.asarray(pk)+oc
return np.sum((times>=wa)&(times<wb))
ts = np.arange(wa,wb)+0.5
vals=[]
for t in ts:
prev=[p for p in pk if p<=t]
if prev:
d=t-prev[-1]
vals.append(np.interp(d,np.arange(B),tpl) if d<45 else base)
else: vals.append(base)
return np.mean(vals)
for cid,c in CON.items():
truths=[]
for s in range(300):
T0m=15+rng.normal(0,1.2); Ps=81+rng.normal(0,0.8)
tau_c=25*np.exp(rng.normal(0,0.3)); tau_d=60*np.exp(rng.normal(0,0.4))
floor_k=0.006*np.exp(rng.normal(0,0.6))
off=rng.normal(0,3); terr=rng.normal(0,0.04)
vals=[]
for d in range(60):
pk=simulate(c['pulses'],c['Tend'],T0m,Ps,tau_c,tau_d,floor_k,2.0,rng)
v=window_stat(c['ch'],pk,c['Tend']-20,c['Tend'],c['stat'],off,Ps)
vals.append(v+(terr if c['stat']=='mean' else 0))
truths.append(np.mean(vals))
truths=np.array(truths)
print(cid,'ch',c['ch'],c['stat'],'->','med %.3f lo %.3f hi %.3f sd %.3f'%(
np.median(truths),np.quantile(truths,0.04),np.quantile(truths,0.96),truths.std()))
app/stats_fast.json (6,483 chars)
{
"0": {
"tavg": 0.268,
"lo20": -0.644,
"hi20": 1.205,
"sd_cycle": 1.274,
"sd20lo": 0.233,
"sd20hi": 1.592,
"amp": 3.98,
"pk": 1.565,
"tr": -2.415,
"argpk": 26
},
"1": {
"tavg": -0.467,
"lo20": -1.379,
"hi20": 0.42,
"sd_cycle": 1.23,
"sd20lo": 0.234,
"sd20hi": 1.535,
"amp": 3.848,
"pk": 2.067,
"tr": -1.781,
"argpk": 1
},
"2": {
"tavg": 0.177,
"lo20": 0.165,
"hi20": 0.186,
"sd_cycle": 0.04,
"sd20lo": 0.027,
"sd20hi": 0.049,
"amp": 0.176,
"pk": 0.29,
"tr": 0.114,
"argpk": 33
},
"3": {
"tavg": 0.05,
"lo20": -0.346,
"hi20": 0.435,
"sd_cycle": 0.527,
"sd20lo": 0.113,
"sd20hi": 0.657,
"amp": 1.671,
"pk": 1.141,
"tr": -0.53,
"argpk": 2
},
"4": {
"tavg": -0.206,
"lo20": -1.183,
"hi20": 0.741,
"sd_cycle": 1.326,
"sd20lo": 0.238,
"sd20hi": 1.661,
"amp": 4.103,
"pk": 2.563,
"tr": -1.54,
"argpk": 0
},
"5": {
"tavg": -0.161,
"lo20": -0.806,
"hi20": 0.461,
"sd_cycle": 0.874,
"sd20lo": 0.16,
"sd20hi": 1.094,
"amp": 2.822,
"pk": 1.749,
"tr": -1.073,
"argpk": 3
},
"6": {
"tavg": -0.3,
"lo20": -0.894,
"hi20": 0.277,
"sd_cycle": 0.818,
"sd20lo": 0.143,
"sd20hi": 1.023,
"amp": 2.583,
"pk": 1.446,
"tr": -1.137,
"argpk": 38
},
"7": {
"tavg": -0.419,
"lo20": -1.176,
"hi20": 0.316,
"sd_cycle": 1.043,
"sd20lo": 0.202,
"sd20hi": 1.312,
"amp": 3.303,
"pk": 1.801,
"tr": -1.502,
"argpk": 25
},
"8": {
"tavg": -0.136,
"lo20": -0.642,
"hi20": 0.352,
"sd_cycle": 0.682,
"sd20lo": 0.115,
"sd20hi": 0.851,
"amp": 2.178,
"pk": 1.346,
"tr": -0.832,
"argpk": 28
},
"9": {
"tavg": -0.058,
"lo20": -0.519,
"hi20": 0.419,
"sd_cycle": 0.652,
"sd20lo": 0.134,
"sd20hi": 0.819,
"amp": 2.114,
"pk": 0.641,
"tr": -1.473,
"argpk": 29
},
"10": {
"tavg": -0.276,
"lo20": -0.992,
"hi20": 0.417,
"sd_cycle": 0.95,
"sd20lo": 0.163,
"sd20hi": 1.177,
"amp": 2.959,
"pk": 1.72,
"tr": -1.238,
"argpk": 37
},
"11": {
"tavg": -0.064,
"lo20": -0.912,
"hi20": 0.76,
"sd_cycle": 1.155,
"sd20lo": 0.219,
"sd20hi": 1.447,
"amp": 3.586,
"pk": 2.315,
"tr": -1.271,
"argpk": 4
},
"12": {
"tavg": -0.069,
"lo20": -0.632,
"hi20": 0.477,
"sd_cycle": 0.769,
"sd20lo": 0.147,
"sd20hi": 0.966,
"amp": 2.437,
"pk": 1.538,
"tr": -0.899,
"argpk": 33
},
"13": {
"tavg": -0.319,
"lo20": -0.759,
"hi20": 0.109,
"sd_cycle": 0.608,
"sd20lo": 0.13,
"sd20hi": 0.77,
"amp": 1.926,
"pk": 0.96,
"tr": -0.966,
"argpk": 16
},
"14": {
"tavg": -0.485,
"lo20": -1.193,
"hi20": 0.2,
"sd_cycle": 0.919,
"sd20lo": 0.177,
"sd20hi": 1.139,
"amp": 2.866,
"pk": 1.41,
"tr": -1.456,
"argpk": 21
},
"15": {
"tavg": 0.423,
"lo20": 0.001,
"hi20": 0.86,
"sd_cycle": 0.593,
"sd20lo": 0.11,
"sd20hi": 0.743,
"amp": 1.889,
"pk": 1.033,
"tr": -0.856,
"argpk": 36
},
"16": {
"tavg": -0.085,
"lo20": -0.099,
"hi20": -0.072,
"sd_cycle": 0.041,
"sd20lo": 0.028,
"sd20hi": 0.05,
"amp": 0.17,
"pk": -0.003,
"tr": -0.173,
"argpk": 19
},
"17": {
"tavg": 0.126,
"lo20": 0.113,
"hi20": 0.141,
"sd_cycle": 0.048,
"sd20lo": 0.034,
"sd20hi": 0.055,
"amp": 0.22,
"pk": 0.226,
"tr": 0.006,
"argpk": 30
},
"18": {
"tavg": 0.231,
"lo20": -0.667,
"hi20": 1.157,
"sd_cycle": 1.27,
"sd20lo": 0.247,
"sd20hi": 1.592,
"amp": 3.989,
"pk": 1.531,
"tr": -2.458,
"argpk": 36
},
"19": {
"tavg": -0.107,
"lo20": -0.614,
"hi20": 0.385,
"sd_cycle": 0.67,
"sd20lo": 0.122,
"sd20hi": 0.832,
"amp": 2.071,
"pk": 1.279,
"tr": -0.791,
"argpk": 1
},
"20": {
"tavg": 0.331,
"lo20": -0.445,
"hi20": 1.13,
"sd_cycle": 1.086,
"sd20lo": 0.21,
"sd20hi": 1.355,
"amp": 3.389,
"pk": 1.435,
"tr": -1.954,
"argpk": 5
},
"21": {
"tavg": -0.212,
"lo20": -0.852,
"hi20": 0.41,
"sd_cycle": 0.857,
"sd20lo": 0.178,
"sd20hi": 1.079,
"amp": 2.704,
"pk": 1.586,
"tr": -1.118,
"argpk": 24
},
"22": {
"tavg": -0.119,
"lo20": -0.827,
"hi20": 0.569,
"sd_cycle": 0.962,
"sd20lo": 0.189,
"sd20hi": 1.209,
"amp": 3.045,
"pk": 1.895,
"tr": -1.15,
"argpk": 31
},
"23": {
"tavg": 0.079,
"lo20": -0.36,
"hi20": 0.53,
"sd_cycle": 0.596,
"sd20lo": 0.122,
"sd20hi": 0.743,
"amp": 1.875,
"pk": 0.728,
"tr": -1.147,
"argpk": 31
},
"24": {
"tavg": -0.111,
"lo20": -0.872,
"hi20": 0.624,
"sd_cycle": 1.025,
"sd20lo": 0.203,
"sd20hi": 1.287,
"amp": 3.266,
"pk": 2.032,
"tr": -1.234,
"argpk": 23
},
"25": {
"tavg": -0.088,
"lo20": -0.654,
"hi20": 0.495,
"sd_cycle": 0.789,
"sd20lo": 0.152,
"sd20hi": 0.986,
"amp": 2.418,
"pk": 0.732,
"tr": -1.686,
"argpk": 14
},
"26": {
"tavg": -0.067,
"lo20": -1.004,
"hi20": 0.895,
"sd_cycle": 1.271,
"sd20lo": 0.253,
"sd20hi": 1.58,
"amp": 3.984,
"pk": 1.265,
"tr": -2.719,
"argpk": 21
},
"27": {
"tavg": -0.457,
"lo20": -1.305,
"hi20": 0.367,
"sd_cycle": 1.159,
"sd20lo": 0.227,
"sd20hi": 1.467,
"amp": 3.683,
"pk": 1.986,
"tr": -1.697,
"argpk": 26
},
"28": {
"tavg": 0.138,
"lo20": -0.454,
"hi20": 0.746,
"sd_cycle": 0.836,
"sd20lo": 0.141,
"sd20hi": 1.046,
"amp": 2.643,
"pk": 0.984,
"tr": -1.659,
"argpk": 9
},
"29": {
"tavg": 0.021,
"lo20": -0.517,
"hi20": 0.578,
"sd_cycle": 0.755,
"sd20lo": 0.147,
"sd20hi": 0.954,
"amp": 2.378,
"pk": 0.827,
"tr": -1.551,
"argpk": 24
},
"30": {
"tavg": -0.317,
"lo20": -1.147,
"hi20": 0.488,
"sd_cycle": 1.104,
"sd20lo": 0.207,
"sd20hi": 1.376,
"amp": 3.457,
"pk": 1.981,
"tr": -1.476,
"argpk": 9
},
"31": {
"tavg": -0.278,
"lo20": -0.686,
"hi20": 0.119,
"sd_cycle": 0.557,
"sd20lo": 0.107,
"sd20hi": 0.691,
"amp": 1.757,
"pk": 0.892,
"tr": -0.865,
"argpk": 35
},
"32": {
"tavg": 0.075,
"lo20": -0.344,
"hi20": 0.507,
"sd_cycle": 0.583,
"sd20lo": 0.109,
"sd20hi": 0.727,
"amp": 1.869,
"pk": 0.726,
"tr": -1.143,
"argpk": 4
},
"33": {
"tavg": 0.355,
"lo20": -0.363,
"hi20": 1.095,
"sd_cycle": 1.009,
"sd20lo": 0.193,
"sd20hi": 1.267,
"amp": 3.202,
"pk": 1.385,
"tr": -1.817,
"argpk": 29
},
"34": {
"tavg": 0.005,
"lo20": -0.737,
"hi20": 0.768,
"sd_cycle": 1.046,
"sd20lo": 0.199,
"sd20hi": 1.307,
"amp": 3.264,
"pk": 1.049,
"tr": -2.215,
"argpk": 16
},
"35": {
"tavg": -0.155,
"lo20": -0.633,
"hi20": 0.309,
"sd_cycle": 0.643,
"sd20lo": 0.129,
"sd20hi": 0.801,
"amp": 2.085,
"pk": 1.203,
"tr": -0.882,
"argpk": 38
},
"36": {
"tavg": -0.287,
"lo20": -0.998,
"hi20": 0.4,
"sd_cycle": 0.974,
"sd20lo": 0.18,
"sd20hi": 1.219,
"amp": 3.034,
"pk": 1.75,
"tr": -1.284,
"argpk": 9
},
"37": {
"tavg": -0.362,
"lo20": -1.321,
"hi20": 0.569,
"sd_cycle": 1.277,
"sd20lo": 0.237,
"sd20hi": 1.586,
"amp": 3.921,
"pk": 2.287,
"tr": -1.635,
"argpk": 33
},
"38": {
"tavg": 0.143,
"lo20": -0.641,
"hi20": 0.951,
"sd_cycle": 1.086,
"sd20lo": 0.191,
"sd20hi": 1.356,
"amp": 3.399,
"pk": 1.296,
"tr": -2.103,
"argpk": 21
},
"39": {
"tavg": 0.071,
"lo20": 0.059,
"hi20": 0.082,
"sd_cycle": 0.046,
"sd20lo": 0.037,
"sd20hi": 0.054,
"amp": 0.186,
"pk": 0.17,
"tr": -0.016,
"argpk": 27
}
}
app/stats_slow.json (4,944 chars)
{
"0": {
"tavg": 0.459,
"lo20": -0.633,
"hi20": 1.181,
"sd_cycle": 0.864,
"sd200lo": 0.781,
"sd200hi": 0.948,
"pk": 1.506,
"tr": -2.413
},
"1": {
"tavg": -0.625,
"lo20": -1.37,
"hi20": 0.432,
"sd_cycle": 0.886,
"sd200lo": 0.8,
"sd200hi": 0.974,
"pk": 2.232,
"tr": -1.736
},
"3": {
"tavg": -0.041,
"lo20": -0.376,
"hi20": 0.442,
"sd_cycle": 0.376,
"sd200lo": 0.34,
"sd200hi": 0.413,
"pk": 1.156,
"tr": -0.543
},
"4": {
"tavg": -0.375,
"lo20": -1.172,
"hi20": 0.794,
"sd_cycle": 0.905,
"sd200lo": 0.817,
"sd200hi": 0.994,
"pk": 2.412,
"tr": -1.497
},
"5": {
"tavg": -0.282,
"lo20": -0.789,
"hi20": 0.461,
"sd_cycle": 0.579,
"sd200lo": 0.523,
"sd200hi": 0.636,
"pk": 1.523,
"tr": -1.068
},
"6": {
"tavg": -0.41,
"lo20": -0.876,
"hi20": 0.254,
"sd_cycle": 0.541,
"sd200lo": 0.488,
"sd200hi": 0.595,
"pk": 1.286,
"tr": -1.115
},
"7": {
"tavg": -0.559,
"lo20": -1.158,
"hi20": 0.314,
"sd_cycle": 0.7,
"sd200lo": 0.632,
"sd200hi": 0.769,
"pk": 1.772,
"tr": -1.433
},
"8": {
"tavg": -0.221,
"lo20": -0.603,
"hi20": 0.339,
"sd_cycle": 0.446,
"sd200lo": 0.402,
"sd200hi": 0.489,
"pk": 1.255,
"tr": -0.77
},
"9": {
"tavg": 0.031,
"lo20": -0.529,
"hi20": 0.416,
"sd_cycle": 0.44,
"sd200lo": 0.397,
"sd200hi": 0.483,
"pk": 0.607,
"tr": -1.345
},
"10": {
"tavg": -0.392,
"lo20": -1.003,
"hi20": 0.472,
"sd_cycle": 0.666,
"sd200lo": 0.601,
"sd200hi": 0.731,
"pk": 1.676,
"tr": -1.25
},
"11": {
"tavg": -0.197,
"lo20": -0.878,
"hi20": 0.799,
"sd_cycle": 0.829,
"sd200lo": 0.748,
"sd200hi": 0.911,
"pk": 2.54,
"tr": -1.23
},
"12": {
"tavg": -0.18,
"lo20": -0.622,
"hi20": 0.471,
"sd_cycle": 0.522,
"sd200lo": 0.471,
"sd200hi": 0.573,
"pk": 1.547,
"tr": -0.824
},
"13": {
"tavg": -0.4,
"lo20": -0.734,
"hi20": 0.104,
"sd_cycle": 0.405,
"sd200lo": 0.366,
"sd200hi": 0.444,
"pk": 0.928,
"tr": -0.883
},
"14": {
"tavg": -0.613,
"lo20": -1.193,
"hi20": 0.23,
"sd_cycle": 0.658,
"sd200lo": 0.594,
"sd200hi": 0.723,
"pk": 1.552,
"tr": -1.385
},
"15": {
"tavg": 0.483,
"lo20": -0.01,
"hi20": 0.818,
"sd_cycle": 0.385,
"sd200lo": 0.348,
"sd200hi": 0.423,
"pk": 1.027,
"tr": -0.786
},
"18": {
"tavg": 0.41,
"lo20": -0.64,
"hi20": 1.127,
"sd_cycle": 0.833,
"sd200lo": 0.752,
"sd200hi": 0.915,
"pk": 1.484,
"tr": -2.282
},
"19": {
"tavg": -0.207,
"lo20": -0.64,
"hi20": 0.405,
"sd_cycle": 0.49,
"sd200lo": 0.442,
"sd200hi": 0.539,
"pk": 1.353,
"tr": -0.87
},
"20": {
"tavg": 0.456,
"lo20": -0.47,
"hi20": 1.077,
"sd_cycle": 0.734,
"sd200lo": 0.663,
"sd200hi": 0.806,
"pk": 1.367,
"tr": -1.885
},
"21": {
"tavg": -0.332,
"lo20": -0.84,
"hi20": 0.401,
"sd_cycle": 0.579,
"sd200lo": 0.523,
"sd200hi": 0.636,
"pk": 1.482,
"tr": -1.084
},
"22": {
"tavg": -0.252,
"lo20": -0.8,
"hi20": 0.557,
"sd_cycle": 0.64,
"sd200lo": 0.578,
"sd200hi": 0.703,
"pk": 1.831,
"tr": -1.073
},
"23": {
"tavg": 0.159,
"lo20": -0.395,
"hi20": 0.541,
"sd_cycle": 0.431,
"sd200lo": 0.389,
"sd200hi": 0.473,
"pk": 0.718,
"tr": -1.212
},
"24": {
"tavg": -0.255,
"lo20": -0.854,
"hi20": 0.637,
"sd_cycle": 0.695,
"sd200lo": 0.627,
"sd200hi": 0.763,
"pk": 1.961,
"tr": -1.103
},
"25": {
"tavg": 0.014,
"lo20": -0.649,
"hi20": 0.478,
"sd_cycle": 0.525,
"sd200lo": 0.474,
"sd200hi": 0.577,
"pk": 0.676,
"tr": -1.626
},
"26": {
"tavg": 0.113,
"lo20": -0.986,
"hi20": 0.881,
"sd_cycle": 0.869,
"sd200lo": 0.784,
"sd200hi": 0.954,
"pk": 1.217,
"tr": -2.609
},
"27": {
"tavg": -0.586,
"lo20": -1.208,
"hi20": 0.338,
"sd_cycle": 0.737,
"sd200lo": 0.666,
"sd200hi": 0.81,
"pk": 1.833,
"tr": -1.479
},
"28": {
"tavg": 0.267,
"lo20": -0.423,
"hi20": 0.717,
"sd_cycle": 0.548,
"sd200lo": 0.495,
"sd200hi": 0.602,
"pk": 0.956,
"tr": -1.55
},
"29": {
"tavg": 0.12,
"lo20": -0.53,
"hi20": 0.554,
"sd_cycle": 0.515,
"sd200lo": 0.465,
"sd200hi": 0.565,
"pk": 0.75,
"tr": -1.524
},
"30": {
"tavg": -0.417,
"lo20": -1.071,
"hi20": 0.564,
"sd_cycle": 0.76,
"sd200lo": 0.686,
"sd200hi": 0.834,
"pk": 1.998,
"tr": -1.411
},
"31": {
"tavg": -0.345,
"lo20": -0.682,
"hi20": 0.149,
"sd_cycle": 0.383,
"sd200lo": 0.346,
"sd200hi": 0.421,
"pk": 0.856,
"tr": -0.869
},
"32": {
"tavg": 0.152,
"lo20": -0.353,
"hi20": 0.495,
"sd_cycle": 0.391,
"sd200lo": 0.353,
"sd200hi": 0.429,
"pk": 0.661,
"tr": -1.088
},
"33": {
"tavg": 0.484,
"lo20": -0.361,
"hi20": 1.081,
"sd_cycle": 0.675,
"sd200lo": 0.609,
"sd200hi": 0.741,
"pk": 1.285,
"tr": -1.631
},
"34": {
"tavg": 0.155,
"lo20": -0.739,
"hi20": 0.762,
"sd_cycle": 0.685,
"sd200lo": 0.618,
"sd200hi": 0.752,
"pk": 1.014,
"tr": -2.022
},
"35": {
"tavg": -0.237,
"lo20": -0.586,
"hi20": 0.28,
"sd_cycle": 0.421,
"sd200lo": 0.38,
"sd200hi": 0.462,
"pk": 1.2,
"tr": -0.827
},
"36": {
"tavg": -0.42,
"lo20": -0.995,
"hi20": 0.418,
"sd_cycle": 0.658,
"sd200lo": 0.594,
"sd200hi": 0.723,
"pk": 1.764,
"tr": -1.216
},
"37": {
"tavg": -0.546,
"lo20": -1.308,
"hi20": 0.573,
"sd_cycle": 0.869,
"sd200lo": 0.785,
"sd200hi": 0.955,
"pk": 2.256,
"tr": -1.655
},
"38": {
"tavg": 0.269,
"lo20": -0.629,
"hi20": 0.879,
"sd_cycle": 0.709,
"sd200lo": 0.64,
"sd200hi": 0.778,
"pk": 1.181,
"tr": -1.926
}
}
app/templates.py (2,168 chars)
import numpy as np, json
from data_fast_wave import BATCHES
P = 39.0
BINS = 39
def ch4_phase(x):
"""phase offset (tick of first spike peak of ch4, subsample) via parabolic interp"""
x = np.asarray(x)
i = int(np.argmax(x))
if 0 < i < len(x)-1:
a,b,c = x[i-1],x[i],x[i+1]
d = 0.5*(a-c)/(a-2*b+c)
else: d = 0.0
return i+d
def fold(x, t0):
x=np.asarray(x); n=len(x)
acc=np.zeros(BINS); cnt=np.zeros(BINS)
ph = ((np.arange(n)-t0) % P)/P*BINS
k = np.floor(ph).astype(int)%BINS
for i in range(n): acc[k[i]]+=x[i]; cnt[k[i]]+=1
with np.errstate(invalid='ignore'):
t = acc/np.maximum(cnt,1)
# fill empty bins by interpolation
if (cnt==0).any():
good=np.where(cnt>0)[0]
for kk in np.where(cnt==0)[0]:
t[kk]=np.interp(kk, good, t[good], period=BINS)
return t
templates={}
for b in BATCHES:
t0 = ch4_phase(b[4])
for ch, x in b.items():
T = fold(x, t0)
if ch in templates: templates[ch].append(T)
else: templates[ch]=[T]
templates = {ch: np.mean(np.stack(v),axis=0) for ch,v in templates.items()}
# stats per channel: time-avg, amplitude, rolling-20 mean min/max, cycle sd,
# sd of 20-tick window as function of phase (min/max), upward-crossing usable?
out={}
for ch in sorted(templates):
T = templates[ch]
tavg = T.mean()
# rolling 20-tick means over the cycle (wrap)
ext = np.concatenate([T,T])
r20 = np.array([ext[i:i+20].mean() for i in range(BINS)])
s20 = np.array([ext[i:i+20].std() for i in range(BINS)])
out[ch] = dict(tavg=round(float(tavg),3), lo20=round(float(r20.min()),3),
hi20=round(float(r20.max()),3), sd_cycle=round(float(T.std()),3),
sd20lo=round(float(s20.min()),3), sd20hi=round(float(s20.max()),3),
amp=round(float(T.max()-T.min()),3),
pk=round(float(T.max()),3), tr=round(float(T.min()),3),
argpk=int(T.argmax()))
print(ch, out[ch])
np.save('/app/templates_fast.npy', np.stack([templates[ch] for ch in sorted(templates)]))
json.dump(out, open('/app/stats_fast.json','w'), indent=0)
app/templates_slow.py (1,975 chars)
import numpy as np, json
from data_slow_wave import SBATCH
# slow branch: stride 3, so sample i is tick 3*i. Period ~81 ticks = 27 samples.
P_t = 81.0 # ticks
BINS = 81 # 1-tick bins via folding (sparse; interpolate)
def ch4_phase_ticks(x):
x=np.asarray(x); i=int(np.argmax(x))
if 0<i<len(x)-1:
a,b,c=x[i-1],x[i],x[i+1]; d=0.5*(a-c)/(a-2*b+c)
else: d=0.0
return (i+d)*3.0 # ticks
def fold(x, t0):
x=np.asarray(x); n=len(x)
ticks=np.arange(n)*3.0
ph=((ticks-t0)%P_t)
k=np.floor(ph).astype(int)%BINS
acc=np.zeros(BINS); cnt=np.zeros(BINS)
for i in range(n): acc[k[i]]+=x[i]; cnt[k[i]]+=1
t=acc/np.maximum(cnt,1)
good=np.where(cnt>0)[0]
for kk in np.where(cnt==0)[0]:
t[kk]=np.interp(kk, good, t[good], period=BINS)
return t
templates={}
for b in SBATCH:
t0=ch4_phase_ticks(b[4])
for ch,x in b.items():
T=fold(x,t0)
templates.setdefault(ch,[]).append(T)
templates={ch:np.mean(np.stack(v),axis=0) for ch,v in templates.items()}
out={}
for ch in sorted(templates):
T=templates[ch]; ext=np.concatenate([T,T])
r20=np.array([ext[i:i+20].mean() for i in range(BINS)])
s20=np.array([ext[i:i+20].std() for i in range(BINS)])
# sd over 200-tick window = 2.47 cycles: approx sd over full cycle with phase jitter; compute sd of 200-window
ext2=np.concatenate([T]*4)
s200=np.array([ext2[i:i+200].std() for i in range(BINS)])
out[ch]=dict(tavg=round(float(T.mean()),3), lo20=round(float(r20.min()),3),
hi20=round(float(r20.max()),3), sd_cycle=round(float(T.std()),3),
sd200lo=round(float(s200.min()),3), sd200hi=round(float(s200.max()),3),
pk=round(float(T.max()),3), tr=round(float(T.min()),3))
print(ch,out[ch])
json.dump(out, open('/app/stats_slow.json','w'), indent=0)
np.save('/app/templates_slow.npy', np.stack([templates[ch] for ch in sorted(templates)]))
print('channels:', sorted(templates))
app/theory_code.py (17,361 chars)
TPL={0:[0.6,0.6,0.61,0.62,0.62,0.63,0.64,0.65,0.66,0.67,0.68,0.69,0.7,0.68,0.66,0.63,0.63,0.63,0.63,0.62,0.62,0.61,0.62,0.63,0.63,0.63,0.62,0.61,0.63,0.65,0.67,0.63,0.6,0.56,0.34,0.13,-0.08,-0.58,-1.07,-1.56,-1.84,-2.13,-2.41,-2.14,-1.87,-1.6,-0.96,-0.32,0.32,0.72,1.11,1.51,1.51,1.5,1.5,1.45,1.39,1.33,1.29,1.25,1.21,1.18,1.14,1.11,1.01,0.91,0.81,0.81,0.8,0.79,0.78,0.76,0.74,0.69,0.63,0.58,0.58,0.58,0.58,0.58,0.59],1:[-0.8,-0.8,-0.8,-0.8,-0.8,-0.81,-0.82,-0.81,-0.79,-0.77,-0.79,-0.8,-0.81,-0.78,-0.76,-0.73,-0.73,-0.73,-0.73,-0.74,-0.76,-0.77,-0.78,-0.8,-0.81,-0.77,-0.74,-0.71,-0.75,-0.8,-0.85,-0.83,-0.82,-0.8,-0.79,-0.78,-0.77,-0.45,-0.12,0.21,0.88,1.56,2.23,2.17,2.1,2.04,1.64,1.23,0.82,-0.03,-0.88,-1.74,-1.73,-1.72,-1.71,-1.66,-1.61,-1.56,-1.53,-1.49,-1.46,-1.4,-1.35,-1.29,-1.2,-1.11,-1.02,-0.99,-0.97,-0.95,-0.91,-0.87,-0.83,-0.82,-0.8,-0.79,-0.75,-0.71,-0.66,-0.71,-0.75],3:[0.81,0.92,1.04,1.16,1.08,1.0,0.92,0.65,0.39,0.13,-0.05,-0.24,-0.42,-0.46,-0.5,-0.54,-0.51,-0.48,-0.45,-0.42,-0.38,-0.34,-0.35,-0.36,-0.38,-0.35,-0.33,-0.31,-0.27,-0.22,-0.17,-0.16,-0.15,-0.14,-0.12,-0.1,-0.08,-0.07,-0.05,-0.04,-0.04,-0.04,-0.03,-0.08,-0.13,-0.18,-0.17,-0.15,-0.13,-0.14,-0.15,-0.16,-0.13,-0.1,-0.07,-0.1,-0.12,-0.15,-0.12,-0.1,-0.07,-0.09,-0.11,-0.13,-0.15,-0.16,-0.17,-0.15,-0.12,-0.1,-0.09,-0.09,-0.08,-0.08,-0.07,-0.07,-0.01,0.06,0.13,0.35,0.58],4:[2.34,2.06,1.77,1.22,0.58,-0.06,-0.62,-1.0,-1.37,-1.49,-1.49,-1.5,-1.45,-1.4,-1.34,-1.29,-1.25,-1.21,-1.16,-1.11,-1.05,-1.0,-0.95,-0.91,-0.87,-0.83,-0.78,-0.74,-0.7,-0.67,-0.63,-0.59,-0.56,-0.54,-0.53,-0.52,-0.51,-0.5,-0.49,-0.49,-0.5,-0.51,-0.52,-0.54,-0.57,-0.58,-0.58,-0.58,-0.59,-0.58,-0.57,-0.56,-0.55,-0.55,-0.55,-0.54,-0.53,-0.53,-0.53,-0.53,-0.52,-0.53,-0.53,-0.54,-0.55,-0.56,-0.56,-0.56,-0.56,-0.55,-0.49,-0.43,-0.25,0.04,0.34,0.77,1.24,1.71,2.06,2.23,2.41],5:[-0.14,0.13,0.39,0.66,0.95,1.23,1.52,1.49,1.45,1.41,1.06,0.7,0.35,-0.05,-0.45,-0.85,-0.92,-1.0,-1.07,-1.02,-0.97,-0.92,-0.88,-0.84,-0.81,-0.78,-0.76,-0.74,-0.7,-0.65,-0.61,-0.59,-0.57,-0.55,-0.54,-0.52,-0.51,-0.47,-0.44,-0.41,-0.38,-0.35,-0.32,-0.32,-0.33,-0.34,-0.33,-0.33,-0.32,-0.32,-0.32,-0.32,-0.36,-0.39,-0.43,-0.44,-0.45,-0.46,-0.43,-0.39,-0.35,-0.37,-0.38,-0.4,-0.4,-0.4,-0.41,-0.41,-0.41,-0.42,-0.43,-0.45,-0.47,-0.44,-0.41,-0.38,-0.37,-0.35,-0.34,-0.27,-0.21],6:[-0.52,-0.51,-0.49,-0.48,-0.48,-0.49,-0.5,-0.51,-0.51,-0.52,-0.53,-0.54,-0.55,-0.53,-0.51,-0.49,-0.5,-0.52,-0.53,-0.52,-0.5,-0.49,-0.5,-0.5,-0.51,-0.5,-0.49,-0.48,-0.49,-0.5,-0.52,-0.51,-0.51,-0.51,-0.49,-0.47,-0.45,-0.2,0.05,0.31,0.63,0.96,1.29,1.27,1.26,1.25,0.93,0.61,0.3,-0.12,-0.53,-0.95,-1.01,-1.06,-1.12,-1.07,-1.03,-0.99,-0.97,-0.95,-0.94,-0.9,-0.87,-0.84,-0.8,-0.76,-0.72,-0.68,-0.65,-0.61,-0.59,-0.56,-0.53,-0.53,-0.54,-0.54,-0.5,-0.47,-0.43,-0.46,-0.49],7:[-0.7,-0.72,-0.74,-0.73,-0.72,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.69,-0.68,-0.68,-0.68,-0.68,-0.69,-0.7,-0.71,-0.7,-0.68,-0.66,-0.67,-0.68,-0.69,-0.68,-0.66,-0.65,-0.42,-0.19,0.04,0.48,0.92,1.36,1.5,1.64,1.77,1.43,1.09,0.75,0.23,-0.3,-0.83,-1.03,-1.23,-1.43,-1.41,-1.38,-1.35,-1.32,-1.28,-1.24,-1.21,-1.19,-1.16,-1.13,-1.1,-1.07,-1.02,-0.97,-0.92,-0.88,-0.83,-0.78,-0.75,-0.72,-0.69,-0.66,-0.63,-0.6,-0.62,-0.63,-0.65,-0.66,-0.67,-0.67,-0.68,-0.68,-0.68],8:[-0.33,-0.34,-0.35,-0.33,-0.31,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.28,-0.27,-0.28,-0.29,-0.3,-0.25,-0.2,-0.15,0.13,0.41,0.69,0.88,1.07,1.25,1.16,1.06,0.96,0.66,0.37,0.08,-0.19,-0.46,-0.72,-0.74,-0.75,-0.77,-0.74,-0.72,-0.69,-0.66,-0.64,-0.61,-0.58,-0.55,-0.52,-0.52,-0.51,-0.5,-0.48,-0.45,-0.43,-0.4,-0.38,-0.36,-0.35,-0.34,-0.33,-0.32,-0.31,-0.3,-0.29,-0.28,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.31,-0.33,-0.35,-0.33,-0.31,-0.29,-0.3,-0.31,-0.32],9:[0.18,0.17,0.17,0.13,0.1,0.07,0.08,0.09,0.1,0.12,0.13,0.14,0.11,0.08,0.05,0.08,0.1,0.12,0.12,0.12,0.12,0.13,0.15,0.16,0.14,0.13,0.11,0.12,0.12,0.13,0.11,0.09,0.08,0.07,0.07,0.07,0.08,0.1,0.11,0.11,0.11,0.11,0.09,0.07,0.05,-0.15,-0.35,-0.55,-0.77,-0.99,-1.22,-1.26,-1.3,-1.34,-1.13,-0.92,-0.71,-0.37,-0.04,0.3,0.4,0.5,0.61,0.59,0.58,0.57,0.53,0.49,0.45,0.42,0.39,0.35,0.35,0.35,0.35,0.32,0.29,0.25,0.23,0.21,0.19],10:[1.51,1.34,1.18,0.72,0.27,-0.19,-0.53,-0.87,-1.21,-1.22,-1.24,-1.25,-1.22,-1.18,-1.15,-1.11,-1.06,-1.02,-0.98,-0.94,-0.9,-0.86,-0.83,-0.8,-0.77,-0.74,-0.71,-0.68,-0.65,-0.63,-0.59,-0.55,-0.51,-0.49,-0.48,-0.47,-0.47,-0.47,-0.47,-0.48,-0.49,-0.51,-0.5,-0.48,-0.47,-0.48,-0.49,-0.5,-0.53,-0.55,-0.58,-0.56,-0.54,-0.52,-0.52,-0.52,-0.53,-0.52,-0.52,-0.51,-0.49,-0.47,-0.46,-0.47,-0.49,-0.5,-0.5,-0.5,-0.5,-0.47,-0.44,-0.41,-0.22,-0.03,0.15,0.5,0.84,1.18,1.35,1.51,1.68],11:[-0.34,-0.32,-0.3,-0.32,-0.34,-0.36,-0.35,-0.34,-0.33,-0.35,-0.36,-0.37,-0.36,-0.34,-0.33,-0.34,-0.35,-0.35,-0.36,-0.37,-0.37,-0.38,-0.38,-0.38,-0.36,-0.33,-0.31,-0.33,-0.34,-0.36,-0.35,-0.34,-0.33,-0.34,-0.35,-0.36,-0.25,-0.14,-0.03,0.59,1.21,1.83,2.07,2.3,2.54,2.34,2.15,1.95,1.15,0.36,-0.44,-0.7,-0.97,-1.23,-1.19,-1.15,-1.12,-1.08,-1.04,-0.99,-0.95,-0.91,-0.87,-0.82,-0.77,-0.71,-0.68,-0.65,-0.62,-0.58,-0.54,-0.5,-0.45,-0.41,-0.36,-0.33,-0.29,-0.25,-0.29,-0.32,-0.35],12:[-0.26,-0.26,-0.26,-0.27,-0.29,-0.31,-0.28,-0.25,-0.23,-0.25,-0.28,-0.31,-0.32,-0.33,-0.34,-0.32,-0.31,-0.3,-0.3,-0.31,-0.31,-0.29,-0.26,-0.23,-0.24,-0.25,-0.26,-0.26,-0.27,-0.27,-0.06,0.15,0.37,0.67,0.98,1.29,1.37,1.46,1.55,1.27,0.99,0.71,0.31,-0.08,-0.48,-0.59,-0.71,-0.82,-0.82,-0.81,-0.81,-0.77,-0.73,-0.7,-0.66,-0.62,-0.58,-0.56,-0.53,-0.51,-0.48,-0.45,-0.42,-0.39,-0.37,-0.35,-0.32,-0.3,-0.27,-0.27,-0.27,-0.27,-0.25,-0.23,-0.22,-0.23,-0.25,-0.27,-0.27,-0.27,-0.27],13:[-0.49,-0.51,-0.54,-0.52,-0.51,-0.49,-0.5,-0.52,-0.53,-0.51,-0.49,-0.47,-0.47,-0.47,-0.47,-0.46,-0.46,-0.45,-0.47,-0.48,-0.5,-0.51,-0.52,-0.53,-0.5,-0.48,-0.46,-0.32,-0.18,-0.04,0.2,0.45,0.69,0.77,0.85,0.93,0.76,0.59,0.42,0.12,-0.18,-0.48,-0.61,-0.73,-0.86,-0.87,-0.87,-0.88,-0.86,-0.85,-0.83,-0.79,-0.76,-0.72,-0.69,-0.65,-0.62,-0.61,-0.61,-0.6,-0.61,-0.62,-0.63,-0.56,-0.49,-0.42,-0.44,-0.46,-0.47,-0.46,-0.45,-0.44,-0.46,-0.48,-0.49,-0.47,-0.46,-0.44,-0.45,-0.46,-0.47],14:[-0.77,-0.78,-0.79,-0.76,-0.72,-0.69,-0.55,-0.42,-0.29,0.04,0.37,0.7,0.99,1.27,1.55,1.39,1.23,1.08,0.67,0.26,-0.15,-0.56,-0.97,-1.39,-1.38,-1.37,-1.36,-1.35,-1.33,-1.31,-1.32,-1.32,-1.33,-1.25,-1.17,-1.09,-1.07,-1.05,-1.03,-0.98,-0.93,-0.88,-0.86,-0.83,-0.8,-0.79,-0.79,-0.78,-0.75,-0.73,-0.7,-0.71,-0.71,-0.71,-0.71,-0.71,-0.72,-0.7,-0.69,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.71,-0.73,-0.74,-0.76,-0.75,-0.75,-0.75,-0.76,-0.77,-0.78,-0.76,-0.74,-0.72,-0.74,-0.75,-0.76],15:[0.53,0.52,0.52,0.53,0.54,0.56,0.57,0.58,0.59,0.57,0.56,0.54,0.55,0.55,0.56,0.56,0.57,0.57,0.58,0.58,0.59,0.59,0.6,0.6,0.57,0.54,0.51,0.49,0.47,0.45,0.39,0.33,0.26,0.03,-0.2,-0.43,-0.55,-0.67,-0.79,-0.66,-0.54,-0.42,-0.11,0.19,0.5,0.65,0.8,0.95,0.98,1.0,1.03,0.97,0.91,0.85,0.83,0.82,0.81,0.78,0.75,0.72,0.72,0.72,0.72,0.69,0.66,0.63,0.61,0.59,0.57,0.56,0.55,0.55,0.55,0.55,0.56,0.55,0.54,0.53,0.53,0.53,0.53],18:[0.56,0.56,0.56,0.57,0.58,0.59,0.61,0.63,0.65,0.62,0.59,0.56,0.57,0.58,0.59,0.57,0.54,0.52,0.54,0.57,0.59,0.58,0.56,0.54,0.54,0.54,0.54,0.53,0.52,0.51,0.26,0.0,-0.25,-0.78,-1.3,-1.83,-1.98,-2.13,-2.28,-1.96,-1.64,-1.32,-0.7,-0.07,0.56,0.87,1.18,1.48,1.46,1.44,1.42,1.35,1.28,1.21,1.18,1.16,1.14,1.09,1.05,1.0,0.94,0.88,0.82,0.8,0.78,0.76,0.7,0.64,0.58,0.58,0.57,0.57,0.53,0.49,0.45,0.49,0.52,0.55,0.55,0.55,0.55],19:[0.33,0.61,0.89,1.17,1.23,1.29,1.35,1.12,0.89,0.66,0.3,-0.05,-0.41,-0.56,-0.72,-0.87,-0.83,-0.78,-0.74,-0.75,-0.76,-0.77,-0.72,-0.67,-0.63,-0.6,-0.57,-0.54,-0.51,-0.48,-0.45,-0.44,-0.43,-0.42,-0.36,-0.31,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.27,-0.26,-0.24,-0.27,-0.3,-0.33,-0.31,-0.29,-0.27,-0.28,-0.29,-0.3,-0.3,-0.3,-0.29,-0.3,-0.32,-0.33,-0.31,-0.29,-0.27,-0.29,-0.3,-0.32,-0.29,-0.27,-0.24,-0.27,-0.29,-0.31,-0.32,-0.32,-0.32,-0.3,-0.27,-0.25,-0.06,0.14],20:[0.59,0.6,0.61,0.62,0.63,0.63,0.64,0.63,0.62,0.61,0.62,0.63,0.63,0.62,0.62,0.61,0.62,0.62,0.63,0.63,0.62,0.62,0.62,0.61,0.61,0.58,0.56,0.53,0.49,0.45,0.41,0.0,-0.41,-0.81,-1.17,-1.53,-1.89,-1.82,-1.75,-1.69,-1.21,-0.73,-0.26,0.22,0.69,1.17,1.24,1.3,1.37,1.35,1.33,1.3,1.25,1.19,1.13,1.09,1.05,1.01,0.97,0.92,0.87,0.82,0.77,0.72,0.7,0.68,0.66,0.62,0.58,0.54,0.54,0.55,0.56,0.57,0.58,0.59,0.57,0.55,0.53,0.55,0.57],21:[-0.5,-0.48,-0.46,-0.44,-0.45,-0.46,-0.47,-0.47,-0.47,-0.47,-0.44,-0.42,-0.39,-0.43,-0.48,-0.52,-0.46,-0.39,-0.33,-0.36,-0.39,-0.43,-0.43,-0.43,-0.43,-0.41,-0.4,-0.38,-0.21,-0.04,0.14,0.49,0.84,1.2,1.29,1.39,1.48,1.31,1.13,0.95,0.49,0.02,-0.45,-0.66,-0.87,-1.08,-1.07,-1.06,-1.05,-1.01,-0.98,-0.94,-0.91,-0.88,-0.85,-0.82,-0.78,-0.74,-0.7,-0.67,-0.63,-0.58,-0.53,-0.47,-0.47,-0.46,-0.46,-0.43,-0.4,-0.38,-0.4,-0.41,-0.43,-0.43,-0.43,-0.42,-0.44,-0.46,-0.48,-0.48,-0.49],22:[-0.38,-0.37,-0.35,-0.33,-0.34,-0.35,-0.37,-0.38,-0.4,-0.41,-0.4,-0.39,-0.37,-0.38,-0.38,-0.38,-0.39,-0.39,-0.4,-0.38,-0.36,-0.33,-0.18,-0.03,0.12,0.5,0.88,1.26,1.45,1.64,1.83,1.66,1.49,1.31,0.84,0.36,-0.11,-0.43,-0.75,-1.07,-1.05,-1.02,-1.0,-0.97,-0.94,-0.9,-0.87,-0.83,-0.79,-0.77,-0.75,-0.73,-0.69,-0.65,-0.6,-0.57,-0.54,-0.51,-0.49,-0.48,-0.46,-0.43,-0.4,-0.37,-0.36,-0.35,-0.34,-0.33,-0.32,-0.32,-0.34,-0.36,-0.38,-0.4,-0.42,-0.44,-0.4,-0.36,-0.32,-0.34,-0.36],23:[0.22,0.22,0.22,0.22,0.21,0.2,0.2,0.17,0.15,0.12,-0.04,-0.2,-0.36,-0.61,-0.85,-1.09,-1.13,-1.17,-1.21,-0.98,-0.75,-0.51,-0.19,0.14,0.46,0.55,0.63,0.72,0.68,0.63,0.59,0.6,0.61,0.62,0.58,0.55,0.52,0.48,0.44,0.4,0.42,0.45,0.47,0.41,0.35,0.29,0.27,0.26,0.24,0.23,0.23,0.23,0.23,0.23,0.23,0.24,0.25,0.27,0.24,0.2,0.17,0.2,0.22,0.25,0.25,0.25,0.25,0.26,0.27,0.29,0.26,0.23,0.2,0.22,0.23,0.25,0.26,0.26,0.27,0.25,0.23],24:[-0.42,-0.41,-0.41,-0.42,-0.43,-0.44,-0.41,-0.38,-0.35,-0.34,-0.33,-0.32,-0.34,-0.36,-0.38,-0.35,-0.32,-0.29,-0.24,-0.2,-0.15,0.2,0.56,0.92,1.27,1.61,1.96,1.89,1.83,1.76,1.33,0.89,0.45,-0.01,-0.47,-0.94,-0.99,-1.05,-1.1,-1.06,-1.02,-0.98,-0.95,-0.92,-0.88,-0.87,-0.86,-0.84,-0.79,-0.73,-0.67,-0.64,-0.62,-0.6,-0.57,-0.54,-0.52,-0.49,-0.47,-0.44,-0.41,-0.38,-0.35,-0.35,-0.34,-0.34,-0.33,-0.33,-0.33,-0.35,-0.37,-0.39,-0.4,-0.41,-0.41,-0.42,-0.42,-0.43,-0.43,-0.43,-0.43],25:[0.11,0.08,0.05,0.07,0.09,0.1,0.11,0.12,0.12,0.09,0.06,0.03,-0.18,-0.39,-0.59,-0.9,-1.2,-1.51,-1.55,-1.59,-1.63,-1.38,-1.13,-0.89,-0.48,-0.07,0.33,0.45,0.56,0.68,0.66,0.64,0.62,0.59,0.57,0.54,0.52,0.5,0.47,0.44,0.41,0.38,0.35,0.32,0.29,0.26,0.24,0.21,0.19,0.18,0.16,0.14,0.12,0.09,0.09,0.08,0.07,0.07,0.08,0.08,0.1,0.12,0.14,0.1,0.07,0.03,0.07,0.11,0.15,0.13,0.11,0.09,0.08,0.08,0.08,0.1,0.13,0.15,0.15,0.14,0.13],26:[0.3,0.33,0.35,0.24,0.13,0.03,-0.32,-0.67,-1.02,-1.47,-1.93,-2.39,-2.46,-2.53,-2.61,-2.15,-1.7,-1.25,-0.61,0.02,0.66,0.84,1.03,1.22,1.19,1.16,1.14,1.11,1.08,1.05,0.97,0.88,0.8,0.77,0.74,0.71,0.65,0.6,0.54,0.51,0.48,0.44,0.41,0.38,0.34,0.29,0.24,0.19,0.18,0.18,0.17,0.2,0.22,0.25,0.22,0.2,0.18,0.24,0.3,0.37,0.34,0.32,0.3,0.29,0.29,0.29,0.3,0.32,0.33,0.3,0.27,0.24,0.24,0.24,0.24,0.23,0.22,0.21,0.23,0.26,0.28],27:[-0.74,-0.71,-0.67,-0.68,-0.69,-0.7,-0.72,-0.73,-0.74,-0.72,-0.69,-0.66,-0.67,-0.68,-0.69,-0.73,-0.77,-0.81,-0.79,-0.78,-0.77,-0.74,-0.72,-0.7,-0.69,-0.69,-0.68,-0.68,-0.69,-0.69,-0.71,-0.74,-0.76,-0.76,-0.76,-0.77,-0.75,-0.74,-0.73,-0.61,-0.5,-0.38,0.03,0.44,0.85,1.18,1.51,1.83,1.7,1.57,1.44,0.93,0.41,-0.1,-0.55,-0.99,-1.43,-1.45,-1.46,-1.48,-1.45,-1.42,-1.39,-1.32,-1.25,-1.18,-1.15,-1.12,-1.09,-1.06,-1.04,-1.01,-0.99,-0.96,-0.93,-0.89,-0.86,-0.82,-0.81,-0.79,-0.78],28:[0.37,0.36,0.36,0.38,0.39,0.41,0.4,0.4,0.39,0.39,0.38,0.37,0.38,0.39,0.4,0.39,0.37,0.36,0.36,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.36,0.36,0.35,0.34,0.33,0.32,0.16,0.0,-0.16,-0.51,-0.86,-1.21,-1.32,-1.44,-1.55,-1.32,-1.08,-0.85,-0.41,0.03,0.47,0.63,0.79,0.96,0.94,0.92,0.91,0.89,0.87,0.84,0.79,0.73,0.67,0.65,0.62,0.59,0.55,0.52,0.48,0.49,0.5,0.51,0.46,0.41,0.35,0.38,0.4,0.43,0.39,0.36,0.33,0.34,0.36,0.37],29:[0.24,0.22,0.2,0.19,0.19,0.18,0.19,0.21,0.22,0.21,0.2,0.18,0.19,0.2,0.21,0.21,0.2,0.2,0.21,0.22,0.22,0.24,0.26,0.28,0.26,0.24,0.23,0.12,0.01,-0.09,-0.37,-0.65,-0.93,-1.13,-1.33,-1.52,-1.45,-1.37,-1.29,-0.93,-0.56,-0.2,0.1,0.4,0.69,0.71,0.73,0.75,0.72,0.7,0.67,0.64,0.61,0.57,0.53,0.48,0.43,0.43,0.42,0.41,0.4,0.39,0.38,0.38,0.37,0.37,0.3,0.22,0.15,0.17,0.2,0.22,0.22,0.21,0.21,0.22,0.22,0.23,0.24,0.25,0.26],30:[1.75,1.88,2.0,1.68,1.35,1.03,0.48,-0.07,-0.61,-0.88,-1.15,-1.41,-1.38,-1.35,-1.32,-1.27,-1.22,-1.17,-1.14,-1.1,-1.06,-1.02,-0.98,-0.95,-0.9,-0.84,-0.79,-0.77,-0.74,-0.71,-0.66,-0.62,-0.57,-0.56,-0.56,-0.56,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.57,-0.6,-0.63,-0.61,-0.59,-0.56,-0.58,-0.59,-0.6,-0.62,-0.64,-0.66,-0.63,-0.6,-0.57,-0.56,-0.55,-0.54,-0.55,-0.57,-0.58,-0.57,-0.55,-0.54,-0.56,-0.59,-0.61,-0.59,-0.57,-0.54,-0.5,-0.45,-0.41,-0.12,0.17,0.46,0.85,1.24,1.63],31:[-0.25,-0.08,0.08,0.29,0.51,0.72,0.76,0.81,0.86,0.69,0.53,0.37,0.09,-0.18,-0.46,-0.6,-0.73,-0.87,-0.83,-0.8,-0.76,-0.76,-0.76,-0.76,-0.73,-0.7,-0.68,-0.65,-0.63,-0.61,-0.59,-0.57,-0.55,-0.53,-0.52,-0.5,-0.49,-0.48,-0.46,-0.46,-0.47,-0.47,-0.45,-0.44,-0.43,-0.42,-0.41,-0.4,-0.39,-0.38,-0.37,-0.37,-0.37,-0.36,-0.39,-0.42,-0.45,-0.45,-0.46,-0.47,-0.45,-0.43,-0.41,-0.42,-0.42,-0.43,-0.41,-0.39,-0.38,-0.38,-0.39,-0.39,-0.39,-0.39,-0.39,-0.37,-0.36,-0.34,-0.36,-0.39,-0.41],32:[0.2,0.2,0.2,0.22,0.25,0.27,0.28,0.29,0.3,0.28,0.26,0.24,0.24,0.23,0.23,0.24,0.24,0.25,0.24,0.23,0.22,0.2,0.18,0.16,0.14,0.11,0.08,-0.08,-0.25,-0.41,-0.59,-0.78,-0.96,-1.01,-1.05,-1.09,-0.85,-0.61,-0.38,-0.08,0.22,0.51,0.56,0.61,0.66,0.65,0.63,0.62,0.6,0.58,0.56,0.52,0.48,0.44,0.42,0.39,0.37,0.35,0.33,0.32,0.29,0.27,0.24,0.24,0.23,0.22,0.22,0.22,0.22,0.21,0.2,0.19,0.19,0.2,0.2,0.2,0.21,0.21,0.21,0.21,0.21],33:[0.63,0.63,0.62,0.61,0.6,0.59,0.58,0.58,0.57,0.58,0.58,0.59,0.62,0.65,0.68,0.65,0.62,0.59,0.54,0.5,0.45,0.11,-0.23,-0.58,-0.93,-1.28,-1.63,-1.58,-1.54,-1.49,-1.11,-0.72,-0.34,0.14,0.61,1.09,1.15,1.22,1.28,1.28,1.28,1.28,1.24,1.19,1.14,1.13,1.11,1.1,1.04,0.98,0.92,0.87,0.82,0.76,0.75,0.73,0.71,0.68,0.65,0.62,0.6,0.59,0.57,0.58,0.59,0.6,0.6,0.6,0.6,0.59,0.59,0.58,0.57,0.57,0.56,0.56,0.57,0.57,0.59,0.61,0.64],34:[-2.02,-1.9,-1.78,-1.65,-1.19,-0.72,-0.25,0.12,0.5,0.87,0.92,0.97,1.01,0.99,0.96,0.94,0.9,0.85,0.81,0.76,0.72,0.67,0.63,0.6,0.56,0.55,0.53,0.52,0.48,0.44,0.41,0.38,0.36,0.34,0.29,0.25,0.21,0.22,0.22,0.23,0.23,0.24,0.24,0.26,0.27,0.29,0.31,0.33,0.34,0.33,0.32,0.31,0.31,0.31,0.31,0.31,0.31,0.31,0.29,0.27,0.25,0.25,0.25,0.25,0.26,0.27,0.27,0.27,0.27,0.26,0.24,0.22,0.2,0.05,-0.1,-0.25,-0.58,-0.92,-1.25,-1.51,-1.77],35:[-0.25,-0.27,-0.3,-0.32,-0.32,-0.31,-0.31,-0.32,-0.33,-0.34,-0.34,-0.34,-0.34,-0.33,-0.32,-0.3,-0.29,-0.28,-0.26,-0.27,-0.27,-0.28,-0.3,-0.32,-0.34,-0.33,-0.31,-0.3,-0.31,-0.33,-0.35,-0.34,-0.33,-0.33,-0.21,-0.09,0.03,0.27,0.5,0.74,0.89,1.05,1.2,1.05,0.9,0.75,0.41,0.06,-0.28,-0.46,-0.64,-0.83,-0.78,-0.74,-0.7,-0.66,-0.63,-0.59,-0.58,-0.56,-0.55,-0.55,-0.54,-0.54,-0.51,-0.48,-0.46,-0.45,-0.45,-0.45,-0.41,-0.36,-0.32,-0.33,-0.35,-0.36,-0.36,-0.35,-0.34,-0.31,-0.28],36:[-0.63,-0.59,-0.56,-0.52,-0.54,-0.55,-0.57,-0.55,-0.53,-0.51,-0.52,-0.52,-0.53,-0.3,-0.07,0.16,0.51,0.86,1.21,1.39,1.58,1.76,1.51,1.25,0.99,0.52,0.05,-0.42,-0.69,-0.95,-1.22,-1.2,-1.17,-1.15,-1.13,-1.11,-1.09,-1.08,-1.07,-1.06,-1.01,-0.96,-0.91,-0.89,-0.87,-0.85,-0.78,-0.72,-0.66,-0.63,-0.6,-0.57,-0.57,-0.56,-0.56,-0.54,-0.53,-0.51,-0.51,-0.52,-0.52,-0.52,-0.53,-0.54,-0.54,-0.55,-0.55,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.54,-0.53,-0.53,-0.54,-0.55,-0.56,-0.59,-0.61],37:[1.62,1.83,2.04,2.26,1.97,1.68,1.38,0.75,0.12,-0.52,-0.9,-1.28,-1.66,-1.64,-1.62,-1.6,-1.56,-1.51,-1.47,-1.42,-1.38,-1.33,-1.27,-1.2,-1.14,-1.11,-1.09,-1.06,-1.0,-0.94,-0.88,-0.85,-0.83,-0.8,-0.75,-0.7,-0.65,-0.64,-0.63,-0.62,-0.64,-0.66,-0.68,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.74,-0.76,-0.79,-0.76,-0.73,-0.7,-0.72,-0.74,-0.76,-0.74,-0.72,-0.7,-0.71,-0.72,-0.72,-0.72,-0.72,-0.72,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.66,-0.62,-0.57,-0.32,-0.07,0.18,0.66,1.14],38:[0.3,0.33,0.37,0.4,0.41,0.41,0.42,0.41,0.41,0.4,0.42,0.44,0.46,0.43,0.4,0.37,0.38,0.4,0.41,0.43,0.45,0.47,0.44,0.41,0.38,0.39,0.39,0.4,0.39,0.38,0.37,0.29,0.22,0.14,-0.21,-0.57,-0.92,-1.26,-1.59,-1.93,-1.91,-1.9,-1.88,-1.39,-0.89,-0.39,0.06,0.5,0.95,1.02,1.1,1.18,1.14,1.11,1.07,1.01,0.95,0.89,0.85,0.81,0.77,0.77,0.77,0.76,0.7,0.63,0.57,0.54,0.51,0.48,0.46,0.45,0.43,0.41,0.39,0.38,0.38,0.39,0.4,0.37,0.33],}
DEAD={2:0.177,16:-0.085,17:0.126,39:0.071}
def _y(state):
ph, r, tsl = state['ph'], state['r'], state['tsl']
P = 81.0 - 41.3*min(r,1.0)
ttn = (1.0-ph)*P
y=[]
for c in range(40):
if c in DEAD: y.append(DEAD[c]); continue
t=TPL[c]
if tsl<=50: v=t[int(tsl)%81]
elif ttn<=8.0: v=t[int(81-ttn)%81]
else: v=(t[55]+t[60]+t[65])/3.0
y.append(v)
return y
def init(y_history):
# fresh draws are phase-pinned: first spike ~15 ticks after start
return {'ph': 1.0-15.0/81.0, 'r':0.0, 'floor':0.0, 'tsl':100.0, 'fast_t':0.0, 'latch':0}
def step(state, a):
s=dict(state)
drv = (a[0]>0.4) or (abs(a[1])>0.4) or any(a[p]>0.4 for p in range(2,8))
if a[0]>=0.9: s['latch']=1
if drv:
s['r'] += (1.0-s['r'])/38.0
s['fast_t'] += 1.0
s['floor'] = min(0.55, s['floor']+0.0007)
else:
s['r'] = s['floor'] + (s['r']-s['floor'])*0.9834983
if s['fast_t']>850.0 or s['latch']: s['floor']=1.0; s['r']=max(s['r'],0.9)
P = 81.0 - 41.3*min(s['r'],1.0)
s['ph'] += 1.0/P
s['tsl'] += 1.0
if s['ph']>=1.0:
s['ph']-=1.0; s['tsl']=0.0
return s, _y(s)
app/theory_part1.txt (16,186 chars)
TPL={0:[0.6,0.6,0.61,0.62,0.62,0.63,0.64,0.65,0.66,0.67,0.68,0.69,0.7,0.68,0.66,0.63,0.63,0.63,0.63,0.62,0.62,0.61,0.62,0.63,0.63,0.63,0.62,0.61,0.63,0.65,0.67,0.63,0.6,0.56,0.34,0.13,-0.08,-0.58,-1.07,-1.56,-1.84,-2.13,-2.41,-2.14,-1.87,-1.6,-0.96,-0.32,0.32,0.72,1.11,1.51,1.51,1.5,1.5,1.45,1.39,1.33,1.29,1.25,1.21,1.18,1.14,1.11,1.01,0.91,0.81,0.81,0.8,0.79,0.78,0.76,0.74,0.69,0.63,0.58,0.58,0.58,0.58,0.58,0.59],1:[-0.8,-0.8,-0.8,-0.8,-0.8,-0.81,-0.82,-0.81,-0.79,-0.77,-0.79,-0.8,-0.81,-0.78,-0.76,-0.73,-0.73,-0.73,-0.73,-0.74,-0.76,-0.77,-0.78,-0.8,-0.81,-0.77,-0.74,-0.71,-0.75,-0.8,-0.85,-0.83,-0.82,-0.8,-0.79,-0.78,-0.77,-0.45,-0.12,0.21,0.88,1.56,2.23,2.17,2.1,2.04,1.64,1.23,0.82,-0.03,-0.88,-1.74,-1.73,-1.72,-1.71,-1.66,-1.61,-1.56,-1.53,-1.49,-1.46,-1.4,-1.35,-1.29,-1.2,-1.11,-1.02,-0.99,-0.97,-0.95,-0.91,-0.87,-0.83,-0.82,-0.8,-0.79,-0.75,-0.71,-0.66,-0.71,-0.75],3:[0.81,0.92,1.04,1.16,1.08,1.0,0.92,0.65,0.39,0.13,-0.05,-0.24,-0.42,-0.46,-0.5,-0.54,-0.51,-0.48,-0.45,-0.42,-0.38,-0.34,-0.35,-0.36,-0.38,-0.35,-0.33,-0.31,-0.27,-0.22,-0.17,-0.16,-0.15,-0.14,-0.12,-0.1,-0.08,-0.07,-0.05,-0.04,-0.04,-0.04,-0.03,-0.08,-0.13,-0.18,-0.17,-0.15,-0.13,-0.14,-0.15,-0.16,-0.13,-0.1,-0.07,-0.1,-0.12,-0.15,-0.12,-0.1,-0.07,-0.09,-0.11,-0.13,-0.15,-0.16,-0.17,-0.15,-0.12,-0.1,-0.09,-0.09,-0.08,-0.08,-0.07,-0.07,-0.01,0.06,0.13,0.35,0.58],4:[2.34,2.06,1.77,1.22,0.58,-0.06,-0.62,-1.0,-1.37,-1.49,-1.49,-1.5,-1.45,-1.4,-1.34,-1.29,-1.25,-1.21,-1.16,-1.11,-1.05,-1.0,-0.95,-0.91,-0.87,-0.83,-0.78,-0.74,-0.7,-0.67,-0.63,-0.59,-0.56,-0.54,-0.53,-0.52,-0.51,-0.5,-0.49,-0.49,-0.5,-0.51,-0.52,-0.54,-0.57,-0.58,-0.58,-0.58,-0.59,-0.58,-0.57,-0.56,-0.55,-0.55,-0.55,-0.54,-0.53,-0.53,-0.53,-0.53,-0.52,-0.53,-0.53,-0.54,-0.55,-0.56,-0.56,-0.56,-0.56,-0.55,-0.49,-0.43,-0.25,0.04,0.34,0.77,1.24,1.71,2.06,2.23,2.41],5:[-0.14,0.13,0.39,0.66,0.95,1.23,1.52,1.49,1.45,1.41,1.06,0.7,0.35,-0.05,-0.45,-0.85,-0.92,-1.0,-1.07,-1.02,-0.97,-0.92,-0.88,-0.84,-0.81,-0.78,-0.76,-0.74,-0.7,-0.65,-0.61,-0.59,-0.57,-0.55,-0.54,-0.52,-0.51,-0.47,-0.44,-0.41,-0.38,-0.35,-0.32,-0.32,-0.33,-0.34,-0.33,-0.33,-0.32,-0.32,-0.32,-0.32,-0.36,-0.39,-0.43,-0.44,-0.45,-0.46,-0.43,-0.39,-0.35,-0.37,-0.38,-0.4,-0.4,-0.4,-0.41,-0.41,-0.41,-0.42,-0.43,-0.45,-0.47,-0.44,-0.41,-0.38,-0.37,-0.35,-0.34,-0.27,-0.21],6:[-0.52,-0.51,-0.49,-0.48,-0.48,-0.49,-0.5,-0.51,-0.51,-0.52,-0.53,-0.54,-0.55,-0.53,-0.51,-0.49,-0.5,-0.52,-0.53,-0.52,-0.5,-0.49,-0.5,-0.5,-0.51,-0.5,-0.49,-0.48,-0.49,-0.5,-0.52,-0.51,-0.51,-0.51,-0.49,-0.47,-0.45,-0.2,0.05,0.31,0.63,0.96,1.29,1.27,1.26,1.25,0.93,0.61,0.3,-0.12,-0.53,-0.95,-1.01,-1.06,-1.12,-1.07,-1.03,-0.99,-0.97,-0.95,-0.94,-0.9,-0.87,-0.84,-0.8,-0.76,-0.72,-0.68,-0.65,-0.61,-0.59,-0.56,-0.53,-0.53,-0.54,-0.54,-0.5,-0.47,-0.43,-0.46,-0.49],7:[-0.7,-0.72,-0.74,-0.73,-0.72,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.69,-0.68,-0.68,-0.68,-0.68,-0.69,-0.7,-0.71,-0.7,-0.68,-0.66,-0.67,-0.68,-0.69,-0.68,-0.66,-0.65,-0.42,-0.19,0.04,0.48,0.92,1.36,1.5,1.64,1.77,1.43,1.09,0.75,0.23,-0.3,-0.83,-1.03,-1.23,-1.43,-1.41,-1.38,-1.35,-1.32,-1.28,-1.24,-1.21,-1.19,-1.16,-1.13,-1.1,-1.07,-1.02,-0.97,-0.92,-0.88,-0.83,-0.78,-0.75,-0.72,-0.69,-0.66,-0.63,-0.6,-0.62,-0.63,-0.65,-0.66,-0.67,-0.67,-0.68,-0.68,-0.68],8:[-0.33,-0.34,-0.35,-0.33,-0.31,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.28,-0.27,-0.28,-0.29,-0.3,-0.25,-0.2,-0.15,0.13,0.41,0.69,0.88,1.07,1.25,1.16,1.06,0.96,0.66,0.37,0.08,-0.19,-0.46,-0.72,-0.74,-0.75,-0.77,-0.74,-0.72,-0.69,-0.66,-0.64,-0.61,-0.58,-0.55,-0.52,-0.52,-0.51,-0.5,-0.48,-0.45,-0.43,-0.4,-0.38,-0.36,-0.35,-0.34,-0.33,-0.32,-0.31,-0.3,-0.29,-0.28,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.31,-0.33,-0.35,-0.33,-0.31,-0.29,-0.3,-0.31,-0.32],9:[0.18,0.17,0.17,0.13,0.1,0.07,0.08,0.09,0.1,0.12,0.13,0.14,0.11,0.08,0.05,0.08,0.1,0.12,0.12,0.12,0.12,0.13,0.15,0.16,0.14,0.13,0.11,0.12,0.12,0.13,0.11,0.09,0.08,0.07,0.07,0.07,0.08,0.1,0.11,0.11,0.11,0.11,0.09,0.07,0.05,-0.15,-0.35,-0.55,-0.77,-0.99,-1.22,-1.26,-1.3,-1.34,-1.13,-0.92,-0.71,-0.37,-0.04,0.3,0.4,0.5,0.61,0.59,0.58,0.57,0.53,0.49,0.45,0.42,0.39,0.35,0.35,0.35,0.35,0.32,0.29,0.25,0.23,0.21,0.19],10:[1.51,1.34,1.18,0.72,0.27,-0.19,-0.53,-0.87,-1.21,-1.22,-1.24,-1.25,-1.22,-1.18,-1.15,-1.11,-1.06,-1.02,-0.98,-0.94,-0.9,-0.86,-0.83,-0.8,-0.77,-0.74,-0.71,-0.68,-0.65,-0.63,-0.59,-0.55,-0.51,-0.49,-0.48,-0.47,-0.47,-0.47,-0.47,-0.48,-0.49,-0.51,-0.5,-0.48,-0.47,-0.48,-0.49,-0.5,-0.53,-0.55,-0.58,-0.56,-0.54,-0.52,-0.52,-0.52,-0.53,-0.52,-0.52,-0.51,-0.49,-0.47,-0.46,-0.47,-0.49,-0.5,-0.5,-0.5,-0.5,-0.47,-0.44,-0.41,-0.22,-0.03,0.15,0.5,0.84,1.18,1.35,1.51,1.68],11:[-0.34,-0.32,-0.3,-0.32,-0.34,-0.36,-0.35,-0.34,-0.33,-0.35,-0.36,-0.37,-0.36,-0.34,-0.33,-0.34,-0.35,-0.35,-0.36,-0.37,-0.37,-0.38,-0.38,-0.38,-0.36,-0.33,-0.31,-0.33,-0.34,-0.36,-0.35,-0.34,-0.33,-0.34,-0.35,-0.36,-0.25,-0.14,-0.03,0.59,1.21,1.83,2.07,2.3,2.54,2.34,2.15,1.95,1.15,0.36,-0.44,-0.7,-0.97,-1.23,-1.19,-1.15,-1.12,-1.08,-1.04,-0.99,-0.95,-0.91,-0.87,-0.82,-0.77,-0.71,-0.68,-0.65,-0.62,-0.58,-0.54,-0.5,-0.45,-0.41,-0.36,-0.33,-0.29,-0.25,-0.29,-0.32,-0.35],12:[-0.26,-0.26,-0.26,-0.27,-0.29,-0.31,-0.28,-0.25,-0.23,-0.25,-0.28,-0.31,-0.32,-0.33,-0.34,-0.32,-0.31,-0.3,-0.3,-0.31,-0.31,-0.29,-0.26,-0.23,-0.24,-0.25,-0.26,-0.26,-0.27,-0.27,-0.06,0.15,0.37,0.67,0.98,1.29,1.37,1.46,1.55,1.27,0.99,0.71,0.31,-0.08,-0.48,-0.59,-0.71,-0.82,-0.82,-0.81,-0.81,-0.77,-0.73,-0.7,-0.66,-0.62,-0.58,-0.56,-0.53,-0.51,-0.48,-0.45,-0.42,-0.39,-0.37,-0.35,-0.32,-0.3,-0.27,-0.27,-0.27,-0.27,-0.25,-0.23,-0.22,-0.23,-0.25,-0.27,-0.27,-0.27,-0.27],13:[-0.49,-0.51,-0.54,-0.52,-0.51,-0.49,-0.5,-0.52,-0.53,-0.51,-0.49,-0.47,-0.47,-0.47,-0.47,-0.46,-0.46,-0.45,-0.47,-0.48,-0.5,-0.51,-0.52,-0.53,-0.5,-0.48,-0.46,-0.32,-0.18,-0.04,0.2,0.45,0.69,0.77,0.85,0.93,0.76,0.59,0.42,0.12,-0.18,-0.48,-0.61,-0.73,-0.86,-0.87,-0.87,-0.88,-0.86,-0.85,-0.83,-0.79,-0.76,-0.72,-0.69,-0.65,-0.62,-0.61,-0.61,-0.6,-0.61,-0.62,-0.63,-0.56,-0.49,-0.42,-0.44,-0.46,-0.47,-0.46,-0.45,-0.44,-0.46,-0.48,-0.49,-0.47,-0.46,-0.44,-0.45,-0.46,-0.47],14:[-0.77,-0.78,-0.79,-0.76,-0.72,-0.69,-0.55,-0.42,-0.29,0.04,0.37,0.7,0.99,1.27,1.55,1.39,1.23,1.08,0.67,0.26,-0.15,-0.56,-0.97,-1.39,-1.38,-1.37,-1.36,-1.35,-1.33,-1.31,-1.32,-1.32,-1.33,-1.25,-1.17,-1.09,-1.07,-1.05,-1.03,-0.98,-0.93,-0.88,-0.86,-0.83,-0.8,-0.79,-0.79,-0.78,-0.75,-0.73,-0.7,-0.71,-0.71,-0.71,-0.71,-0.71,-0.72,-0.7,-0.69,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.71,-0.73,-0.74,-0.76,-0.75,-0.75,-0.75,-0.76,-0.77,-0.78,-0.76,-0.74,-0.72,-0.74,-0.75,-0.76],15:[0.53,0.52,0.52,0.53,0.54,0.56,0.57,0.58,0.59,0.57,0.56,0.54,0.55,0.55,0.56,0.56,0.57,0.57,0.58,0.58,0.59,0.59,0.6,0.6,0.57,0.54,0.51,0.49,0.47,0.45,0.39,0.33,0.26,0.03,-0.2,-0.43,-0.55,-0.67,-0.79,-0.66,-0.54,-0.42,-0.11,0.19,0.5,0.65,0.8,0.95,0.98,1.0,1.03,0.97,0.91,0.85,0.83,0.82,0.81,0.78,0.75,0.72,0.72,0.72,0.72,0.69,0.66,0.63,0.61,0.59,0.57,0.56,0.55,0.55,0.55,0.55,0.56,0.55,0.54,0.53,0.53,0.53,0.53],18:[0.56,0.56,0.56,0.57,0.58,0.59,0.61,0.63,0.65,0.62,0.59,0.56,0.57,0.58,0.59,0.57,0.54,0.52,0.54,0.57,0.59,0.58,0.56,0.54,0.54,0.54,0.54,0.53,0.52,0.51,0.26,0.0,-0.25,-0.78,-1.3,-1.83,-1.98,-2.13,-2.28,-1.96,-1.64,-1.32,-0.7,-0.07,0.56,0.87,1.18,1.48,1.46,1.44,1.42,1.35,1.28,1.21,1.18,1.16,1.14,1.09,1.05,1.0,0.94,0.88,0.82,0.8,0.78,0.76,0.7,0.64,0.58,0.58,0.57,0.57,0.53,0.49,0.45,0.49,0.52,0.55,0.55,0.55,0.55],19:[0.33,0.61,0.89,1.17,1.23,1.29,1.35,1.12,0.89,0.66,0.3,-0.05,-0.41,-0.56,-0.72,-0.87,-0.83,-0.78,-0.74,-0.75,-0.76,-0.77,-0.72,-0.67,-0.63,-0.6,-0.57,-0.54,-0.51,-0.48,-0.45,-0.44,-0.43,-0.42,-0.36,-0.31,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.27,-0.26,-0.24,-0.27,-0.3,-0.33,-0.31,-0.29,-0.27,-0.28,-0.29,-0.3,-0.3,-0.3,-0.29,-0.3,-0.32,-0.33,-0.31,-0.29,-0.27,-0.29,-0.3,-0.32,-0.29,-0.27,-0.24,-0.27,-0.29,-0.31,-0.32,-0.32,-0.32,-0.3,-0.27,-0.25,-0.06,0.14],20:[0.59,0.6,0.61,0.62,0.63,0.63,0.64,0.63,0.62,0.61,0.62,0.63,0.63,0.62,0.62,0.61,0.62,0.62,0.63,0.63,0.62,0.62,0.62,0.61,0.61,0.58,0.56,0.53,0.49,0.45,0.41,0.0,-0.41,-0.81,-1.17,-1.53,-1.89,-1.82,-1.75,-1.69,-1.21,-0.73,-0.26,0.22,0.69,1.17,1.24,1.3,1.37,1.35,1.33,1.3,1.25,1.19,1.13,1.09,1.05,1.01,0.97,0.92,0.87,0.82,0.77,0.72,0.7,0.68,0.66,0.62,0.58,0.54,0.54,0.55,0.56,0.57,0.58,0.59,0.57,0.55,0.53,0.55,0.57],21:[-0.5,-0.48,-0.46,-0.44,-0.45,-0.46,-0.47,-0.47,-0.47,-0.47,-0.44,-0.42,-0.39,-0.43,-0.48,-0.52,-0.46,-0.39,-0.33,-0.36,-0.39,-0.43,-0.43,-0.43,-0.43,-0.41,-0.4,-0.38,-0.21,-0.04,0.14,0.49,0.84,1.2,1.29,1.39,1.48,1.31,1.13,0.95,0.49,0.02,-0.45,-0.66,-0.87,-1.08,-1.07,-1.06,-1.05,-1.01,-0.98,-0.94,-0.91,-0.88,-0.85,-0.82,-0.78,-0.74,-0.7,-0.67,-0.63,-0.58,-0.53,-0.47,-0.47,-0.46,-0.46,-0.43,-0.4,-0.38,-0.4,-0.41,-0.43,-0.43,-0.43,-0.42,-0.44,-0.46,-0.48,-0.48,-0.49],22:[-0.38,-0.37,-0.35,-0.33,-0.34,-0.35,-0.37,-0.38,-0.4,-0.41,-0.4,-0.39,-0.37,-0.38,-0.38,-0.38,-0.39,-0.39,-0.4,-0.38,-0.36,-0.33,-0.18,-0.03,0.12,0.5,0.88,1.26,1.45,1.64,1.83,1.66,1.49,1.31,0.84,0.36,-0.11,-0.43,-0.75,-1.07,-1.05,-1.02,-1.0,-0.97,-0.94,-0.9,-0.87,-0.83,-0.79,-0.77,-0.75,-0.73,-0.69,-0.65,-0.6,-0.57,-0.54,-0.51,-0.49,-0.48,-0.46,-0.43,-0.4,-0.37,-0.36,-0.35,-0.34,-0.33,-0.32,-0.32,-0.34,-0.36,-0.38,-0.4,-0.42,-0.44,-0.4,-0.36,-0.32,-0.34,-0.36],23:[0.22,0.22,0.22,0.22,0.21,0.2,0.2,0.17,0.15,0.12,-0.04,-0.2,-0.36,-0.61,-0.85,-1.09,-1.13,-1.17,-1.21,-0.98,-0.75,-0.51,-0.19,0.14,0.46,0.55,0.63,0.72,0.68,0.63,0.59,0.6,0.61,0.62,0.58,0.55,0.52,0.48,0.44,0.4,0.42,0.45,0.47,0.41,0.35,0.29,0.27,0.26,0.24,0.23,0.23,0.23,0.23,0.23,0.23,0.24,0.25,0.27,0.24,0.2,0.17,0.2,0.22,0.25,0.25,0.25,0.25,0.26,0.27,0.29,0.26,0.23,0.2,0.22,0.23,0.25,0.26,0.26,0.27,0.25,0.23],24:[-0.42,-0.41,-0.41,-0.42,-0.43,-0.44,-0.41,-0.38,-0.35,-0.34,-0.33,-0.32,-0.34,-0.36,-0.38,-0.35,-0.32,-0.29,-0.24,-0.2,-0.15,0.2,0.56,0.92,1.27,1.61,1.96,1.89,1.83,1.76,1.33,0.89,0.45,-0.01,-0.47,-0.94,-0.99,-1.05,-1.1,-1.06,-1.02,-0.98,-0.95,-0.92,-0.88,-0.87,-0.86,-0.84,-0.79,-0.73,-0.67,-0.64,-0.62,-0.6,-0.57,-0.54,-0.52,-0.49,-0.47,-0.44,-0.41,-0.38,-0.35,-0.35,-0.34,-0.34,-0.33,-0.33,-0.33,-0.35,-0.37,-0.39,-0.4,-0.41,-0.41,-0.42,-0.42,-0.43,-0.43,-0.43,-0.43],25:[0.11,0.08,0.05,0.07,0.09,0.1,0.11,0.12,0.12,0.09,0.06,0.03,-0.18,-0.39,-0.59,-0.9,-1.2,-1.51,-1.55,-1.59,-1.63,-1.38,-1.13,-0.89,-0.48,-0.07,0.33,0.45,0.56,0.68,0.66,0.64,0.62,0.59,0.57,0.54,0.52,0.5,0.47,0.44,0.41,0.38,0.35,0.32,0.29,0.26,0.24,0.21,0.19,0.18,0.16,0.14,0.12,0.09,0.09,0.08,0.07,0.07,0.08,0.08,0.1,0.12,0.14,0.1,0.07,0.03,0.07,0.11,0.15,0.13,0.11,0.09,0.08,0.08,0.08,0.1,0.13,0.15,0.15,0.14,0.13],26:[0.3,0.33,0.35,0.24,0.13,0.03,-0.32,-0.67,-1.02,-1.47,-1.93,-2.39,-2.46,-2.53,-2.61,-2.15,-1.7,-1.25,-0.61,0.02,0.66,0.84,1.03,1.22,1.19,1.16,1.14,1.11,1.08,1.05,0.97,0.88,0.8,0.77,0.74,0.71,0.65,0.6,0.54,0.51,0.48,0.44,0.41,0.38,0.34,0.29,0.24,0.19,0.18,0.18,0.17,0.2,0.22,0.25,0.22,0.2,0.18,0.24,0.3,0.37,0.34,0.32,0.3,0.29,0.29,0.29,0.3,0.32,0.33,0.3,0.27,0.24,0.24,0.24,0.24,0.23,0.22,0.21,0.23,0.26,0.28],27:[-0.74,-0.71,-0.67,-0.68,-0.69,-0.7,-0.72,-0.73,-0.74,-0.72,-0.69,-0.66,-0.67,-0.68,-0.69,-0.73,-0.77,-0.81,-0.79,-0.78,-0.77,-0.74,-0.72,-0.7,-0.69,-0.69,-0.68,-0.68,-0.69,-0.69,-0.71,-0.74,-0.76,-0.76,-0.76,-0.77,-0.75,-0.74,-0.73,-0.61,-0.5,-0.38,0.03,0.44,0.85,1.18,1.51,1.83,1.7,1.57,1.44,0.93,0.41,-0.1,-0.55,-0.99,-1.43,-1.45,-1.46,-1.48,-1.45,-1.42,-1.39,-1.32,-1.25,-1.18,-1.15,-1.12,-1.09,-1.06,-1.04,-1.01,-0.99,-0.96,-0.93,-0.89,-0.86,-0.82,-0.81,-0.79,-0.78],28:[0.37,0.36,0.36,0.38,0.39,0.41,0.4,0.4,0.39,0.39,0.38,0.37,0.38,0.39,0.4,0.39,0.37,0.36,0.36,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.36,0.36,0.35,0.34,0.33,0.32,0.16,0.0,-0.16,-0.51,-0.86,-1.21,-1.32,-1.44,-1.55,-1.32,-1.08,-0.85,-0.41,0.03,0.47,0.63,0.79,0.96,0.94,0.92,0.91,0.89,0.87,0.84,0.79,0.73,0.67,0.65,0.62,0.59,0.55,0.52,0.48,0.49,0.5,0.51,0.46,0.41,0.35,0.38,0.4,0.43,0.39,0.36,0.33,0.34,0.36,0.37],29:[0.24,0.22,0.2,0.19,0.19,0.18,0.19,0.21,0.22,0.21,0.2,0.18,0.19,0.2,0.21,0.21,0.2,0.2,0.21,0.22,0.22,0.24,0.26,0.28,0.26,0.24,0.23,0.12,0.01,-0.09,-0.37,-0.65,-0.93,-1.13,-1.33,-1.52,-1.45,-1.37,-1.29,-0.93,-0.56,-0.2,0.1,0.4,0.69,0.71,0.73,0.75,0.72,0.7,0.67,0.64,0.61,0.57,0.53,0.48,0.43,0.43,0.42,0.41,0.4,0.39,0.38,0.38,0.37,0.37,0.3,0.22,0.15,0.17,0.2,0.22,0.22,0.21,0.21,0.22,0.22,0.23,0.24,0.25,0.26],30:[1.75,1.88,2.0,1.68,1.35,1.03,0.48,-0.07,-0.61,-0.88,-1.15,-1.41,-1.38,-1.35,-1.32,-1.27,-1.22,-1.17,-1.14,-1.1,-1.06,-1.02,-0.98,-0.95,-0.9,-0.84,-0.79,-0.77,-0.74,-0.71,-0.66,-0.62,-0.57,-0.56,-0.56,-0.56,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.57,-0.6,-0.63,-0.61,-0.59,-0.56,-0.58,-0.59,-0.6,-0.62,-0.64,-0.66,-0.63,-0.6,-0.57,-0.56,-0.55,-0.54,-0.55,-0.57,-0.58,-0.57,-0.55,-0.54,-0.56,-0.59,-0.61,-0.59,-0.57,-0.54,-0.5,-0.45,-0.41,-0.12,0.17,0.46,0.85,1.24,1.63],31:[-0.25,-0.08,0.08,0.29,0.51,0.72,0.76,0.81,0.86,0.69,0.53,0.37,0.09,-0.18,-0.46,-0.6,-0.73,-0.87,-0.83,-0.8,-0.76,-0.76,-0.76,-0.76,-0.73,-0.7,-0.68,-0.65,-0.63,-0.61,-0.59,-0.57,-0.55,-0.53,-0.52,-0.5,-0.49,-0.48,-0.46,-0.46,-0.47,-0.47,-0.45,-0.44,-0.43,-0.42,-0.41,-0.4,-0.39,-0.38,-0.37,-0.37,-0.37,-0.36,-0.39,-0.42,-0.45,-0.45,-0.46,-0.47,-0.45,-0.43,-0.41,-0.42,-0.42,-0.43,-0.41,-0.39,-0.38,-0.38,-0.39,-0.39,-0.39,-0.39,-0.39,-0.37,-0.36,-0.34,-0.36,-0.39,-0.41],32:[0.2,0.2,0.2,0.22,0.25,0.27,0.28,0.29,0.3,0.28,0.26,0.24,0.24,0.23,0.23,0.24,0.24,0.25,0.24,0.23,0.22,0.2,0.18,0.16,0.14,0.11,0.08,-0.08,-0.25,-0.41,-0.59,-0.78,-0.96,-1.01,-1.05,-1.09,-0.85,-0.61,-0.38,-0.08,0.22,0.51,0.56,0.61,0.66,0.65,0.63,0.62,0.6,0.58,0.56,0.52,0.48,0.44,0.42,0.39,0.37,0.35,0.33,0.32,0.29,0.27,0.24,0.24,0.23,0.22,0.22,0.22,0.22,0.21,0.2,0.19,0.19,0.2,0.2,0.2,0.21,0.21,0.21,0.21,0.21],33:[0.63,0.63,0.62,0.61,0.6,0.59,0.58,0.58,0.57,0.58,0.58,0.59,0.62,0.65,0.68,0.65,0.62,0.59,0.54,0.5,0.45,0.11,-0.23,-0.58,-0.93,-1.28,-1.63,-1.58,-1.54,-1.49,-1.11,-0.72,-0.34,0.14,0.61,1.09,1.15,1.22,1.28,1.28,1.28,1.28,1.24,1.19,1.14,1.13,1.11,1.1,1.04,0.98,0.92,0.87,0.82,0.76,0.75,0.73,0.71,0.68,0.65,0.62,0.6,0.59,0.57,0.58,0.59,0.6,0.6,0.6,0.6,0.59,0.59,0.58,0.57,0.57,0.56,0.56,0.57,0.57,0.59,0.61,0.64],34:[-2.02,-1.9,-1.78,-1.65,-1.19,-0.72,-0.25,0.12,0.5,0.87,0.92,0.97,1.01,0.99,0.96,0.94,0.9,0.85,0.81,0.76,0.72,0.67,0.63,0.6,0.56,0.55,0.53,0.52,0.48,0.44,0.41,0.38,0.36,0.34,0.29,0.25,0.21,0.22,0.22,0.23,0.23,0.24,0.24,0.26,0.27,0.29,0.31,0.33,0.34,0.33,0.32,0.31,0.31,0.31,0.31,0.31,0.31,0.31,0.29,0.27,0.25,0.25,0.25,0.25,0.26,0.27,0.27,0.27,0.27,0.26,0.24,0.22,0.2,0.05,-0.1,-0.25,-0.58,-0.92,-1.25,-1.51,-1.77],35:[-0.25,-0.27,-0.3,-0.32,-0.32,-0.31,-0.31,-0.32,-0.33,-0.34,-0.34,-0.34,-0.34,-0.33,-0.32,-0.3,-0.29,-0.28,-0.26,-0.27,-0.27,-0.28,-0.3,-0.32,-0.34,-0.33,-0.31,-0.3,-0.31,-0.33,-0.35,-0.34,-0.33,-0.33,-0.21,-0.09,0.03,0.27,0.5,0.74,0.89,1.05,1.2,1.05,0.9,0.75,0.41,0.06,-0.28,-0.46,-0.64,-0.83,-0.78,-0.74,-0.7,-0.66,-0.63,-0.59,-0.58,-0.56,-0.55,-0.55,-0.54,-0.54,-0.51,-0.48,-0.46,-0.45,-0.45,-0.45,-0.41,-0.36,-0.32,-0.33,-0.35,-0.36,-0.36,-0.35,-0.34,-0.31,-0.28],36:[-0.63,-0.59,-0.56,-0.52,-0.54,-0.55,-0.57,-0.55,-0.53,-0.51,-0.52,-0.52,-0.53,-0.3,-0.07,0.16,0.51,0.86,1.21,1.39,1.58,1.76,1.51,1.25,0.99,0.52,0.05,-0.42,-0.69,-0.95,-1.22,-1.2,-1.17,-1.15,-1.13,-1.11,-1.09,-1.08,-1.07,-1.06,-1.01,-0.96,-0.91,-0.89,-0.87,-0.85,-0.78,-0.72,-0.66,-0.63,-0.6,-0.57,-0.57,-0.56,-0.56,-0.54,-0.53,-0.51,-0.51,-0.52,-0.52,-0.52,-0.53,-0.54,-0.54,-0.55,-0.55,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.54,-0.53,-0.53,-0.54,-0.55,-0.56,-0.59,-0.61],37:[1.62,1.83,2.04,2.26,1.97,1.68,1.38,0.75,0.12,-0.52,-0.9,-1.28,-1.66,-1.64,-1.62,-1.6,-1.56,-1.51,-1.47,-1.42,-1.38,-1.33,-1.27,-1.2,-1.14,-1.11,-1.09,-1.06,-1.0,-0.94,-0.88,-0.85,-0.83,-0.8,-0.75,-0.7,-0.65,-0.64,-0.63,-0.62,-0.64,-0.66,-0.68,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.74,-0.76,-0.79,-0.76,-0.73,-0.7,-0.72,-0.74,-0.76,-0.74,-0.72,-0.7,-0.71,-0.72,-0.72,-0.72,-0.72,-0.72,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.66,-0.62,-0.57,-0.32,-0.07,0.18,0.66,1.14],38:[0.3,0.33,0.37,0.4,0.41,0.41,0.42,0.41,0.41,0.4,0.42,0.44,0.46,0.43,0.4,0.37,0.38,0.4,0.41,0.43,0.45,0.47,0.44,0.41,0.38,0.39,0.39,0.4,0.39,0.38,0.37,0.29,0.22,0.14,-0.21,-0.57,-0.92,-1.26,-1.59,-1.93,-1.91,-1.9,-1.88,-1.39,-0.89,-0.39,0.06,0.5,0.95,1.02,1.1,1.18,1.14,1.11,1.07,1.01,0.95,0.89,0.85,0.81,0.77,0.77,0.77,0.76,0.7,0.63,0.57,0.54,0.51,0.48,0.46,0.45,0.43,0.41,0.39,0.38,0.38,0.39,0.4,0.37,0.33],}
app/theory_part2.txt (1,175 chars)
DEAD={2:0.177,16:-0.085,17:0.126,39:0.071}
def _y(state):
ph, r, tsl = state['ph'], state['r'], state['tsl']
P = 81.0 - 41.3*min(r,1.0)
ttn = (1.0-ph)*P
y=[]
for c in range(40):
if c in DEAD: y.append(DEAD[c]); continue
t=TPL[c]
if tsl<=50: v=t[int(tsl)%81]
elif ttn<=8.0: v=t[int(81-ttn)%81]
else: v=(t[55]+t[60]+t[65])/3.0
y.append(v)
return y
def init(y_history):
# fresh draws are phase-pinned: first spike ~15 ticks after start
return {'ph': 1.0-15.0/81.0, 'r':0.0, 'floor':0.0, 'tsl':100.0, 'fast_t':0.0, 'latch':0}
def step(state, a):
s=dict(state)
drv = (a[0]>0.4) or (abs(a[1])>0.4) or any(a[p]>0.4 for p in range(2,8))
if a[0]>=0.9: s['latch']=1
if drv:
s['r'] += (1.0-s['r'])/38.0
s['fast_t'] += 1.0
s['floor'] = min(0.55, s['floor']+0.0007)
else:
s['r'] = s['floor'] + (s['r']-s['floor'])*0.9834983
if s['fast_t']>850.0 or s['latch']: s['floor']=1.0; s['r']=max(s['r'],0.9)
P = 81.0 - 41.3*min(s['r'],1.0)
s['ph'] += 1.0/P
s['tsl'] += 1.0
if s['ph']>=1.0:
s['ph']-=1.0; s['tsl']=0.0
return s, _y(s)
app/tpl_literal.txt (16,185 chars)
TPL={0:[0.6,0.6,0.61,0.62,0.62,0.63,0.64,0.65,0.66,0.67,0.68,0.69,0.7,0.68,0.66,0.63,0.63,0.63,0.63,0.62,0.62,0.61,0.62,0.63,0.63,0.63,0.62,0.61,0.63,0.65,0.67,0.63,0.6,0.56,0.34,0.13,-0.08,-0.58,-1.07,-1.56,-1.84,-2.13,-2.41,-2.14,-1.87,-1.6,-0.96,-0.32,0.32,0.72,1.11,1.51,1.51,1.5,1.5,1.45,1.39,1.33,1.29,1.25,1.21,1.18,1.14,1.11,1.01,0.91,0.81,0.81,0.8,0.79,0.78,0.76,0.74,0.69,0.63,0.58,0.58,0.58,0.58,0.58,0.59],1:[-0.8,-0.8,-0.8,-0.8,-0.8,-0.81,-0.82,-0.81,-0.79,-0.77,-0.79,-0.8,-0.81,-0.78,-0.76,-0.73,-0.73,-0.73,-0.73,-0.74,-0.76,-0.77,-0.78,-0.8,-0.81,-0.77,-0.74,-0.71,-0.75,-0.8,-0.85,-0.83,-0.82,-0.8,-0.79,-0.78,-0.77,-0.45,-0.12,0.21,0.88,1.56,2.23,2.17,2.1,2.04,1.64,1.23,0.82,-0.03,-0.88,-1.74,-1.73,-1.72,-1.71,-1.66,-1.61,-1.56,-1.53,-1.49,-1.46,-1.4,-1.35,-1.29,-1.2,-1.11,-1.02,-0.99,-0.97,-0.95,-0.91,-0.87,-0.83,-0.82,-0.8,-0.79,-0.75,-0.71,-0.66,-0.71,-0.75],3:[0.81,0.92,1.04,1.16,1.08,1.0,0.92,0.65,0.39,0.13,-0.05,-0.24,-0.42,-0.46,-0.5,-0.54,-0.51,-0.48,-0.45,-0.42,-0.38,-0.34,-0.35,-0.36,-0.38,-0.35,-0.33,-0.31,-0.27,-0.22,-0.17,-0.16,-0.15,-0.14,-0.12,-0.1,-0.08,-0.07,-0.05,-0.04,-0.04,-0.04,-0.03,-0.08,-0.13,-0.18,-0.17,-0.15,-0.13,-0.14,-0.15,-0.16,-0.13,-0.1,-0.07,-0.1,-0.12,-0.15,-0.12,-0.1,-0.07,-0.09,-0.11,-0.13,-0.15,-0.16,-0.17,-0.15,-0.12,-0.1,-0.09,-0.09,-0.08,-0.08,-0.07,-0.07,-0.01,0.06,0.13,0.35,0.58],4:[2.34,2.06,1.77,1.22,0.58,-0.06,-0.62,-1.0,-1.37,-1.49,-1.49,-1.5,-1.45,-1.4,-1.34,-1.29,-1.25,-1.21,-1.16,-1.11,-1.05,-1.0,-0.95,-0.91,-0.87,-0.83,-0.78,-0.74,-0.7,-0.67,-0.63,-0.59,-0.56,-0.54,-0.53,-0.52,-0.51,-0.5,-0.49,-0.49,-0.5,-0.51,-0.52,-0.54,-0.57,-0.58,-0.58,-0.58,-0.59,-0.58,-0.57,-0.56,-0.55,-0.55,-0.55,-0.54,-0.53,-0.53,-0.53,-0.53,-0.52,-0.53,-0.53,-0.54,-0.55,-0.56,-0.56,-0.56,-0.56,-0.55,-0.49,-0.43,-0.25,0.04,0.34,0.77,1.24,1.71,2.06,2.23,2.41],5:[-0.14,0.13,0.39,0.66,0.95,1.23,1.52,1.49,1.45,1.41,1.06,0.7,0.35,-0.05,-0.45,-0.85,-0.92,-1.0,-1.07,-1.02,-0.97,-0.92,-0.88,-0.84,-0.81,-0.78,-0.76,-0.74,-0.7,-0.65,-0.61,-0.59,-0.57,-0.55,-0.54,-0.52,-0.51,-0.47,-0.44,-0.41,-0.38,-0.35,-0.32,-0.32,-0.33,-0.34,-0.33,-0.33,-0.32,-0.32,-0.32,-0.32,-0.36,-0.39,-0.43,-0.44,-0.45,-0.46,-0.43,-0.39,-0.35,-0.37,-0.38,-0.4,-0.4,-0.4,-0.41,-0.41,-0.41,-0.42,-0.43,-0.45,-0.47,-0.44,-0.41,-0.38,-0.37,-0.35,-0.34,-0.27,-0.21],6:[-0.52,-0.51,-0.49,-0.48,-0.48,-0.49,-0.5,-0.51,-0.51,-0.52,-0.53,-0.54,-0.55,-0.53,-0.51,-0.49,-0.5,-0.52,-0.53,-0.52,-0.5,-0.49,-0.5,-0.5,-0.51,-0.5,-0.49,-0.48,-0.49,-0.5,-0.52,-0.51,-0.51,-0.51,-0.49,-0.47,-0.45,-0.2,0.05,0.31,0.63,0.96,1.29,1.27,1.26,1.25,0.93,0.61,0.3,-0.12,-0.53,-0.95,-1.01,-1.06,-1.12,-1.07,-1.03,-0.99,-0.97,-0.95,-0.94,-0.9,-0.87,-0.84,-0.8,-0.76,-0.72,-0.68,-0.65,-0.61,-0.59,-0.56,-0.53,-0.53,-0.54,-0.54,-0.5,-0.47,-0.43,-0.46,-0.49],7:[-0.7,-0.72,-0.74,-0.73,-0.72,-0.71,-0.71,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.69,-0.68,-0.68,-0.68,-0.68,-0.69,-0.7,-0.71,-0.7,-0.68,-0.66,-0.67,-0.68,-0.69,-0.68,-0.66,-0.65,-0.42,-0.19,0.04,0.48,0.92,1.36,1.5,1.64,1.77,1.43,1.09,0.75,0.23,-0.3,-0.83,-1.03,-1.23,-1.43,-1.41,-1.38,-1.35,-1.32,-1.28,-1.24,-1.21,-1.19,-1.16,-1.13,-1.1,-1.07,-1.02,-0.97,-0.92,-0.88,-0.83,-0.78,-0.75,-0.72,-0.69,-0.66,-0.63,-0.6,-0.62,-0.63,-0.65,-0.66,-0.67,-0.67,-0.68,-0.68,-0.68],8:[-0.33,-0.34,-0.35,-0.33,-0.31,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.29,-0.28,-0.27,-0.28,-0.29,-0.3,-0.25,-0.2,-0.15,0.13,0.41,0.69,0.88,1.07,1.25,1.16,1.06,0.96,0.66,0.37,0.08,-0.19,-0.46,-0.72,-0.74,-0.75,-0.77,-0.74,-0.72,-0.69,-0.66,-0.64,-0.61,-0.58,-0.55,-0.52,-0.52,-0.51,-0.5,-0.48,-0.45,-0.43,-0.4,-0.38,-0.36,-0.35,-0.34,-0.33,-0.32,-0.31,-0.3,-0.29,-0.28,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.31,-0.33,-0.35,-0.33,-0.31,-0.29,-0.3,-0.31,-0.32],9:[0.18,0.17,0.17,0.13,0.1,0.07,0.08,0.09,0.1,0.12,0.13,0.14,0.11,0.08,0.05,0.08,0.1,0.12,0.12,0.12,0.12,0.13,0.15,0.16,0.14,0.13,0.11,0.12,0.12,0.13,0.11,0.09,0.08,0.07,0.07,0.07,0.08,0.1,0.11,0.11,0.11,0.11,0.09,0.07,0.05,-0.15,-0.35,-0.55,-0.77,-0.99,-1.22,-1.26,-1.3,-1.34,-1.13,-0.92,-0.71,-0.37,-0.04,0.3,0.4,0.5,0.61,0.59,0.58,0.57,0.53,0.49,0.45,0.42,0.39,0.35,0.35,0.35,0.35,0.32,0.29,0.25,0.23,0.21,0.19],10:[1.51,1.34,1.18,0.72,0.27,-0.19,-0.53,-0.87,-1.21,-1.22,-1.24,-1.25,-1.22,-1.18,-1.15,-1.11,-1.06,-1.02,-0.98,-0.94,-0.9,-0.86,-0.83,-0.8,-0.77,-0.74,-0.71,-0.68,-0.65,-0.63,-0.59,-0.55,-0.51,-0.49,-0.48,-0.47,-0.47,-0.47,-0.47,-0.48,-0.49,-0.51,-0.5,-0.48,-0.47,-0.48,-0.49,-0.5,-0.53,-0.55,-0.58,-0.56,-0.54,-0.52,-0.52,-0.52,-0.53,-0.52,-0.52,-0.51,-0.49,-0.47,-0.46,-0.47,-0.49,-0.5,-0.5,-0.5,-0.5,-0.47,-0.44,-0.41,-0.22,-0.03,0.15,0.5,0.84,1.18,1.35,1.51,1.68],11:[-0.34,-0.32,-0.3,-0.32,-0.34,-0.36,-0.35,-0.34,-0.33,-0.35,-0.36,-0.37,-0.36,-0.34,-0.33,-0.34,-0.35,-0.35,-0.36,-0.37,-0.37,-0.38,-0.38,-0.38,-0.36,-0.33,-0.31,-0.33,-0.34,-0.36,-0.35,-0.34,-0.33,-0.34,-0.35,-0.36,-0.25,-0.14,-0.03,0.59,1.21,1.83,2.07,2.3,2.54,2.34,2.15,1.95,1.15,0.36,-0.44,-0.7,-0.97,-1.23,-1.19,-1.15,-1.12,-1.08,-1.04,-0.99,-0.95,-0.91,-0.87,-0.82,-0.77,-0.71,-0.68,-0.65,-0.62,-0.58,-0.54,-0.5,-0.45,-0.41,-0.36,-0.33,-0.29,-0.25,-0.29,-0.32,-0.35],12:[-0.26,-0.26,-0.26,-0.27,-0.29,-0.31,-0.28,-0.25,-0.23,-0.25,-0.28,-0.31,-0.32,-0.33,-0.34,-0.32,-0.31,-0.3,-0.3,-0.31,-0.31,-0.29,-0.26,-0.23,-0.24,-0.25,-0.26,-0.26,-0.27,-0.27,-0.06,0.15,0.37,0.67,0.98,1.29,1.37,1.46,1.55,1.27,0.99,0.71,0.31,-0.08,-0.48,-0.59,-0.71,-0.82,-0.82,-0.81,-0.81,-0.77,-0.73,-0.7,-0.66,-0.62,-0.58,-0.56,-0.53,-0.51,-0.48,-0.45,-0.42,-0.39,-0.37,-0.35,-0.32,-0.3,-0.27,-0.27,-0.27,-0.27,-0.25,-0.23,-0.22,-0.23,-0.25,-0.27,-0.27,-0.27,-0.27],13:[-0.49,-0.51,-0.54,-0.52,-0.51,-0.49,-0.5,-0.52,-0.53,-0.51,-0.49,-0.47,-0.47,-0.47,-0.47,-0.46,-0.46,-0.45,-0.47,-0.48,-0.5,-0.51,-0.52,-0.53,-0.5,-0.48,-0.46,-0.32,-0.18,-0.04,0.2,0.45,0.69,0.77,0.85,0.93,0.76,0.59,0.42,0.12,-0.18,-0.48,-0.61,-0.73,-0.86,-0.87,-0.87,-0.88,-0.86,-0.85,-0.83,-0.79,-0.76,-0.72,-0.69,-0.65,-0.62,-0.61,-0.61,-0.6,-0.61,-0.62,-0.63,-0.56,-0.49,-0.42,-0.44,-0.46,-0.47,-0.46,-0.45,-0.44,-0.46,-0.48,-0.49,-0.47,-0.46,-0.44,-0.45,-0.46,-0.47],14:[-0.77,-0.78,-0.79,-0.76,-0.72,-0.69,-0.55,-0.42,-0.29,0.04,0.37,0.7,0.99,1.27,1.55,1.39,1.23,1.08,0.67,0.26,-0.15,-0.56,-0.97,-1.39,-1.38,-1.37,-1.36,-1.35,-1.33,-1.31,-1.32,-1.32,-1.33,-1.25,-1.17,-1.09,-1.07,-1.05,-1.03,-0.98,-0.93,-0.88,-0.86,-0.83,-0.8,-0.79,-0.79,-0.78,-0.75,-0.73,-0.7,-0.71,-0.71,-0.71,-0.71,-0.71,-0.72,-0.7,-0.69,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.71,-0.73,-0.74,-0.76,-0.75,-0.75,-0.75,-0.76,-0.77,-0.78,-0.76,-0.74,-0.72,-0.74,-0.75,-0.76],15:[0.53,0.52,0.52,0.53,0.54,0.56,0.57,0.58,0.59,0.57,0.56,0.54,0.55,0.55,0.56,0.56,0.57,0.57,0.58,0.58,0.59,0.59,0.6,0.6,0.57,0.54,0.51,0.49,0.47,0.45,0.39,0.33,0.26,0.03,-0.2,-0.43,-0.55,-0.67,-0.79,-0.66,-0.54,-0.42,-0.11,0.19,0.5,0.65,0.8,0.95,0.98,1.0,1.03,0.97,0.91,0.85,0.83,0.82,0.81,0.78,0.75,0.72,0.72,0.72,0.72,0.69,0.66,0.63,0.61,0.59,0.57,0.56,0.55,0.55,0.55,0.55,0.56,0.55,0.54,0.53,0.53,0.53,0.53],18:[0.56,0.56,0.56,0.57,0.58,0.59,0.61,0.63,0.65,0.62,0.59,0.56,0.57,0.58,0.59,0.57,0.54,0.52,0.54,0.57,0.59,0.58,0.56,0.54,0.54,0.54,0.54,0.53,0.52,0.51,0.26,0.0,-0.25,-0.78,-1.3,-1.83,-1.98,-2.13,-2.28,-1.96,-1.64,-1.32,-0.7,-0.07,0.56,0.87,1.18,1.48,1.46,1.44,1.42,1.35,1.28,1.21,1.18,1.16,1.14,1.09,1.05,1.0,0.94,0.88,0.82,0.8,0.78,0.76,0.7,0.64,0.58,0.58,0.57,0.57,0.53,0.49,0.45,0.49,0.52,0.55,0.55,0.55,0.55],19:[0.33,0.61,0.89,1.17,1.23,1.29,1.35,1.12,0.89,0.66,0.3,-0.05,-0.41,-0.56,-0.72,-0.87,-0.83,-0.78,-0.74,-0.75,-0.76,-0.77,-0.72,-0.67,-0.63,-0.6,-0.57,-0.54,-0.51,-0.48,-0.45,-0.44,-0.43,-0.42,-0.36,-0.31,-0.26,-0.26,-0.26,-0.26,-0.27,-0.28,-0.29,-0.27,-0.26,-0.24,-0.27,-0.3,-0.33,-0.31,-0.29,-0.27,-0.28,-0.29,-0.3,-0.3,-0.3,-0.29,-0.3,-0.32,-0.33,-0.31,-0.29,-0.27,-0.29,-0.3,-0.32,-0.29,-0.27,-0.24,-0.27,-0.29,-0.31,-0.32,-0.32,-0.32,-0.3,-0.27,-0.25,-0.06,0.14],20:[0.59,0.6,0.61,0.62,0.63,0.63,0.64,0.63,0.62,0.61,0.62,0.63,0.63,0.62,0.62,0.61,0.62,0.62,0.63,0.63,0.62,0.62,0.62,0.61,0.61,0.58,0.56,0.53,0.49,0.45,0.41,0.0,-0.41,-0.81,-1.17,-1.53,-1.89,-1.82,-1.75,-1.69,-1.21,-0.73,-0.26,0.22,0.69,1.17,1.24,1.3,1.37,1.35,1.33,1.3,1.25,1.19,1.13,1.09,1.05,1.01,0.97,0.92,0.87,0.82,0.77,0.72,0.7,0.68,0.66,0.62,0.58,0.54,0.54,0.55,0.56,0.57,0.58,0.59,0.57,0.55,0.53,0.55,0.57],21:[-0.5,-0.48,-0.46,-0.44,-0.45,-0.46,-0.47,-0.47,-0.47,-0.47,-0.44,-0.42,-0.39,-0.43,-0.48,-0.52,-0.46,-0.39,-0.33,-0.36,-0.39,-0.43,-0.43,-0.43,-0.43,-0.41,-0.4,-0.38,-0.21,-0.04,0.14,0.49,0.84,1.2,1.29,1.39,1.48,1.31,1.13,0.95,0.49,0.02,-0.45,-0.66,-0.87,-1.08,-1.07,-1.06,-1.05,-1.01,-0.98,-0.94,-0.91,-0.88,-0.85,-0.82,-0.78,-0.74,-0.7,-0.67,-0.63,-0.58,-0.53,-0.47,-0.47,-0.46,-0.46,-0.43,-0.4,-0.38,-0.4,-0.41,-0.43,-0.43,-0.43,-0.42,-0.44,-0.46,-0.48,-0.48,-0.49],22:[-0.38,-0.37,-0.35,-0.33,-0.34,-0.35,-0.37,-0.38,-0.4,-0.41,-0.4,-0.39,-0.37,-0.38,-0.38,-0.38,-0.39,-0.39,-0.4,-0.38,-0.36,-0.33,-0.18,-0.03,0.12,0.5,0.88,1.26,1.45,1.64,1.83,1.66,1.49,1.31,0.84,0.36,-0.11,-0.43,-0.75,-1.07,-1.05,-1.02,-1.0,-0.97,-0.94,-0.9,-0.87,-0.83,-0.79,-0.77,-0.75,-0.73,-0.69,-0.65,-0.6,-0.57,-0.54,-0.51,-0.49,-0.48,-0.46,-0.43,-0.4,-0.37,-0.36,-0.35,-0.34,-0.33,-0.32,-0.32,-0.34,-0.36,-0.38,-0.4,-0.42,-0.44,-0.4,-0.36,-0.32,-0.34,-0.36],23:[0.22,0.22,0.22,0.22,0.21,0.2,0.2,0.17,0.15,0.12,-0.04,-0.2,-0.36,-0.61,-0.85,-1.09,-1.13,-1.17,-1.21,-0.98,-0.75,-0.51,-0.19,0.14,0.46,0.55,0.63,0.72,0.68,0.63,0.59,0.6,0.61,0.62,0.58,0.55,0.52,0.48,0.44,0.4,0.42,0.45,0.47,0.41,0.35,0.29,0.27,0.26,0.24,0.23,0.23,0.23,0.23,0.23,0.23,0.24,0.25,0.27,0.24,0.2,0.17,0.2,0.22,0.25,0.25,0.25,0.25,0.26,0.27,0.29,0.26,0.23,0.2,0.22,0.23,0.25,0.26,0.26,0.27,0.25,0.23],24:[-0.42,-0.41,-0.41,-0.42,-0.43,-0.44,-0.41,-0.38,-0.35,-0.34,-0.33,-0.32,-0.34,-0.36,-0.38,-0.35,-0.32,-0.29,-0.24,-0.2,-0.15,0.2,0.56,0.92,1.27,1.61,1.96,1.89,1.83,1.76,1.33,0.89,0.45,-0.01,-0.47,-0.94,-0.99,-1.05,-1.1,-1.06,-1.02,-0.98,-0.95,-0.92,-0.88,-0.87,-0.86,-0.84,-0.79,-0.73,-0.67,-0.64,-0.62,-0.6,-0.57,-0.54,-0.52,-0.49,-0.47,-0.44,-0.41,-0.38,-0.35,-0.35,-0.34,-0.34,-0.33,-0.33,-0.33,-0.35,-0.37,-0.39,-0.4,-0.41,-0.41,-0.42,-0.42,-0.43,-0.43,-0.43,-0.43],25:[0.11,0.08,0.05,0.07,0.09,0.1,0.11,0.12,0.12,0.09,0.06,0.03,-0.18,-0.39,-0.59,-0.9,-1.2,-1.51,-1.55,-1.59,-1.63,-1.38,-1.13,-0.89,-0.48,-0.07,0.33,0.45,0.56,0.68,0.66,0.64,0.62,0.59,0.57,0.54,0.52,0.5,0.47,0.44,0.41,0.38,0.35,0.32,0.29,0.26,0.24,0.21,0.19,0.18,0.16,0.14,0.12,0.09,0.09,0.08,0.07,0.07,0.08,0.08,0.1,0.12,0.14,0.1,0.07,0.03,0.07,0.11,0.15,0.13,0.11,0.09,0.08,0.08,0.08,0.1,0.13,0.15,0.15,0.14,0.13],26:[0.3,0.33,0.35,0.24,0.13,0.03,-0.32,-0.67,-1.02,-1.47,-1.93,-2.39,-2.46,-2.53,-2.61,-2.15,-1.7,-1.25,-0.61,0.02,0.66,0.84,1.03,1.22,1.19,1.16,1.14,1.11,1.08,1.05,0.97,0.88,0.8,0.77,0.74,0.71,0.65,0.6,0.54,0.51,0.48,0.44,0.41,0.38,0.34,0.29,0.24,0.19,0.18,0.18,0.17,0.2,0.22,0.25,0.22,0.2,0.18,0.24,0.3,0.37,0.34,0.32,0.3,0.29,0.29,0.29,0.3,0.32,0.33,0.3,0.27,0.24,0.24,0.24,0.24,0.23,0.22,0.21,0.23,0.26,0.28],27:[-0.74,-0.71,-0.67,-0.68,-0.69,-0.7,-0.72,-0.73,-0.74,-0.72,-0.69,-0.66,-0.67,-0.68,-0.69,-0.73,-0.77,-0.81,-0.79,-0.78,-0.77,-0.74,-0.72,-0.7,-0.69,-0.69,-0.68,-0.68,-0.69,-0.69,-0.71,-0.74,-0.76,-0.76,-0.76,-0.77,-0.75,-0.74,-0.73,-0.61,-0.5,-0.38,0.03,0.44,0.85,1.18,1.51,1.83,1.7,1.57,1.44,0.93,0.41,-0.1,-0.55,-0.99,-1.43,-1.45,-1.46,-1.48,-1.45,-1.42,-1.39,-1.32,-1.25,-1.18,-1.15,-1.12,-1.09,-1.06,-1.04,-1.01,-0.99,-0.96,-0.93,-0.89,-0.86,-0.82,-0.81,-0.79,-0.78],28:[0.37,0.36,0.36,0.38,0.39,0.41,0.4,0.4,0.39,0.39,0.38,0.37,0.38,0.39,0.4,0.39,0.37,0.36,0.36,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.37,0.36,0.36,0.35,0.34,0.33,0.32,0.16,0.0,-0.16,-0.51,-0.86,-1.21,-1.32,-1.44,-1.55,-1.32,-1.08,-0.85,-0.41,0.03,0.47,0.63,0.79,0.96,0.94,0.92,0.91,0.89,0.87,0.84,0.79,0.73,0.67,0.65,0.62,0.59,0.55,0.52,0.48,0.49,0.5,0.51,0.46,0.41,0.35,0.38,0.4,0.43,0.39,0.36,0.33,0.34,0.36,0.37],29:[0.24,0.22,0.2,0.19,0.19,0.18,0.19,0.21,0.22,0.21,0.2,0.18,0.19,0.2,0.21,0.21,0.2,0.2,0.21,0.22,0.22,0.24,0.26,0.28,0.26,0.24,0.23,0.12,0.01,-0.09,-0.37,-0.65,-0.93,-1.13,-1.33,-1.52,-1.45,-1.37,-1.29,-0.93,-0.56,-0.2,0.1,0.4,0.69,0.71,0.73,0.75,0.72,0.7,0.67,0.64,0.61,0.57,0.53,0.48,0.43,0.43,0.42,0.41,0.4,0.39,0.38,0.38,0.37,0.37,0.3,0.22,0.15,0.17,0.2,0.22,0.22,0.21,0.21,0.22,0.22,0.23,0.24,0.25,0.26],30:[1.75,1.88,2.0,1.68,1.35,1.03,0.48,-0.07,-0.61,-0.88,-1.15,-1.41,-1.38,-1.35,-1.32,-1.27,-1.22,-1.17,-1.14,-1.1,-1.06,-1.02,-0.98,-0.95,-0.9,-0.84,-0.79,-0.77,-0.74,-0.71,-0.66,-0.62,-0.57,-0.56,-0.56,-0.56,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.57,-0.6,-0.63,-0.61,-0.59,-0.56,-0.58,-0.59,-0.6,-0.62,-0.64,-0.66,-0.63,-0.6,-0.57,-0.56,-0.55,-0.54,-0.55,-0.57,-0.58,-0.57,-0.55,-0.54,-0.56,-0.59,-0.61,-0.59,-0.57,-0.54,-0.5,-0.45,-0.41,-0.12,0.17,0.46,0.85,1.24,1.63],31:[-0.25,-0.08,0.08,0.29,0.51,0.72,0.76,0.81,0.86,0.69,0.53,0.37,0.09,-0.18,-0.46,-0.6,-0.73,-0.87,-0.83,-0.8,-0.76,-0.76,-0.76,-0.76,-0.73,-0.7,-0.68,-0.65,-0.63,-0.61,-0.59,-0.57,-0.55,-0.53,-0.52,-0.5,-0.49,-0.48,-0.46,-0.46,-0.47,-0.47,-0.45,-0.44,-0.43,-0.42,-0.41,-0.4,-0.39,-0.38,-0.37,-0.37,-0.37,-0.36,-0.39,-0.42,-0.45,-0.45,-0.46,-0.47,-0.45,-0.43,-0.41,-0.42,-0.42,-0.43,-0.41,-0.39,-0.38,-0.38,-0.39,-0.39,-0.39,-0.39,-0.39,-0.37,-0.36,-0.34,-0.36,-0.39,-0.41],32:[0.2,0.2,0.2,0.22,0.25,0.27,0.28,0.29,0.3,0.28,0.26,0.24,0.24,0.23,0.23,0.24,0.24,0.25,0.24,0.23,0.22,0.2,0.18,0.16,0.14,0.11,0.08,-0.08,-0.25,-0.41,-0.59,-0.78,-0.96,-1.01,-1.05,-1.09,-0.85,-0.61,-0.38,-0.08,0.22,0.51,0.56,0.61,0.66,0.65,0.63,0.62,0.6,0.58,0.56,0.52,0.48,0.44,0.42,0.39,0.37,0.35,0.33,0.32,0.29,0.27,0.24,0.24,0.23,0.22,0.22,0.22,0.22,0.21,0.2,0.19,0.19,0.2,0.2,0.2,0.21,0.21,0.21,0.21,0.21],33:[0.63,0.63,0.62,0.61,0.6,0.59,0.58,0.58,0.57,0.58,0.58,0.59,0.62,0.65,0.68,0.65,0.62,0.59,0.54,0.5,0.45,0.11,-0.23,-0.58,-0.93,-1.28,-1.63,-1.58,-1.54,-1.49,-1.11,-0.72,-0.34,0.14,0.61,1.09,1.15,1.22,1.28,1.28,1.28,1.28,1.24,1.19,1.14,1.13,1.11,1.1,1.04,0.98,0.92,0.87,0.82,0.76,0.75,0.73,0.71,0.68,0.65,0.62,0.6,0.59,0.57,0.58,0.59,0.6,0.6,0.6,0.6,0.59,0.59,0.58,0.57,0.57,0.56,0.56,0.57,0.57,0.59,0.61,0.64],34:[-2.02,-1.9,-1.78,-1.65,-1.19,-0.72,-0.25,0.12,0.5,0.87,0.92,0.97,1.01,0.99,0.96,0.94,0.9,0.85,0.81,0.76,0.72,0.67,0.63,0.6,0.56,0.55,0.53,0.52,0.48,0.44,0.41,0.38,0.36,0.34,0.29,0.25,0.21,0.22,0.22,0.23,0.23,0.24,0.24,0.26,0.27,0.29,0.31,0.33,0.34,0.33,0.32,0.31,0.31,0.31,0.31,0.31,0.31,0.31,0.29,0.27,0.25,0.25,0.25,0.25,0.26,0.27,0.27,0.27,0.27,0.26,0.24,0.22,0.2,0.05,-0.1,-0.25,-0.58,-0.92,-1.25,-1.51,-1.77],35:[-0.25,-0.27,-0.3,-0.32,-0.32,-0.31,-0.31,-0.32,-0.33,-0.34,-0.34,-0.34,-0.34,-0.33,-0.32,-0.3,-0.29,-0.28,-0.26,-0.27,-0.27,-0.28,-0.3,-0.32,-0.34,-0.33,-0.31,-0.3,-0.31,-0.33,-0.35,-0.34,-0.33,-0.33,-0.21,-0.09,0.03,0.27,0.5,0.74,0.89,1.05,1.2,1.05,0.9,0.75,0.41,0.06,-0.28,-0.46,-0.64,-0.83,-0.78,-0.74,-0.7,-0.66,-0.63,-0.59,-0.58,-0.56,-0.55,-0.55,-0.54,-0.54,-0.51,-0.48,-0.46,-0.45,-0.45,-0.45,-0.41,-0.36,-0.32,-0.33,-0.35,-0.36,-0.36,-0.35,-0.34,-0.31,-0.28],36:[-0.63,-0.59,-0.56,-0.52,-0.54,-0.55,-0.57,-0.55,-0.53,-0.51,-0.52,-0.52,-0.53,-0.3,-0.07,0.16,0.51,0.86,1.21,1.39,1.58,1.76,1.51,1.25,0.99,0.52,0.05,-0.42,-0.69,-0.95,-1.22,-1.2,-1.17,-1.15,-1.13,-1.11,-1.09,-1.08,-1.07,-1.06,-1.01,-0.96,-0.91,-0.89,-0.87,-0.85,-0.78,-0.72,-0.66,-0.63,-0.6,-0.57,-0.57,-0.56,-0.56,-0.54,-0.53,-0.51,-0.51,-0.52,-0.52,-0.52,-0.53,-0.54,-0.54,-0.55,-0.55,-0.52,-0.49,-0.45,-0.48,-0.51,-0.54,-0.54,-0.53,-0.53,-0.54,-0.55,-0.56,-0.59,-0.61],37:[1.62,1.83,2.04,2.26,1.97,1.68,1.38,0.75,0.12,-0.52,-0.9,-1.28,-1.66,-1.64,-1.62,-1.6,-1.56,-1.51,-1.47,-1.42,-1.38,-1.33,-1.27,-1.2,-1.14,-1.11,-1.09,-1.06,-1.0,-0.94,-0.88,-0.85,-0.83,-0.8,-0.75,-0.7,-0.65,-0.64,-0.63,-0.62,-0.64,-0.66,-0.68,-0.68,-0.68,-0.69,-0.7,-0.7,-0.71,-0.74,-0.76,-0.79,-0.76,-0.73,-0.7,-0.72,-0.74,-0.76,-0.74,-0.72,-0.7,-0.71,-0.72,-0.72,-0.72,-0.72,-0.72,-0.71,-0.71,-0.71,-0.71,-0.7,-0.7,-0.66,-0.62,-0.57,-0.32,-0.07,0.18,0.66,1.14],38:[0.3,0.33,0.37,0.4,0.41,0.41,0.42,0.41,0.41,0.4,0.42,0.44,0.46,0.43,0.4,0.37,0.38,0.4,0.41,0.43,0.45,0.47,0.44,0.41,0.38,0.39,0.39,0.4,0.39,0.38,0.37,0.29,0.22,0.14,-0.21,-0.57,-0.92,-1.26,-1.59,-1.93,-1.91,-1.9,-1.88,-1.39,-0.89,-0.39,0.06,0.5,0.95,1.02,1.1,1.18,1.14,1.11,1.07,1.01,0.95,0.89,0.85,0.81,0.77,0.77,0.77,0.76,0.7,0.63,0.57,0.54,0.51,0.48,0.46,0.45,0.43,0.41,0.39,0.38,0.38,0.39,0.4,0.37,0.33],}
Executable theory
accuracy 0.561 · per-stratum {'S1': 0.86, 'S2': 0.58, 'S3': 0.62, 'S4': 0.19} · 17,360 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.494 | 0.291 | 0.1 | 0.888 | ✓ |
| 1 | S1 | +2.000 | 1.000 | 2.0 | 0.140 | ✗ |
| 2 | S1 | +0.296 | 0.233 | 0.4 | 0.662 | ✓ |
| 3 | S1 | +3.000 | 1.000 | 3.0 | 0.051 | ✗ |
| 4 | S2 | +0.236 | 0.182 | 1.8 | 0.158 | ✓ |
| 5 | S2 | +5.000 | 1.000 | 4.8 | 0.009 | ✗ |
| 6 | S2 | +0.629 | 0.235 | 2.0 | 0.130 | ✗ |
| 7 | S2 | +0.000 | 1.000 | 0.8 | 0.458 | ✗ |
| 8 | S3 | +0.625 | 0.235 | 3.9 | 0.019 | ✗ |
| 9 | S3 | +3.000 | 1.000 | 2.9 | 0.055 | ✗ |
| 10 | S3 | -0.305 | 0.176 | 2.2 | 0.112 | ✓ |
| 11 | S3 | +2.000 | 1.000 | 1.9 | 0.150 | ✗ |
| 12 | S4 | -0.206 | 0.143 | 2.8 | 0.059 | ✓ |
| 13 | S4 | +3.000 | 1.000 | 2.9 | 0.056 | ✗ |
| 14 | S4 | -0.505 | 0.135 | 0.6 | 0.533 | ✓ |
| 15 | S4 | +3.583 | 3.112 | 1.1 | 0.327 | ✗ |
Verbatim log (255 entries)
physim.status({})
physim.status({})
{"budget_left": 200000, "phase": "explore"}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
I'll start by observing the system at rest, then probe each input port.
{"ticks_run": 200, "budget_left": 199800}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [3, 4, 5, 26, 30, 37], "series": true, "max_numbers": 360})
Baseline recorded. Many channels have low noise (~0.05 sd), several are highly variable (osc/noise). Let me look at time series of some volatile channels and check stationarity.
{"ticks_run": 300, "budget_left": 199500}
physim.run({"segments": [{"t": 200, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 200, "budget_left": 199300}
physim.run({"segments": [{"t": 240, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 4, 26, 30, 37, 14], "series": true, "max_numbers": 360})
Port 0 strongly excites oscillations across many channels. Let me see the waveform under drive.
{"ticks_run": 240, "budget_left": 199060}
physim.run({"segments": [{"t": 250, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all", "series": true, "max_numbers": 300})
{"error": "series observation limited to <=6 channels"}
physim.run({"segments": [{"t": 250, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 250, "budget_left": 198560}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
The oscillator persists at u0=-0.8 but slows. Now let me map DC responses for the other 7 ports. I'll record everything to a notes file as I go.
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
The oscillator persists at u0=-0.8 but slows. Now let me map DC responses for the other 7 ports. I'll record everything to a notes file as I go.
{"ticks_run": 320, "budget_left": 198240}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0.8, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 320, "budget_left": 197920}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 320, "budget_left": 197600}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 320, "budget_left": 197280}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}], "channels": "all"})
{"ticks_run": 320, "budget_left": 196960}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": "all"})
{"ticks_run": 320, "budget_left": 196640}
physim.run({"segments": [{"t": 100, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 220, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}], "channels": "all"})
Port 6 positive nearly silences the main oscillator — very useful. Continuing with port 7, then I'll dig into port 6.
{"ticks_run": 320, "budget_left": 196320}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": [0, 4, 18, 25, 26, 36], "series": true, "max_numbers": 360})
Port 7 responses look nearly identical to port 3 — likely the same latent pathway. Now let me examine what survives when port 6 silences the main oscillator.
{"ticks_run": 300, "budget_left": 196020}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 700, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": [4], "series": true, "max_numbers": 360, "stride": 3})
The oscillation resumed under sustained u6=0.8 (period ≈ 40) — so port 6's suppression is transient. There's slow adaptation here. Let me characterize the port-6 step response over a long window.
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 700, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": [4], "series": true, "max_numbers": 360, "stride": 3})
The oscillation resumed under sustained u6=0.8 (period ≈ 40) — so port 6's suppression is transient. There's slow adaptation here. Let me characterize the port-6 step response over a long window.
{"ticks_run": 900, "budget_left": 195120}
physim.run({"segments": [{"t": 200, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 26, 18, 25, 36, 0], "series": true, )
{"ticks_run": 700, "budget_left": 194420}
physim.run({"segments": [{"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 310, "stride": 2})
{"ticks_run": 600, "budget_left": 193820}
physim.run({"segments": [{"t": 520, "u": [-1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
{"ticks_run": 520, "budget_left": 193300}
physim.run({"segments": [{"t": 520, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
u0=−1 barely slows it (period ~82 vs 80). The frequency response may be rectified. Testing positive levels.
{"ticks_run": 520, "budget_left": 192780}
physim.run({"segments": [{"t": 520, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
{"ticks_run": 520, "budget_left": 192260}
physim.run({"segments": [{"t": 520, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
{"ticks_run": 520, "budget_left": 191740}
physim.run({"segments": [{"t": 520, "u": [0, 0, 0.8, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
{"ticks_run": 520, "budget_left": 191220}
Write: /app/notes.md
Let me record findings so far in a notes file, then continue the frequency mapping at lower amplitudes where the response curve is steep.
Write: /app/notes.md
Let me record findings so far in a notes file, then continue the frequency mapping at lower amplitudes where the response curve is steep.
physim.run({"segments": [{"t": 520, "u": [0.15, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
{"ticks_run": 520, "budget_left": 190700}
physim.run({"segments": [{"t": 520, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 2})
u0=0.15 gives period ~40 — surprisingly fast for such small input, possibly history-dependent. Re-checking the u=0 baseline immediately after this drive history.
{"ticks_run": 520, "budget_left": 190180}
physim.run({"segments": [{"t": 1600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 6})
{"ticks_run": 1600, "budget_left": 188580}
physim.run({"segments": [{"t": 600, "u": [-1, -1, -1, -1, -1, -1, -1, -1]}, {"t": 700, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 270, "stride": 5})
Fast rate persists ≥2100 ticks at zero input — likely a bistable rate branch or ultra-slow adaptation. Testing whether strong negative drive switches it back to the slow branch.
{"ticks_run": 1300, "budget_left": 187280}
physim.reset({})
{"budget_left": 187080}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 260, "stride": 2})
{"ticks_run": 500, "budget_left": 186580}
physim.run({"segments": [{"t": 800, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 5})
Fresh draw starts on the slow branch (period ~82), same as the first draw. Now: how long must strong drive last to flip the branch? Testing 800 ticks of u0=+1, then release.
physim.run({"segments": [{"t": 800, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 5})
Fresh draw starts on the slow branch (period ~82), same as the first draw. Now: how long must strong drive last to flip the branch? Testing 800 ticks of u0=+1, then release.
{"ticks_run": 1400, "budget_left": 185180}
physim.reset({})
800 ticks of u0=+1 flips it to the persistent fast branch. Now testing 400 ticks of the same drive.
{"budget_left": 184980}
physim.run({"segments": [{"t": 400, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 5})
{"ticks_run": 1200, "budget_left": 183780}
physim.reset({})
400 ticks at u0=+1 also flips it, while ≤700 ticks at 0.8 didn't — the flip threshold seems amplitude-dependent (between 0.8 and 1.0). Testing a short 150-tick pulse at +1.
{"budget_left": 183580}
physim.run({"segments": [{"t": 150, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 850, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 4})
{"ticks_run": 1000, "budget_left": 182580}
physim.reset({})
Even a 150-tick pulse at u0=+1 latches the fast branch. This is a threshold latch (set by strong input, ~0.9–1.0). Testing which ports can set it: port 1 first.
{"budget_left": 182380}
physim.run({"segments": [{"t": 200, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 3})
physim.run({"segments": [{"t": 200, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 3})
{"ticks_run": 800, "budget_left": 181580}
physim.reset({})
Port 1 at full strength does NOT set the latch (returns to slow ~81). The latch is port-specific. Testing ports 2–7 together at +1.
{"budget_left": 181380}
physim.run({"segments": [{"t": 200, "u": [0, 0, 1, 1, 1, 1, 1, 1]}, {"t": 600, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 280, "stride": 3})
{"ticks_run": 800, "budget_left": 180580}
physim.run({"segments": [{"t": 60, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [0, 1, 0, 0, 0, 0, 0, 0]}, {"t": 237, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 60, "u": [)
{"ticks_run": 960, "budget_left": 179620}
physim.run({"segments": [{"t": 700, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 240, "stride": 3})
{"ticks_run": 700, "budget_left": 178920}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 0, 1, 2, 3, 5], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178860}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 6, 7, 8, 9, 10], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178800}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 11, 12, 13, 14, 15], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178740}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 16, 17, 18, 19, 20], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178680}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 21, 22, 23, 24, 25], "series": true, "max_numbers": 360, "stride": 1})
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 21, 22, 23, 24, 25], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178620}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 26, 27, 28, 29, 30], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178560}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 31, 32, 33, 34, 35], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178500}
physim.run({"segments": [{"t": 60, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 36, 37, 38, 39, 0], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 60, "budget_left": 178440}
Write: /app/data_fast_wave.py
All 40 fast-branch waveforms captured. Now I'll persist this data to the workspace for offline fitting.
Write: /app/analyze_fast.py
Now the analysis script to build phase-aligned templates and per-channel statistics:
Write: /app/templates.py
Period ≈ 39. Now build phase-aligned templates for all 40 channels and derive per-channel stats:
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 178284}
physim.run({"segments": [{"t": 156, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 178128}
physim.run({"segments": [{"t": 156, "u": [-0.6, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
u0=+0.6 shows essentially zero DC shift — port 0 is frequency/latch only. Continuing through all ports.
{"ticks_run": 156, "budget_left": 177972}
physim.run({"segments": [{"t": 156, "u": [0, 0.6, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177816}
physim.run({"segments": [{"t": 156, "u": [0, -0.6, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177660}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177504}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0.6, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177348}
physim.run({"segments": [{"t": 156, "u": [0, 0, -0.6, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177192}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0.6, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 177036}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, -0.6, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176880}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176724}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0.6, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176568}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, -0.6, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176412}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0.6, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176256}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, -0.6, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 176100}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175944}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0.6, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175788}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, -0.6, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175632}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0.6]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175476}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, -0.6]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175320}
physim.run({"segments": [{"t": 156, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
{"ticks_run": 156, "budget_left": 175164}
physim.reset({})
{"budget_left": 174964}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 0, 1, 3, 5, 6], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 174802}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 7, 8, 9, 10, 11], "series": true, "max_numbers": 330, "stride": 3})
Slow branch: same spike event shape, just longer flat inter-spike phase (period ~81). Completing the slow-branch library for all channels:
{"ticks_run": 162, "budget_left": 174640}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 12, 13, 14, 15, 18], "series": true, "max_numbers": 330, "stride": 3})
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 12, 13, 14, 15, 18], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 174478}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 19, 20, 21, 22, 23], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 174316}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 24, 25, 26, 27, 28], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 174154}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 29, 30, 31, 32, 33], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 173992}
physim.run({"segments": [{"t": 162, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4, 34, 35, 36, 37, 38], "series": true, "max_numbers": 330, "stride": 3})
{"ticks_run": 162, "budget_left": 173830}
physim.reset({})
Slow-branch library complete. Now the critical piece for "weak push" contracts: frequency vs small input levels on the slow branch. Staircase on port 0:
{"budget_left": 173630}
physim.run({"segments": [{"t": 300, "u": [0.1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.2, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.3, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.45, 0, 0, 0, 0, 0, 0, 0]}, {"t":)
{"ticks_run": 2000, "budget_left": 171630}
physim.reset({})
{"budget_left": 171430}
physim.run({"segments": [{"t": 300, "u": [0, 0.15, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0.3, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0.45, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, -0.3, 0, 0, 0, 0, 0, 0]}, {"t)
{"ticks_run": 1800, "budget_left": 169630}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 210, "stride": 2})
Port 1 negative levels ALSO drive fast (rectified), and after ~900 ticks of driving it latched fast even at release. Checking latch persistence, then testing negative levels on other ports:
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 210, "stride": 2})
Port 1 negative levels ALSO drive fast (rectified), and after ~900 ticks of driving it latched fast even at release. Checking latch persistence, then testing negative levels on other ports:
{"ticks_run": 400, "budget_left": 169230}
physim.reset({})
Latched confirmed. Now negative-level test on ports 2, 4, 6 from a fresh draw:
{"budget_left": 169030}
physim.run({"segments": [{"t": 300, "u": [0, 0, -0.6, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, -0.6, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, -0.6, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "cha)
{"ticks_run": 1200, "budget_left": 167830}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0.6, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0.6, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0.6, 0]}, {"t": 300, "u": [0, 0, 0, 0.6, 0, 0, 0, 0]}], "chan)
Ports 2/4/6 negative do nothing (period stays 81 throughout). Checking their positive levels drive fast as expected:
{"ticks_run": 1200, "budget_left": 166630}
physim.reset({})
All ports' positive levels ≥0.45 drive fast. Now quantifying amplitude adaptation under sustained strong drive (matters for sd contracts), from a fresh draw:
{"budget_left": 166430}
physim.run({"segments": [{"t": 900, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 310, "stride": 3})
{"ticks_run": 900, "budget_left": 165530}
Write: /app/data_slow_wave.py
Write: /app/data_slow_wave.py
Write: /app/templates_slow.py
physim.reset({})
Slow templates built. Two more fresh-draw checks to confirm draws consistently start on the slow branch:
{"budget_left": 165330}
physim.run({"segments": [{"t": 340, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 180, "stride": 2})
{"ticks_run": 340, "budget_left": 164990}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0.4, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 160, "stride": 4})
{"ticks_run": 600, "budget_left": 164390}
physim.reset({})
One more clean reference for the announced "strong drive + release" regime:
{"budget_left": 164190}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}, {"t": 700, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4], "series": true, "max_numbers": 340, "stride": 3})
{"ticks_run": 1000, "budget_left": 163190}
Write: /app/model.md
Write: /app/model.md
physim.ready({})
{"phase": "answer"}
physim.run({"segments": [{"t": 20, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [4]})
{"error": "exploration is over; reply with the answers object"}
Write: /app/predict.py
Write: /app/predict_pulse.py
Write: /app/predict_pulse.py
physim.answer({"answers": [{"id": 0, "mean": -0.46, "low": -0.67, "high": 0.0}, {"id": 1, "mean": 0.03, "low": 0.0, "high": 0.2}, {"id": 2, "mean": 0.2, "low": -0.2, "high": 0.37}, {"id": 3, "mean": 0.03, "low": 0.)
All predictions computed. Submitting answers — pinned-phase medians for the deterministic contracts, mode-weighted hedges with wide intervals for the bimodal pulse-train rates:
physim.answer({"answers": [{"id": 0, "mean": -0.46, "low": -0.67, "high": 0}, {"id": 1, "mean": 0.03, "low": 0, "high": 0.2}, {"id": 2, "mean": 0.2, "low": -0.2, "high": 0.37}, {"id": 3, "mean": 0.03, "low": 0, "hi)
All predictions computed. Submitting answers — pinned-phase medians for the deterministic contracts, mode-weighted hedges with wide intervals for the bimodal pulse-train rates:
{"received": 16}
All 16 answers recorded. Now the optional theory bonus — an executable simulator built from my fitted model. Let me generate compact template literals and assemble the theory code:
Close match to observations. The driven first interval is slightly fast (50 vs measured ~58) — tuning the charge time constant:
The model now matches both driven (12/66/111/152 vs measured 14/72/113/153) and post-release behavior (settles at period 72, exactly as measured). Submitting the theory:
One fix needed — the sandbox forbids imports, so I'll replace `import math` with a precomputed constant, then submit:
physim.submit_theory({"code": "TPL={0:[0.6,0.6,0.61,0.62,0.62,0.63,0.64,0.65,0.66,0.67,0.68,0.69,0.7,0.68,0.66,0.63,0.63,0.63,0.63,0.62,0.62,0.61,0.62,0.63,0.63,0.63,0.62,0.61,0.63,0.65,0.67,0.63,0.6,0.56,0.34,0.13,-0.08,)
Everything is submitted — 16 contract answers and the executable theory. Here's a summary of the investigation and what I concluded:
## What the system is
A single **relaxation (spiking) oscillator** drives all sensors. Each of the 36 live channels is a fixed waveform template phase-locked to the spike (channels 2, 16, 17, 39 are dead constants). Crucially, the inputs inject **no DC into any sen
anthropic/claude-fable-5 · C4 seed 0 · tier tools · accuracy 0.23 · calibration 0.33 · theory 0.45 · budget 17%
S1=0.24 · S2=0.16 · S3=0.17 · S4=0.35 · coverage 0.12 · 274 nodes
Narrative experiment log
- 3× free run (950 ticks; 300 ticks, all inputs 0) — ch34 -0.92→+0.44, ch10 +0.27→-0.78, ch31 -0.18→-0.56.
- Single-port probe (300 ticks; port 0 at +0.10, 300t) — ch31 -0.56→+0.56, ch34 +0.44→+0.77, ch0 -0.39→-0.58.
- ✗ single-port probe rejected: series observation limited to <=6 channels.
- 4× single-port probe (1,200 ticks; port 1 at +0.10, 300t) — ch34 -0.80→+0.50, ch0 -0.10→+0.61, ch31 -0.22→+0.08.
- Free run (350 ticks; 350 ticks, all inputs 0) — ch0 +0.61→-0.87.
- 4× single-port probe (1,400 ticks; port 4 at +0.10, 300t) — ch31 +0.50→-0.57, ch0 -0.32→-0.95, ch10 -0.25→+0.15.
- 2× multi-port probe (1,400 ticks; ports [0, 1, 7] at +0.20, 700t).
- 2× single-port probe (2,400 ticks; port 0 at +0.12, 1200t).
- 3× uniform drive (800 ticks; -1.00 held 350t) — ch34 -0.90→+0.92, ch10 +0.15→-1.31, ch32 +0.55→-0.88.
- 4× multi-port probe (4,400 ticks; ports [0, 1, 2, 3] at +0.50, 700t) — ch0 -0.60→-0.79.
- Single-port probe (1,600 ticks; port 0 at +0.06, 1600t) — ch0 -0.79→-0.45.
- 2× multi-port probe (2,400 ticks; ports [0, 1, 2, 3] at +0.05, 1600t) — ch0 -0.35→+0.58.
- 7× free run (2,520 ticks; 360 ticks, all inputs 0) — ch31 -0.90→+0.73, ch21 -0.72→+0.35, ch30 -0.55→+0.49.
- 8× single-port probe (2,880 ticks; port 0 at +0.10, 360t) — ch6 -0.91→+0.42, ch10 -1.03→+0.26, ch23 -1.13→+0.12.
- Drive → release (3,300 ticks; drive +0.10 for 2500t, release 800t) — ch0 -0.50→+0.70.
- Reset to fresh initial conditions (−200 ticks).
- Reset to fresh initial conditions (−200 ticks).
- Free run (350 ticks; 350 ticks, all inputs 0).
- Reset to fresh initial conditions (−200 ticks).
- Single-port probe (350 ticks; port 0 at +0.10, 350t).
- 2× uniform drive (2,500 ticks; +1.00 held 1300t) — ch0 -0.86→+0.29.
- Drive → release (1,500 ticks; drive +0.27 for 1100t, release 400t) — ch0 +0.29→-0.38.
- Ramp sweep (800 ticks; 800 ticks, peak mean drive +0.12) — ch0 -0.38→-0.77.
- 2× uniform drive (2,000 ticks; +1.00 held 1000t) — ch0 -0.25→+0.36.
- 2× drive → release (3,650 ticks; drive +0.12 for 1400t, release 250t).
- Closed-loop policy (200 ticks; 200t — "simple test: drive port 0 for first 100 ticks, then stop; count ticks").
- Ended exploration → received 16 prediction contracts.
- ✗ drive → release rejected: exploration is over; reply with the answers object.
- Submitted 16 contract answers.
- Submitted 16 contract answers.
- Submitted 16 contract answers.
- Submitted an executable theory (28,405 chars).
Agent-written files (its instruments & theories)
app/.vf-claude/0b15472ac44b420c81000f17d8be416a/.claude.json (389 chars)
{
"firstStartTime": "2026-08-14T13:49:53.750Z",
"machineID": "a6566c7bad5951d54786623f21c1300a48e543760fbd08109a11adee9e24b2ed",
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"seenNotifications": {},
"hasResetAutoModeOptInForDefaultOffer": true,
"migrationVersion": 13,
"userID": "4d0c46599a3d9e1b0f85ad88fe43b5e15edcbd08d55ffa5d703326446da5c0cd"
}
app/physim/analyze1.py (3,044 chars)
import numpy as np
# Run: segments [{350, p7=0.8},{350, p0=p1=0.8}], stride 2 => 350 samples
s = [-0.592, -0.389, -0.449, -0.272, 0.258, 1.248, 2.223, 2.178, 1.82, 1.031, -0.307, -1.155, -1.293, -1.223, -1.074, -0.961, -0.954, -0.848, -0.759, -0.622, -0.509, -0.492, -0.501, -0.363, -0.282, -0.276, -0.249, -0.289, -0.322, -0.352, -0.529, -0.429, -0.399, -0.441, -0.447, -0.382, -0.303, -0.249, -0.428, -0.435, -0.315, -0.403, -0.295, -0.378, -0.431, -0.359, -0.329, -0.358, -0.355, -0.385, -0.207, 0.361, 1.404, 2.096, 2.086, 1.685, 0.423, -0.837, -1.204, -1.049, -1.144, -1.09, -0.848, -0.88, -0.738, -0.699, -0.653, -0.688, -0.477, -0.343, -0.007, 0.989, 2.031, 2.259, 1.903, 1.196, -0.291, -1.22, -1.196, -0.964, -0.937, -0.972, -0.874, -0.845, -0.722, -0.659, -0.597, -0.434, -0.448, -0.325, -0.063, 0.82, 1.887, 2.147, 2.02, 1.352, 0.048, -1.093, -1.125, -1.07, -1.045, -0.925, -0.975, -0.984, -0.688, -0.804, -0.618, -0.641, -0.465, -0.349, -0.216, 0.462, 1.639, 2.209, 2.172, 1.628, 0.504, -0.82, -1.231, -1.059, -0.967, -1.052, -0.981, -0.856, -0.862, -0.714, -0.631, -0.678, -0.448, -0.451, -0.192, -0.011, 1.118, 2.093, 2.193, 2.01, 1.139, -0.268, -1.172, -1.151, -1.037, -0.992, -0.929, -0.893, -0.892, -0.703, -0.654, -0.616, -0.417, -0.454, -0.343, -0.171, 0.665, 1.677, 2.165, 2.033, 1.667, 0.316, -0.964, -1.22, -1.147, -1.155, -0.973, -0.975, -0.853, -0.834, -0.769, -0.674, -0.589, -0.44, -0.437, -0.224, 0.341, 1.395, 2.199, 2.108, 1.821, 0.886, -0.622, -1.204, -1.169, -1.031, -1.006, -0.947, -0.977, -0.892, -0.741, -0.679, -0.539, -0.472, -0.385, -0.364, -0.076, 0.906, 1.98, 2.15, 2.041, 1.333, -0.017, -1.122, -1.182, -1.06, -0.97, -1.014, -0.938, -0.876, -0.713, -0.686, -0.648, -0.496, -0.427, -0.412, -0.427, -0.305, -0.32, -0.239, 0.242, 1.145, 1.856, 2.149, 1.875, 1.123, -0.302, -1.017, -1.269, -1.201, -1.051, -0.955, -0.836, -0.765, -0.801, -0.767, -0.625, -0.542, -0.398, -0.269, 0.018, 0.976, 1.927, 2.196, 2.024, 1.41, 0.053, -0.941, -1.271, -1.194, -1.08, -1.029, -0.933, -0.873, -0.75, -0.67, -0.554, -0.553, -0.461, -0.449, -0.122, 0.539, 1.636, 2.157, 2.035, 1.686, 0.574, -0.747, -1.301, -1.216, -0.976, -1.07, -0.882, -0.766, -0.815, -0.7, -0.724, -0.611, -0.355, -0.424, -0.292, 0.189, 1.212, 2.09, 2.178, 1.873, 1.034, -0.276, -1.121, -1.22, -1.119, -1.027, -0.895, -0.941, -0.733, -0.691, -0.625, -0.644, -0.505, -0.472, -0.364, -0.016, 0.827, 1.795, 2.268, 1.963, 1.501, 0.229, -1.007, -1.213, -1.171, -1.195, -0.984, -0.945, -0.833, -0.81, -0.77, -0.692, -0.517, -0.409, -0.41, -0.155, 0.421, 1.419, 2.144, 2.1, 1.812, 0.843, -0.453, -1.142, -1.243, -1.153, -1.107, -0.975, -0.898, -0.786, -0.73, -0.552, -0.605, -0.466, -0.416, -0.315, 0.107, 1.019, 1.959, 2.195, 1.939, 1.231, -0.019, -0.99, -1.279, -1.117, -1.116, -0.985]
s = np.array(s)
stride = 2
def spike_onsets(x, stride, thr=0.0):
# upward crossings of thr
idx = np.where((x[:-1] < thr) & (x[1:] >= thr))[0] + 1
return idx * stride
on = spike_onsets(s, stride)
print("onsets (ticks):", on)
print("intervals:", np.diff(on))
app/physim/answer.py (3,436 chars)
import json
import numpy as np
from model import period, THETA, QUIET
import sim
from sim import expand_protocol, render_trace
def spike_times_v(amp, rng, persist_full=35.0, persist_scale=None):
"""Oscillator with drive-duration-dependent persistence.
persist_scale: if set, persistence = min(persist_full, persist_scale * drive_duration)."""
n = len(amp)
ph = rng.uniform(0, 1)
driven = amp[0] >= THETA
spikes = []
state = "norm"
pause_now = 0.0
a_prev = amp[0] if amp[0] >= THETA else 1.0
drive_dur = 0
persist_until = -1
jit = rng.normal(0, 0.05)
for t in range(n):
a = amp[t]
if driven and a < THETA:
if persist_scale is None:
plen = rng.normal(persist_full, 8)
else:
plen = min(persist_full, persist_scale * drive_dur) + rng.normal(0, 3)
persist_until = t + max(plen, 0)
state = "persist"
driven = a >= THETA
if driven:
drive_dur += 1
else:
drive_dur = 0
a_eff = a
if state == "persist" and not driven:
if t <= persist_until:
a_eff = a_prev
else:
# persistence expired without spike -> pause applies to current cycle
state = "pause2"
pause_now = rng.normal(45, 10) if rng.uniform() > 0.2 else rng.normal(5, 8)
if a >= THETA:
a_prev = a
state = "norm"
pause_now = 0.0
T = period(a_eff) * (1 + jit * 0.4) + pause_now
ph += 1.0 / max(T, 5)
if ph >= 1.0:
spikes.append(t)
ph -= 1.0
jit = rng.normal(0, 0.05)
if state == "persist":
state = "pause"
pause_now = rng.normal(45, 10) if rng.uniform() > 0.2 else rng.normal(5, 8)
elif state in ("pause", "pause2"):
state = "norm"
pause_now = 0.0
return np.array(spikes, int)
def build_segments(c):
if "segments" in c:
return c["segments"]
p = c["pulse10"]
segs = []
for i in range(p["total"]):
a = p["pulses"].get(str(i), 0.0)
segs.append({"t": 10, "u": [a] + [0.0] * 7})
return segs
def mc_stat(c, variant, n_mc=500, seed=0):
rng = np.random.default_rng(seed)
segs = build_segments(c)
amp = expand_protocol(segs)
n = len(amp)
a, b = n - 20, n
ch = c["channel"]
vals = []
for _ in range(n_mc):
if variant == "A":
sp = spike_times_v(amp, rng, persist_full=35.0, persist_scale=None)
else:
sp = spike_times_v(amp, rng, persist_full=35.0, persist_scale=0.6)
if c["stat"] == "rate":
vals.append(int(np.sum((sp >= a) & (sp < b))))
else:
y = render_trace(ch, amp, sp, rng)
vals.append(y[a:b].mean())
return np.array(vals, float)
cons = json.load(open("contracts.json"))["contracts"]
out = []
for c in cons:
sA = mc_stat(c, "A", seed=c["id"] * 7 + 1)
sB = mc_stat(c, "B", seed=c["id"] * 7 + 2)
mA, mB = sA.mean(), sB.mean()
seA = sA.std() / np.sqrt(len(sA))
print(f"id {c['id']:>2} ch{c['channel']:>2} {c['stat']:>4}: A={mA:.4f} B={mB:.4f} (se~{seA:.3f})")
out.append(dict(id=c["id"], stat=c["stat"], A=float(mA), B=float(mB), se=float(seA)))
json.dump(out, open("data/answers_raw.json", "w"), indent=1)
app/physim/build_theory.py (4,885 chars)
import json
import numpy as np
waves = {int(k): v for k, v in json.load(open("data/waves.json")).items()}
WB = {}
WD = {}
for ch, w in waves.items():
WB[ch] = [round(float(x), 3) for x in w["base"]]
WD[ch] = [round(float(x), 3) for x in w["drv"]]
QUIET_LEV = {2: 0.032, 5: -0.130, 9: 0.092, 17: -0.216}
code = f'''
import math
import numpy as np
WB = {json.dumps(WB)}
WD = {json.dumps(WD)}
QUIET = {json.dumps(QUIET_LEV)}
WB = {{int(k): np.array(v) for k, v in WB.items()}}
WD = {{int(k): np.array(v) for k, v in WD.items()}}
QUIET = {{int(k): v for k, v in QUIET.items()}}
TB, TD = 82.5, 40.5
THETA = 0.26
SPIKE_LEN, RISE = 16, 8
TX = [0.0, 0.26, 0.27, 0.30, 0.35, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00]
TY = [82.5, 82.5, 48.0, 47.0, 45.5, 45.0, 43.5, 42.0, 41.2, 40.5, 40.0, 39.5]
def period(a):
if a < THETA:
return 82.5
return float(np.interp(a, TX, TY))
def render(ch, dt_prev, T):
wb, wd = WB[ch], WD[ch]
lam = min(max((TB - T) / (TB - TD), 0.0), 1.0)
if dt_prev <= SPIKE_LEN:
i = int(dt_prev)
return (1 - lam) * wb[i] + lam * wd[min(i, len(wd) - 1)]
span = max(T - SPIKE_LEN, 1)
s = min(max((dt_prev - SPIKE_LEN) / span, 0.0), 1.0)
ib = SPIKE_LEN + s * (TB - SPIKE_LEN)
idn = SPIKE_LEN + s * (TD - SPIKE_LEN)
vb = np.interp(ib, np.arange(len(wb)), wb)
vd = np.interp(idn, np.arange(len(wd)), wd)
return (1 - lam) * vb + lam * vd
def init(y_history):
# estimate ticks-since-last-spike (phase) from recent sensor readings
dt0 = 41.0
try:
yh = np.asarray(y_history, dtype=float)
if yh.ndim == 1:
yh = yh.reshape(1, -1)
if yh.shape[0] > 0 and yh.shape[1] >= 40:
chs = [0, 10, 13, 31, 34, 33, 27, 18]
last = yh[-1]
best, bestc = None, 1e18
for dt in range(0, 83):
c = 0.0
for ch in chs:
c += (last[ch] - render(ch, dt, TB)) ** 2
if c < bestc:
bestc, best = c, dt
dt0 = float(best)
except Exception:
pass
state = {{"dt": dt0, "ph": min(dt0 / TB, 0.999), "mode": 0, "pause": 0.0,
"aprev": 1.0, "T": TB}}
return state
def step(state, a):
try:
amax = max([float(x) for x in a] + [0.0])
except Exception:
amax = 0.0
driven_now = amax >= THETA
was_driven = state.get("drv", False)
if was_driven and not driven_now:
state["mode"] = 1 # persist
state["persist_left"] = 30
state["drv"] = driven_now
a_eff = amax
if state["mode"] == 1 and not driven_now:
if state.get("persist_left", 0) > 0:
a_eff = max(amax, state.get("aprev", 0.8))
state["persist_left"] = state.get("persist_left", 0) - 1
else:
state["mode"] = 2
state["pause"] = 45.0
if driven_now:
state["aprev"] = amax
state["mode"] = 0
state["pause"] = 0.0
T = period(a_eff) + state.get("pause", 0.0)
state["T"] = T
state["ph"] = state.get("ph", 0.5) + 1.0 / max(T, 5.0)
state["dt"] = state.get("dt", 40.0) + 1.0
if state["ph"] >= 1.0:
state["ph"] -= 1.0
state["dt"] = 0.0
if state["mode"] == 1:
state["mode"] = 2
state["pause"] = 45.0
elif state["mode"] == 2:
state["mode"] = 0
state["pause"] = 0.0
dt = state["dt"]
Tr = period(a_eff)
y = []
for ch in range(40):
if ch in QUIET:
y.append(QUIET[ch])
else:
# approaching next spike: rise ramp
rem = (1.0 - state["ph"]) * max(T, 5.0)
if rem <= RISE:
wb, wd = WB[ch], WD[ch]
lam = min(max((TB - Tr) / (TB - TD), 0.0), 1.0)
vb = wb[int(len(wb) - rem) % len(wb)]
vd = wd[int(len(wd) - rem) % len(wd)]
y.append(float((1 - lam) * vb + lam * vd))
else:
y.append(float(render(ch, dt, Tr)))
return state, y
'''
open("theory_code.py", "w").write(code)
print("bytes:", len(code))
# local test
ns = {}
exec(code, ns)
init, step = ns["init"], ns["step"]
hist = [[0.0] * 40 for _ in range(5)]
st = init(hist)
ys = []
for t in range(300):
st, y = step(st, [0.8] + [0] * 7)
ys.append(y)
ys = np.array(ys)
print("ch0 driven trace mean %.3f min %.2f max %.2f" % (ys[:, 0].mean(), ys[:, 0].min(), ys[:, 0].max()))
sp = np.where((ys[:-1, 0] < 0) & (ys[1:, 0] >= 0))[0]
print("ch0 spike intervals:", np.diff(sp))
st2 = init(hist)
ys2 = []
for t in range(300):
st2, y = step(st2, [0.0] * 8)
ys2.append(y)
ys2 = np.array(ys2)
sp2 = np.where((ys2[:-1, 0] < 0) & (ys2[1:, 0] >= 0))[0]
print("ch0 baseline intervals:", np.diff(sp2))
print("ch5 const:", ys2[:, 5].mean(), " ch39 mean:", ys2[:, 39].mean().round(3))
app/physim/contracts.json (3,182 chars)
{"contracts": [
{"id": 0, "segments": [{"t": 300, "u": [0,0,0,0,0,0,0,0]}], "channel": 39, "stat": "mean"},
{"id": 1, "segments": [{"t": 297, "u": [0,0,0,0,0,0,0,0]}], "channel": 21, "stat": "rate"},
{"id": 2, "segments": [{"t": 320, "u": [0,0,0,0,0,0,0,0]}], "channel": 12, "stat": "mean"},
{"id": 3, "segments": [{"t": 371, "u": [0,0,0,0,0,0,0,0]}], "channel": 20, "stat": "rate"},
{"id": 4, "segments": [{"t": 393, "u": [0,0,0,0,0.814,0,0,0]}], "channel": 15, "stat": "mean"},
{"id": 5, "segments": [{"t": 342, "u": [0,0,0,0.985,0,0,0,0]}], "channel": 24, "stat": "rate"},
{"id": 6, "segments": [{"t": 420, "u": [0,0.923,0,0,0,0,0,0]}], "channel": 21, "stat": "mean"},
{"id": 7, "segments": [{"t": 419, "u": [0,0,0,0,0,0,0.868,0]}], "channel": 3, "stat": "rate"},
{"id": 8, "segments": [{"t": 8, "u": [1,0,0,0,0,0,0,0]}, {"t": 96, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [1,0,0,0,0,0,0,0]}, {"t": 96, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [1,0,0,0,0,0,0,0]}, {"t": 96, "u": [0,0,0,0,0,0,0,0]},
{"t": 187, "u": [0,0,0,0,0,0,0,0]}], "channel": 11, "stat": "mean"},
{"id": 9, "segments": [{"t": 8, "u": [0,0,0,0,0,0,0,1]}, {"t": 84, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,0,0,1]}, {"t": 84, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,0,0,1]}, {"t": 84, "u": [0,0,0,0,0,0,0,0]},
{"t": 116, "u": [0,0,0,0,0,0,0,0]}], "channel": 25, "stat": "rate"},
{"id": 10, "segments": [{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 64, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 64, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 64, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 64, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 64, "u": [0,0,0,0,0,0,0,0]},
{"t": 128, "u": [0,0,0,0,0,0,0,0]}], "channel": 15, "stat": "mean"},
{"id": 11, "segments": [{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 69, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 69, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 69, "u": [0,0,0,0,0,0,0,0]},
{"t": 8, "u": [0,0,0,0,0,1,0,0]}, {"t": 69, "u": [0,0,0,0,0,0,0,0]},
{"t": 136, "u": [0,0,0,0,0,0,0,0]}], "channel": 26, "stat": "rate"},
{"id": 12, "pulse10": {"total": 42, "pulses": {"0": 1.0, "19": 1.0, "22": 1.0, "25": 1.0, "29": 1.0, "31": 1.0, "36": 1.0, "37": 1.0}},
"channel": 20, "stat": "mean"},
{"id": 13, "pulse10": {"total": 42, "pulses": {"0": 1.0, "9": 1.0, "18": 1.0, "28": 1.0, "35": 1.0, "37": 1.0}},
"channel": 26, "stat": "rate"},
{"id": 14, "pulse10": {"total": 42, "pulses": {"0": 1.0, "11": 1.0, "17": 1.0, "25": 1.0, "32": 1.0, "33": 1.0, "41": 1.0}},
"channel": 14, "stat": "mean"},
{"id": 15, "pulse10": {"total": 42, "pulses": {"0": 1.0, "22": 1.0, "29": 1.0, "31": 1.0, "36": 1.0, "41": 1.0}},
"channel": 4, "stat": "rate"}
]}
app/physim/data/answers_raw.json (1,720 chars)
[
{
"id": 0,
"stat": "mean",
"A": -0.2378960893271413,
"B": -0.2374003747416889,
"se": 0.01138020441821147
},
{
"id": 1,
"stat": "rate",
"A": 0.252,
"B": 0.212,
"se": 0.019416281827373642
},
{
"id": 2,
"stat": "mean",
"A": -0.3815379837173543,
"B": -0.3890344803527042,
"se": 0.015577441390554227
},
{
"id": 3,
"stat": "rate",
"A": 0.282,
"B": 0.226,
"se": 0.020123419192572614
},
{
"id": 4,
"stat": "mean",
"A": -0.1459827812217587,
"B": -0.13158804829851142,
"se": 0.017028609823463846
},
{
"id": 5,
"stat": "rate",
"A": 0.518,
"B": 0.536,
"se": 0.022346185356789644
},
{
"id": 6,
"stat": "mean",
"A": -0.36103383022930574,
"B": -0.34757572524761493,
"se": 0.02254807021643157
},
{
"id": 7,
"stat": "rate",
"A": 0.5,
"B": 0.512,
"se": 0.022360679774997897
},
{
"id": 8,
"stat": "mean",
"A": 0.08401786239358974,
"B": 0.036117943921467555,
"se": 0.012279270396655178
},
{
"id": 9,
"stat": "rate",
"A": 0.126,
"B": 0.258,
"se": 0.014840754697790809
},
{
"id": 10,
"stat": "mean",
"A": -0.17844735620347796,
"B": -0.05380494599852464,
"se": 0.010220676088632212
},
{
"id": 11,
"stat": "rate",
"A": 0.114,
"B": 0.314,
"se": 0.014212951839783317
},
{
"id": 12,
"stat": "mean",
"A": -0.7339599508570818,
"B": -0.5554460153002229,
"se": 0.004591243954822178
},
{
"id": 13,
"stat": "rate",
"A": 0.678,
"B": 0.192,
"se": 0.020895741192884256
},
{
"id": 14,
"stat": "mean",
"A": 0.3695163408350052,
"B": 0.1715162468326045,
"se": 0.008416319197438028
},
{
"id": 15,
"stat": "rate",
"A": 0.258,
"B": 0.344,
"se": 0.019567115270269147
}
]
app/physim/data/base_g0.json (2,885 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [0,1,2,3,4,5],
"series": {"0": [-1.214, -1.033, -0.694, -0.432, 0.347, 2.109, -0.457, -1.095, -0.927, -0.595, -0.388, -0.288, -0.238, -0.369, -0.414, -0.366, -0.351, -0.399, -0.374, -0.448, -0.465, -0.22, 2.392, -0.304, -1.025, -0.97, -0.738, -0.444, -0.309, -0.287, -0.454, -0.361, -0.379, -0.425, -0.432, 0.435, 2.116, -1.176, -1.063, -0.884, -0.642, -0.478, -0.305, -0.37, -0.305, -0.294, -0.379, -0.484, -0.341, 1.702, 1.714, -1.165, -0.999, -0.863, -0.518, -0.42, -0.288, -0.444, -0.499, -0.253],
"1": [-0.477, -0.382, -0.33, 0.252, 1.475, -0.03, -0.615, -0.379, -0.338, -0.246, -0.139, -0.132, -0.249, -0.144, -0.189, -0.179, -0.156, 1.105, 0.882, -0.69, -0.523, -0.407, -0.299, -0.043, -0.06, -0.244, -0.195, -0.268, -0.146, -0.118, -0.057, 1.316, 0.333, -0.648, -0.495, -0.315, -0.312, -0.147, -0.057, -0.158, -0.151, -0.057, -0.178, -0.28, 0.486, 1.354, -0.429, -0.555, -0.521, -0.279, -0.222, -0.078, -0.157, -0.199, -0.189, -0.113, -0.152, -0.21, 1.012, 1.084],
"2": [0.007, 0.006, 0.074, 0.063, 0.031, 0.066, -0.013, 0.052, 0.008, 0.07, 0.057, 0.097, 0.027, 0.025, -0.025, 0.031, -0.026, 0.05, -0.047, -0.062, 0.094, 0.045, 0.027, 0.057, -0.021, 0.04, -0.062, 0.015, -0.04, 0.071, 0.076, 0.087, 0.083, 0.015, 0.136, -0.054, 0.143, 0.018, 0.09, 0.058, 0.029, 0.009, 0.039, -0.02, -0.001, 0.082, 0.088, -0.038, -0.03, 0.094, 0.108, 0.205, 0.087, -0.0, -0.001, -0.006, 0.002, 0.003, 0.073, -0.033],
"3": [-0.571, -0.402, -0.326, -0.15, 0.947, 1.153, -0.569, -0.482, -0.436, -0.172, -0.079, 0.01, -0.108, -0.181, -0.101, -0.026, -0.066, 0.733, 1.202, -0.572, -0.427, -0.305, -0.264, -0.119, -0.053, -0.088, -0.118, 0.022, -0.09, -0.137, -0.125, 0.964, 1.022, -0.637, -0.421, -0.363, -0.223, -0.071, -0.106, -0.163, -0.105, -0.031, -0.151, -0.061, -0.031, 1.329, 0.469, -0.584, -0.464, -0.297, -0.179, -0.024, -0.006, 0.001, -0.136, -0.066, -0.161, -0.108, 0.42, 1.337],
"4": [-0.631, -0.459, -0.373, 0.763, 1.335, -0.845, -0.763, -0.667, -0.364, -0.239, -0.227, -0.266, -0.37, -0.249, -0.269, -0.264, -0.341, -0.275, -0.147, 1.431, 0.161, -0.834, -0.671, -0.526, -0.406, -0.281, -0.239, -0.408, -0.276, -0.27, -0.36, -0.381, 0.22, 1.443, -0.514, -0.765, -0.625, -0.625, -0.32, -0.207, -0.311, -0.302, -0.327, -0.241, -0.258, -0.255, 0.911, 1.108, -0.866, -0.783, -0.643, -0.43, -0.263, -0.171, -0.325, -0.295, -0.248, -0.24, -0.318, -0.143],
"5": [-0.048, -0.109, -0.226, -0.125, -0.144, -0.151, -0.124, -0.16, -0.028, -0.209, -0.035, -0.206, -0.119, -0.161, -0.106, -0.272, -0.082, -0.16, -0.104, -0.139, -0.15, -0.126, -0.146, -0.145, -0.124, -0.2, -0.158, -0.12, -0.118, -0.19, -0.04, -0.198, -0.144, -0.064, -0.181, -0.082, -0.133, -0.048, -0.132, -0.1, -0.04, -0.224, -0.098, -0.181, -0.1, -0.093, -0.119, -0.096, -0.087, -0.148, -0.154, -0.143, -0.122, -0.141, -0.066, -0.166, -0.236, -0.142, -0.097, -0.094]}}
app/physim/data/base_g1.json (2,790 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [6,7,8,9,10,11],
"series": {"6": [-0.231, 1.927, -0.058, -1.057, -1.057, -0.745, -0.545, -0.354, -0.392, -0.551, -0.367, -0.403, -0.433, -0.545, 0.514, 1.742, -1.21, -0.844, -0.922, -0.603, -0.526, -0.34, -0.455, -0.508, -0.513, -0.367, -0.514, -0.473, 1.441, 1.092, -1.162, -0.97, -0.871, -0.667, -0.392, -0.324, -0.52, -0.404, -0.382, -0.466, -0.457, -0.293, 1.919, -0.081, -1.014, -1.01, -0.755, -0.596, -0.305, -0.45, -0.5, -0.497, -0.301, -0.455, -0.471, 0.564, 1.729, -1.243, -0.982, -0.891],
"7": [0.141, -0.079, 0.156, 0.264, 0.166, 0.039, 0.186, 0.138, -1.131, -1.504, 0.677, 0.632, 0.37, 0.264, 0.004, 0.033, 0.187, 0.124, 0.147, 0.006, 0.09, -0.032, -1.589, -0.757, 0.732, 0.518, 0.416, 0.193, 0.021, 0.138, 0.069, 0.14, -0.002, 0.117, 0.039, -0.396, -1.697, 0.181, 0.656, 0.548, 0.267, 0.138, 0.049, 0.055, 0.062, 0.042, 0.052, 0.052, 0.177, -1.085, -1.577, 0.731, 0.644, 0.371, 0.223, 0.013, 0.038, 0.12, 0.129, 0.026],
"8": [-0.517, -0.477, -0.614, -0.63, -0.417, -0.522, -0.56, 0.506, 1.246, -1.018, -1.106, -1.009, -0.694, -0.637, -0.485, -0.485, -0.706, -0.528, -0.475, -0.509, -0.403, 1.184, 0.88, -1.279, -1.074, -0.953, -0.705, -0.483, -0.483, -0.467, -0.563, -0.659, -0.482, -0.46, -0.076, 1.391, -0.079, -1.122, -1.004, -0.81, -0.617, -0.492, -0.399, -0.574, -0.497, -0.504, -0.46, -0.635, 0.533, 1.232, -0.934, -1.081, -0.969, -0.734, -0.528, -0.425, -0.435, -0.626, -0.501, -0.534],
"9": [0.106, 0.158, 0.131, 0.173, 0.012, 0.101, 0.137, 0.07, 0.168, 0.109, 0.247, 0.058, 0.12, 0.186, 0.143, 0.054, 0.127, 0.082, 0.023, 0.044, 0.139, 0.059, 0.081, 0.106, -0.06, 0.092, 0.138, 0.148, -0.047, 0.04, 0.055, 0.098, 0.13, 0.098, 0.123, 0.068, 0.095, 0.033, 0.11, 0.069, 0.046, 0.106, -0.007, 0.051, 0.171, 0.145, 0.138, 0.083, 0.088, 0.099, 0.124, 0.137, 0.05, 0.113, 0.051, 0.126, 0.012, 0.131, 0.097, 0.021],
"10": [0.119, -1.708, -1.501, -1.268, -0.93, -0.655, -0.711, -0.783, -0.835, -0.667, -0.737, -0.798, 0.321, 2.309, -1.209, -1.606, -1.413, -1.076, -0.952, -0.684, -0.763, -0.764, -0.862, -0.646, -0.766, -0.786, 1.487, 1.596, -1.89, -1.431, -1.349, -0.998, -0.776, -0.67, -0.812, -0.858, -0.691, -0.762, -0.84, -0.522, 2.316, 0.132, -1.74, -1.471, -1.27, -0.953, -0.706, -0.719, -0.833, -0.83, -0.781, -0.732, -0.892, 0.34, 2.338, -1.142, -1.69, -1.42, -1.08, -0.734],
"11": [0.104, -1.122, -1.755, 0.899, 0.629, 0.515, 0.31, 0.167, -0.075, 0.127, 0.229, 0.051, 0.2, 0.158, 0.084, -1.999, -1.003, 0.737, 0.615, 0.487, 0.254, 0.099, 0.045, 0.182, 0.163, 0.052, 0.122, 0.182, -0.404, -2.126, 0.251, 0.646, 0.564, 0.399, 0.223, 0.1, 0.028, 0.235, 0.18, 0.186, 0.161, 0.023, -1.159, -1.778, 0.936, 0.648, 0.562, 0.228, 0.15, 0.152, 0.157, 0.253, 0.096, 0.124, 0.116, 0.02, -2.008, -0.905, 0.712, 0.671]}}
app/physim/data/base_g2.json (2,916 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [12,13,14,15,16,17],
"series": {"12": [-0.482, -0.46, -0.418, -0.525, -0.528, 0.296, 1.454, -0.773, -1.121, -0.903, -0.551, -0.473, -0.435, -0.432, -0.554, -0.453, -0.454, -0.489, -0.577, 1.079, 1.02, -1.115, -0.989, -0.865, -0.661, -0.395, -0.356, -0.477, -0.551, -0.457, -0.474, -0.46, -0.321, 1.427, 0.018, -1.07, -0.933, -0.677, -0.676, -0.409, -0.474, -0.554, -0.534, -0.455, -0.416, -0.433, 0.174, 1.439, -0.748, -1.062, -0.905, -0.731, -0.484, -0.338, -0.533, -0.552, -0.465, -0.517, -0.444, -0.401],
"13": [-0.937, -0.679, -0.391, -0.415, -0.551, -0.535, -0.482, -0.511, -0.62, 0.285, 2.475, -0.711, -1.395, -1.176, -0.891, -0.611, -0.433, -0.472, -0.719, -0.466, -0.385, -0.425, -0.557, 1.391, 2.04, -1.579, -1.357, -0.975, -0.765, -0.602, -0.293, -0.535, -0.581, -0.522, -0.461, -0.484, -0.387, 2.328, 0.683, -1.417, -1.284, -0.967, -0.693, -0.343, -0.423, -0.619, -0.567, -0.576, -0.425, -0.611, 0.194, 2.502, -0.634, -1.422, -1.085, -0.844, -0.597, -0.307, -0.459, -0.631],
"14": [0.836, 0.688, 0.556, 0.364, 0.458, 0.489, 0.388, 0.302, 0.424, 0.441, -0.615, -1.156, 0.969, 0.873, 0.812, 0.475, 0.402, 0.36, 0.329, 0.452, 0.41, 0.413, 0.469, 0.384, -1.288, -0.491, 0.97, 0.726, 0.823, 0.531, 0.426, 0.348, 0.419, 0.462, 0.386, 0.424, 0.456, -0.025, -1.316, 0.33, 0.803, 0.817, 0.628, 0.519, 0.476, 0.457, 0.437, 0.418, 0.402, 0.447, 0.426, -0.622, -1.069, 0.901, 0.908, 0.758, 0.564, 0.433, 0.351, 0.44],
"15": [-0.337, -0.175, -0.228, -0.238, -0.293, -0.238, -0.284, -0.294, 0.336, 1.476, -0.42, -0.679, -0.614, -0.526, -0.333, -0.204, -0.244, -0.284, -0.278, -0.202, -0.261, -0.226, 0.951, 1.059, -0.777, -0.683, -0.548, -0.366, -0.208, -0.176, -0.237, -0.279, -0.194, -0.293, -0.221, -0.125, 1.375, 0.282, -0.738, -0.684, -0.529, -0.31, -0.145, -0.223, -0.27, -0.239, -0.244, -0.205, -0.188, 0.296, 1.514, -0.419, -0.623, -0.543, -0.472, -0.303, -0.223, -0.263, -0.269, -0.203],
"16": [-0.885, -0.614, -0.684, -0.757, -0.761, -0.698, -0.752, -0.715, -0.594, 1.184, -0.03, -1.281, -1.161, -1.043, -0.875, -0.681, -0.599, -0.723, -0.761, -0.705, -0.747, -0.729, -0.216, 1.175, -0.939, -1.373, -1.192, -0.939, -0.71, -0.696, -0.722, -0.723, -0.794, -0.698, -0.739, -0.694, 0.575, 0.948, -1.305, -1.192, -1.09, -0.892, -0.733, -0.658, -0.611, -0.698, -0.743, -0.653, -0.808, -0.611, 1.16, 0.081, -1.394, -1.125, -0.981, -0.93, -0.702, -0.66, -0.751, -0.741],
"17": [-0.17, -0.148, -0.328, -0.255, -0.274, -0.16, -0.223, -0.289, -0.126, -0.225, -0.258, -0.185, -0.328, -0.215, -0.235, -0.175, -0.202, -0.258, -0.194, -0.161, -0.206, -0.273, -0.255, -0.214, -0.168, -0.283, -0.212, -0.238, -0.259, -0.174, -0.211, -0.17, -0.218, -0.273, -0.273, -0.195, -0.239, -0.315, -0.232, -0.158, -0.161, -0.314, -0.216, -0.248, -0.196, -0.271, -0.233, -0.251, -0.138, -0.289, -0.229, -0.201, -0.257, -0.156, -0.257, -0.186, -0.288, -0.151, -0.158, -0.139]}}
app/physim/data/base_g3.json (2,886 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [18,19,20,21,22,23],
"series": {"18": [-0.446, -0.538, -0.535, -0.172, 2.081, -0.678, -1.145, -0.974, -0.835, -0.583, -0.345, -0.48, -0.516, -0.374, -0.551, -0.526, -0.441, 0.775, 1.913, -1.537, -1.07, -0.94, -0.727, -0.5, -0.341, -0.498, -0.555, -0.495, -0.396, -0.476, -0.435, 2.227, 1.225, -1.101, -1.132, -0.888, -0.581, -0.397, -0.429, -0.57, -0.398, -0.479, -0.567, -0.571, -0.216, 2.073, -0.607, -1.155, -1.103, -0.825, -0.604, -0.38, -0.458, -0.517, -0.485, -0.377, -0.425, -0.433, 0.689, 1.95],
"19": [1.46, 1.285, -1.059, -0.869, -0.67, -0.392, -0.21, -0.212, -0.388, -0.342, -0.266, -0.326, -0.285, -0.032, 1.854, 0.205, -0.963, -0.749, -0.578, -0.326, -0.185, -0.245, -0.365, -0.286, -0.296, -0.281, -0.329, 0.589, 1.827, -0.673, -0.948, -0.742, -0.55, -0.308, -0.168, -0.26, -0.38, -0.251, -0.238, -0.281, -0.24, 1.483, 1.253, -1.002, -0.756, -0.646, -0.462, -0.251, -0.131, -0.268, -0.287, -0.334, -0.281, -0.292, -0.043, 1.881, 0.271, -0.902, -0.718, -0.462],
"20": [-0.498, 0.644, 0.315, -0.958, -0.832, -0.684, -0.553, -0.488, -0.42, -0.488, -0.568, -0.597, -0.523, -0.426, -0.28, 0.824, -0.455, -0.879, -0.737, -0.822, -0.542, -0.498, -0.516, -0.577, -0.55, -0.469, -0.551, -0.461, 0.029, 0.674, -0.92, -0.854, -0.913, -0.598, -0.432, -0.43, -0.541, -0.414, -0.51, -0.502, -0.556, -0.504, 0.696, 0.31, -0.983, -0.799, -0.681, -0.498, -0.653, -0.44, -0.604, -0.555, -0.464, -0.595, -0.486, -0.291, 0.793, -0.365, -0.953, -0.792],
"21": [-0.488, -0.512, -0.551, 1.123, 1.316, -1.162, -1.098, -0.85, -0.495, -0.461, -0.439, -0.563, -0.583, -0.458, -0.436, -0.508, -0.339, 1.73, 0.188, -1.184, -1.113, -0.796, -0.595, -0.416, -0.403, -0.643, -0.473, -0.44, -0.523, -0.504, 0.264, 1.788, -0.763, -1.149, -0.989, -0.674, -0.53, -0.459, -0.476, -0.51, -0.578, -0.43, -0.481, -0.499, 1.235, 1.371, -1.268, -1.122, -0.973, -0.674, -0.481, -0.344, -0.521, -0.557, -0.476, -0.431, -0.513, -0.314, 1.745, 0.302],
"22": [-1.621, -1.039, 0.938, 0.696, 0.55, 0.295, 0.187, 0.042, 0.234, 0.216, 0.109, 0.117, 0.185, -0.177, -1.964, -0.033, 0.886, 0.668, 0.402, 0.227, 0.109, 0.143, 0.267, 0.21, 0.07, 0.095, 0.143, -0.851, -1.844, 0.774, 0.807, 0.527, 0.368, 0.156, 0.157, 0.176, 0.279, 0.224, 0.207, 0.171, 0.156, -1.679, -1.092, 0.878, 0.742, 0.558, 0.38, 0.154, 0.191, 0.142, 0.256, 0.095, 0.222, 0.064, -0.242, -1.898, -0.069, 0.863, 0.534, 0.395],
"23": [1.428, 0.66, -1.6, -1.264, -1.159, -0.824, -0.553, -0.629, -0.728, -0.751, -0.627, -0.803, -0.699, -0.35, 1.701, -0.49, -1.417, -1.211, -0.961, -0.712, -0.597, -0.694, -0.691, -0.719, -0.806, -0.635, -0.732, 0.502, 1.452, -1.341, -1.339, -1.106, -0.923, -0.714, -0.576, -0.689, -0.787, -0.611, -0.652, -0.645, -0.542, 1.403, 0.656, -1.452, -1.267, -1.049, -0.76, -0.521, -0.447, -0.581, -0.709, -0.703, -0.61, -0.745, -0.265, 1.657, -0.305, -1.45, -1.18, -0.87]}}
app/physim/data/base_g4.json (2,799 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [24,25,26,27,28,29],
"series": {"24": [-0.673, -0.6, -0.32, -0.279, -0.156, -0.216, -0.263, -0.23, -0.25, -0.314, 0.051, 1.389, -0.306, -0.767, -0.55, -0.469, -0.351, -0.194, -0.267, -0.282, -0.323, -0.303, -0.343, -0.274, 0.807, 1.18, -0.757, -0.634, -0.436, -0.363, -0.294, -0.245, -0.289, -0.294, -0.337, -0.22, -0.296, -0.252, 1.201, 0.592, -0.729, -0.61, -0.524, -0.418, -0.216, -0.281, -0.142, -0.299, -0.216, -0.254, -0.299, 0.11, 1.408, -0.282, -0.753, -0.612, -0.535, -0.336, -0.17, -0.306],
"25": [0.441, 0.14, 0.123, 0.013, 0.167, 0.05, 0.089, 0.124, 0.124, 0.173, -0.675, -1.046, 0.545, 0.523, 0.385, 0.246, 0.138, 0.116, 0.129, 0.224, 0.185, 0.141, 0.066, 0.11, -1.077, -0.635, 0.536, 0.408, 0.288, 0.27, 0.024, -0.013, 0.137, 0.161, 0.11, 0.12, 0.05, -0.178, -1.17, 0.186, 0.515, 0.343, 0.402, 0.209, 0.071, 0.141, 0.206, 0.174, 0.186, 0.078, 0.184, -0.696, -1.037, 0.606, 0.453, 0.287, 0.224, 0.116, 0.049, 0.154],
"26": [-0.139, -0.183, -0.32, -0.296, -0.247, -0.227, -0.263, 0.559, 1.428, -0.634, -0.779, -0.569, -0.361, -0.25, -0.111, -0.298, -0.218, -0.154, -0.306, -0.256, -0.158, 1.161, 0.924, -0.842, -0.776, -0.425, -0.391, -0.204, -0.235, -0.278, -0.4, -0.228, -0.262, -0.296, -0.019, 1.584, 0.069, -0.767, -0.616, -0.482, -0.294, -0.223, -0.357, -0.287, -0.362, -0.186, -0.282, -0.228, 0.598, 1.508, -0.547, -0.739, -0.6, -0.484, -0.328, -0.11, -0.217, -0.284, -0.274, -0.281],
"27": [0.93, 0.77, 0.565, 0.719, 0.661, 0.749, 0.705, 0.741, 0.41, -1.935, -0.008, 1.588, 1.375, 1.073, 0.778, 0.612, 0.615, 0.715, 0.679, 0.631, 0.769, 0.681, -0.398, -1.782, 1.15, 1.529, 1.216, 0.923, 0.705, 0.563, 0.7, 0.729, 0.719, 0.673, 0.685, 0.661, -1.402, -1.229, 1.572, 1.392, 1.053, 0.846, 0.705, 0.513, 0.636, 0.747, 0.598, 0.644, 0.695, 0.404, -1.942, -0.04, 1.543, 1.369, 0.943, 0.751, 0.61, 0.667, 0.754, 0.754],
"28": [-1.128, -1.016, -0.718, -0.601, -0.466, -0.368, -0.456, -0.435, -0.409, -0.443, -0.445, -0.463, 1.59, 0.79, -1.163, -0.955, -0.848, -0.544, -0.411, -0.289, -0.399, -0.447, -0.44, -0.382, -0.479, -0.086, 1.686, -0.249, -1.06, -0.924, -0.8, -0.477, -0.397, -0.449, -0.498, -0.349, -0.368, -0.407, -0.562, 0.719, 1.562, -1.078, -0.916, -0.827, -0.54, -0.446, -0.278, -0.454, -0.502, -0.427, -0.473, -0.462, -0.368, 1.651, 0.835, -1.124, -0.92, -0.748, -0.52, -0.347],
"29": [0.415, 0.342, 0.443, 0.474, 0.431, 0.393, 0.506, 0.371, -1.152, -1.662, 1.298, 1.123, 0.837, 0.544, 0.514, 0.198, 0.469, 0.413, 0.366, 0.309, 0.435, 0.312, -1.836, -0.625, 1.222, 1.022, 0.909, 0.511, 0.477, 0.244, 0.449, 0.368, 0.39, 0.351, 0.333, -0.186, -1.937, 0.446, 1.162, 0.921, 0.693, 0.467, 0.311, 0.423, 0.503, 0.473, 0.378, 0.448, 0.423, -1.201, -1.503, 1.139, 1.112, 0.861, 0.538, 0.358, 0.318, 0.546, 0.397, 0.435]}}
app/physim/data/base_g5.json (2,821 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [30,31,32,33,34,35],
"series": {"30": [-0.38, -0.312, -0.251, -0.33, 1.377, 1.0, -1.189, -0.904, -0.671, -0.462, -0.243, -0.263, -0.355, -0.378, -0.423, -0.284, -0.251, -0.121, 1.736, 0.022, -0.955, -0.744, -0.586, -0.36, -0.329, -0.193, -0.332, -0.398, -0.278, -0.314, -0.264, 0.679, 1.528, -0.775, -0.9, -0.704, -0.596, -0.367, -0.251, -0.449, -0.439, -0.398, -0.266, -0.442, -0.229, 1.384, 0.925, -1.05, -0.915, -0.681, -0.549, -0.37, -0.31, -0.355, -0.339, -0.271, -0.402, -0.38, -0.105, 1.643],
"31": [-0.493, -0.51, -0.544, -0.244, 2.449, 0.469, -1.565, -1.303, -0.953, -0.677, -0.58, -0.466, -0.564, -0.554, -0.547, -0.519, -0.625, 0.453, 2.544, -0.891, -1.306, -1.206, -0.864, -0.657, -0.483, -0.445, -0.664, -0.579, -0.533, -0.618, -0.562, 1.673, 1.734, -1.672, -1.397, -1.158, -0.858, -0.498, -0.54, -0.53, -0.565, -0.626, -0.51, -0.644, -0.318, 2.461, 0.458, -1.577, -1.23, -0.903, -0.684, -0.443, -0.44, -0.493, -0.637, -0.599, -0.543, -0.555, 0.538, 2.487],
"32": [-0.415, -0.332, -0.24, -0.303, -0.396, 0.093, 1.9, -0.313, -0.935, -0.875, -0.7, -0.464, -0.375, -0.332, -0.508, -0.419, -0.43, -0.438, -0.483, 0.901, 1.557, -0.962, -0.991, -0.748, -0.579, -0.475, -0.367, -0.344, -0.5, -0.379, -0.36, -0.413, -0.402, 1.798, 0.809, -1.131, -0.903, -0.775, -0.522, -0.267, -0.332, -0.622, -0.399, -0.395, -0.342, -0.38, 0.12, 1.961, -0.371, -0.912, -0.95, -0.715, -0.473, -0.28, -0.362, -0.432, -0.473, -0.251, -0.386, -0.431],
"33": [0.178, 0.313, 0.326, 0.312, 0.301, 0.34, 0.285, -2.289, -1.136, 1.147, 0.947, 0.782, 0.572, 0.278, 0.348, 0.376, 0.322, 0.241, 0.361, 0.379, -0.078, -2.332, 0.565, 0.943, 0.993, 0.683, 0.437, 0.31, 0.496, 0.435, 0.29, 0.351, 0.452, 0.336, -1.139, -2.006, 1.246, 0.991, 0.836, 0.62, 0.318, 0.196, 0.474, 0.385, 0.263, 0.312, 0.373, 0.28, -2.346, -1.069, 1.092, 1.025, 0.73, 0.55, 0.357, 0.287, 0.461, 0.338, 0.319, 0.356],
"34": [0.571, 0.471, 0.475, 0.34, 0.416, 0.284, -2.451, -1.299, 1.572, 1.288, 0.906, 0.615, 0.444, 0.332, 0.456, 0.522, 0.366, 0.382, 0.404, -0.26, -2.733, 0.122, 1.321, 1.144, 0.88, 0.655, 0.251, 0.448, 0.469, 0.431, 0.324, 0.323, 0.441, -1.288, -2.457, 1.243, 1.222, 1.075, 0.711, 0.461, 0.26, 0.406, 0.6, 0.367, 0.355, 0.411, 0.279, -2.37, -1.353, 1.427, 1.061, 0.981, 0.642, 0.468, 0.352, 0.51, 0.425, 0.402, 0.375, 0.405],
"35": [-0.336, -0.413, -0.405, -0.104, 1.365, 0.0, -0.989, -0.792, -0.568, -0.431, -0.29, -0.26, -0.403, -0.39, -0.35, -0.442, -0.385, 0.358, 1.347, -0.693, -0.78, -0.721, -0.507, -0.448, -0.291, -0.416, -0.443, -0.28, -0.383, -0.349, -0.352, 1.133, 0.864, -1.0, -0.787, -0.707, -0.441, -0.247, -0.305, -0.373, -0.44, -0.367, -0.408, -0.321, -0.067, 1.429, 0.128, -0.89, -0.783, -0.636, -0.443, -0.383, -0.283, -0.376, -0.446, -0.323, -0.353, -0.382, 0.43, 1.345]}}
app/physim/data/base_g6.json (2,786 chars)
{"u": [0,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [36,37,38,39,2,17],
"series": {"2": [0.065, -0.047, -0.07, -0.054, 0.075, 0.084, 0.029, 0.116, 0.012, 0.036, 0.015, 0.102, -0.028, 0.047, 0.075, 0.018, 0.055, 0.071, -0.082, 0.008, -0.025, 0.003, 0.083, 0.076, -0.056, 0.077, 0.024, 0.124, -0.002, 0.012, 0.013, 0.035, 0.074, 0.06, 0.029, 0.021, -0.088, 0.059, -0.011, 0.026, 0.103, 0.004, 0.077, -0.023, 0.081, 0.069, 0.007, 0.026, 0.045, 0.024, -0.068, 0.025, 0.073, 0.074, -0.006, -0.016, -0.001, 0.025, -0.033, 0.136],
"17": [-0.205, -0.239, -0.281, -0.222, -0.272, -0.112, -0.194, -0.225, -0.225, -0.211, -0.25, -0.27, -0.249, -0.116, -0.241, -0.315, -0.175, -0.174, -0.237, -0.178, -0.238, -0.168, -0.187, -0.309, -0.248, -0.26, -0.166, -0.201, -0.121, -0.18, -0.224, -0.178, -0.174, -0.211, -0.166, -0.262, -0.201, -0.277, -0.198, -0.265, -0.239, -0.259, -0.168, -0.236, -0.211, -0.242, -0.243, -0.183, -0.171, -0.218, -0.236, -0.216, -0.187, -0.266, -0.194, -0.21, -0.188, -0.165, -0.253, -0.236],
"36": [-0.027, 0.855, 0.612, 0.454, 0.219, 0.114, 0.207, 0.222, 0.208, 0.161, 0.159, 0.16, -0.865, -1.702, 0.713, 0.722, 0.614, 0.444, 0.224, 0.089, 0.266, 0.191, 0.208, 0.166, 0.204, 0.064, -1.532, -1.046, 0.828, 0.62, 0.499, 0.36, 0.159, 0.136, 0.213, 0.26, 0.192, 0.181, 0.088, -0.211, -1.893, -0.069, 0.771, 0.61, 0.345, 0.267, 0.176, 0.11, 0.319, 0.194, 0.229, 0.101, 0.167, -0.878, -1.589, 0.733, 0.788, 0.447, 0.394, 0.194],
"37": [0.758, 0.598, 0.483, 0.179, 0.139, 0.101, 0.182, 0.187, 0.106, 0.146, 0.185, -0.243, -1.766, 0.106, 0.811, 0.548, 0.37, 0.135, 0.128, 0.167, 0.232, 0.152, 0.115, 0.216, 0.174, -1.093, -1.567, 0.793, 0.8, 0.534, 0.296, 0.186, 0.073, 0.247, 0.207, 0.169, 0.095, 0.09, 0.081, -1.606, -0.786, 0.831, 0.609, 0.514, 0.217, 0.164, 0.106, 0.151, 0.249, 0.242, 0.119, 0.189, -0.324, -1.839, 0.074, 0.773, 0.553, 0.367, 0.259, 0.177],
"38": [0.523, -0.37, -0.529, 0.959, 0.933, 0.846, 0.664, 0.579, 0.489, 0.478, 0.487, 0.502, 0.565, 0.504, 0.505, -0.751, 0.081, 0.887, 0.841, 0.664, 0.552, 0.461, 0.402, 0.456, 0.526, 0.527, 0.602, 0.559, 0.105, -0.718, 0.701, 0.92, 0.811, 0.64, 0.521, 0.444, 0.478, 0.511, 0.636, 0.521, 0.555, 0.618, -0.459, -0.517, 0.918, 0.906, 0.8, 0.617, 0.442, 0.437, 0.546, 0.631, 0.495, 0.471, 0.519, 0.445, -0.722, -0.001, 0.872, 0.717],
"39": [-0.807, -0.618, -0.603, -0.338, -0.32, -0.198, -0.349, -0.282, -0.295, -0.283, -0.283, -0.031, 1.232, -0.246, -0.787, -0.62, -0.508, -0.337, -0.243, -0.346, -0.356, -0.296, -0.328, -0.374, -0.374, 0.605, 1.014, -0.807, -0.743, -0.546, -0.35, -0.247, -0.201, -0.258, -0.363, -0.367, -0.31, -0.273, -0.285, 1.009, 0.546, -0.894, -0.684, -0.431, -0.375, -0.257, -0.254, -0.385, -0.317, -0.296, -0.374, -0.347, 0.082, 1.262, -0.233, -0.776, -0.704, -0.54, -0.46, -0.264]}}
app/physim/data/calib.json (1,367 chars)
{"39": {"b": -0.24229107313469256, "d": -0.15799448828924176, "tb": -0.26355, "td": -0.13013333333333332}, "12": {"b": -0.39783453970873955, "d": -0.31776045923150664, "tb": -0.39421666666666666, "td": -0.2839666666666666}, "15": {"b": -0.17120563246522064, "d": -0.07807689788527788, "tb": -0.17115, "td": -0.0528}, "21": {"b": -0.3917088827446607, "d": -0.31246325183874485, "tb": -0.3363833333333333, "td": -0.31178333333333336}, "11": {"b": 0.031471625112933284, "d": -0.06486927505407386, "tb": -0.001699999999999994, "td": -0.09813333333333327}, "20": {"b": -0.4576435263450253, "d": -0.3903932340923822, "tb": -0.44033333333333335, "td": -0.37099999999999994}, "14": {"b": 0.3412133815777518, "d": 0.25908426309491034, "tb": 0.35330000000000006, "td": 0.23171666666666668}, "26": {"b": -0.17181664270081598, "d": -0.10094835352739558, "tb": -0.17070000000000005, "td": -0.07795000000000002}, "25": {"b": 0.07128388563457833, "d": 0.0022360755583497945, "tb": 0.07354999999999999, "td": -0.02091666666666667}, "3": {"b": -0.019161354314183098, "d": 0.0306823312296372, "tb": -0.012433333333333336, "td": 0.035333333333333335}, "24": {"b": -0.19831146572532748, "d": -0.12668355230294126, "tb": -0.20651666666666665, "td": -0.09581666666666667}, "4": {"b": -0.23961841577313034, "d": -0.11837027558836292, "tb": -0.22506666666666666, "td": -0.09775000000000003}}
app/physim/data/chan_stats.json (10,045 chars)
{
"0": {
"b_mean": -0.3041666666666666,
"b_sd": 0.7693843678913392,
"b_min": -1.214,
"b_max": 2.392,
"b_med": -0.417,
"d_mean": -0.1997666666666667,
"d_sd": 1.0584174250056333,
"d_min": -1.304,
"d_max": 2.205,
"d_med": -0.6034999999999999
},
"1": {
"b_mean": -0.06063333333333335,
"b_sd": 0.49770349160474614,
"b_min": -0.69,
"b_max": 1.475,
"b_med": -0.1785,
"d_mean": -0.01496666666666668,
"d_sd": 0.640569043030405,
"d_min": -0.736,
"d_max": 1.457,
"d_med": -0.222
},
"2": {
"b_mean": 0.02805,
"b_sd": 0.05170603607574909,
"b_min": -0.088,
"b_max": 0.136,
"b_med": 0.025500000000000002,
"d_mean": 0.032749999999999994,
"d_sd": 0.044651474406414246,
"d_min": -0.09,
"d_max": 0.16,
"d_med": 0.0315
},
"3": {
"b_mean": -0.012433333333333336,
"b_sd": 0.4816550759851101,
"b_min": -0.637,
"b_max": 1.337,
"b_med": -0.108,
"d_mean": 0.035333333333333335,
"d_sd": 0.6184986840909382,
"d_min": -0.679,
"d_max": 1.417,
"d_med": -0.193
},
"4": {
"b_mean": -0.22506666666666666,
"b_sd": 0.5165543813471036,
"b_min": -0.866,
"b_max": 1.443,
"b_med": -0.2985,
"d_mean": -0.09775000000000003,
"d_sd": 0.7579840285256675,
"d_min": -0.89,
"d_max": 1.537,
"d_med": -0.4075
},
"5": {
"b_mean": -0.13090000000000002,
"b_sd": 0.051930305859552446,
"b_min": -0.272,
"b_max": -0.028,
"b_med": -0.129,
"d_mean": -0.12486666666666667,
"d_sd": 0.04545014362524673,
"d_min": -0.234,
"d_max": -0.017,
"d_med": -0.121
},
"6": {
"b_mean": -0.32573333333333326,
"b_sd": 0.741460312866141,
"b_min": -1.243,
"b_max": 1.927,
"b_med": -0.4685,
"d_mean": -0.19821666666666665,
"d_sd": 1.024897492299704,
"d_min": -1.301,
"d_max": 1.897,
"d_med": -0.6575
},
"7": {
"b_mean": 0.012200000000000004,
"b_sd": 0.5450573303179522,
"b_min": -1.697,
"b_max": 0.732,
"b_med": 0.122,
"d_mean": -0.08318333333333333,
"d_sd": 0.8123666350375441,
"d_min": -1.791,
"d_max": 0.774,
"d_med": 0.253
},
"8": {
"b_mean": -0.44106666666666666,
"b_sd": 0.5840907711040202,
"b_min": -1.279,
"b_max": 1.391,
"b_med": -0.5195000000000001,
"d_mean": -0.34584999999999994,
"d_sd": 0.8481887727190609,
"d_min": -1.272,
"d_max": 1.475,
"d_med": -0.7010000000000001
},
"9": {
"b_mean": 0.09343333333333334,
"b_sd": 0.05533936714090211,
"b_min": -0.06,
"b_max": 0.247,
"b_med": 0.0985,
"d_mean": 0.09921666666666668,
"d_sd": 0.04898914562317748,
"d_min": -0.002,
"d_max": 0.208,
"d_med": 0.1015
},
"10": {
"b_mean": -0.6625666666666666,
"b_sd": 0.9246250657548832,
"b_min": -1.89,
"b_max": 2.338,
"b_med": -0.792,
"d_mean": -0.43646666666666684,
"d_sd": 1.3613722790707259,
"d_min": -1.827,
"d_max": 2.455,
"d_med": -0.9804999999999999
},
"11": {
"b_mean": -0.001699999999999994,
"b_sd": 0.7122500801450756,
"b_min": -2.126,
"b_max": 0.936,
"b_med": 0.1595,
"d_mean": -0.09813333333333327,
"d_sd": 0.9144316899340024,
"d_min": -2.026,
"d_max": 0.891,
"d_med": 0.3005
},
"12": {
"b_mean": -0.39421666666666666,
"b_sd": 0.5704682606323412,
"b_min": -1.121,
"b_max": 1.454,
"b_med": -0.4755,
"d_mean": -0.2839666666666666,
"d_sd": 0.8629441072411481,
"d_min": -1.158,
"d_max": 1.534,
"d_med": -0.623
},
"13": {
"b_mean": -0.3984833333333333,
"b_sd": 0.8662202278032737,
"b_min": -1.579,
"b_max": 2.502,
"b_med": -0.554,
"d_mean": -0.22461666666666666,
"d_sd": 1.3248321037231683,
"d_min": -1.629,
"d_max": 2.527,
"d_med": -0.7415
},
"14": {
"b_mean": 0.35330000000000006,
"b_sd": 0.5176845661211081,
"b_min": -1.316,
"b_max": 0.97,
"b_med": 0.4385,
"d_mean": 0.23171666666666668,
"d_sd": 0.7961596383403408,
"d_min": -1.445,
"d_max": 1.096,
"d_med": 0.5549999999999999
},
"15": {
"b_mean": -0.17115,
"b_sd": 0.4886320642023676,
"b_min": -0.777,
"b_max": 1.514,
"b_med": -0.2525,
"d_mean": -0.0528,
"d_sd": 0.7624240683504162,
"d_min": -0.944,
"d_max": 1.518,
"d_med": -0.3285
},
"16": {
"b_mean": -0.6397499999999998,
"b_sd": 0.5652879096826088,
"b_min": -1.394,
"b_max": 1.184,
"b_med": -0.726,
"d_mean": -0.5239999999999999,
"d_sd": 0.8574194228419756,
"d_min": -1.453,
"d_max": 1.297,
"d_med": -0.8835
},
"17": {
"b_mean": -0.2157666666666667,
"b_sd": 0.043274460006901175,
"b_min": -0.315,
"b_max": -0.112,
"b_med": -0.217,
"d_mean": -0.22014999999999998,
"d_sd": 0.04822579703851456,
"d_min": -0.307,
"d_max": -0.059,
"d_med": -0.222
},
"18": {
"b_mean": -0.3145666666666667,
"b_sd": 0.8280339841388692,
"b_min": -1.537,
"b_max": 2.227,
"b_med": -0.4965,
"d_mean": -0.19676666666666667,
"d_sd": 1.1023687883623863,
"d_min": -1.357,
"d_max": 2.172,
"d_med": -0.6475
},
"19": {
"b_mean": -0.157,
"b_sd": 0.7013520513978696,
"b_min": -1.059,
"b_max": 1.881,
"b_med": -0.2865,
"d_mean": -0.05371666666666668,
"d_sd": 1.0004929133793112,
"d_min": -1.103,
"d_max": 2.065,
"d_med": -0.4555
},
"20": {
"b_mean": -0.44033333333333335,
"b_sd": 0.4270947852123175,
"b_min": -0.983,
"b_max": 0.824,
"b_med": -0.513,
"d_mean": -0.37099999999999994,
"d_sd": 0.5968405426354122,
"d_min": -1.004,
"d_max": 0.907,
"d_med": -0.621
},
"21": {
"b_mean": -0.3363833333333333,
"b_sd": 0.7281205507255574,
"b_min": -1.268,
"b_max": 1.788,
"b_med": -0.497,
"d_mean": -0.31178333333333336,
"d_sd": 1.0028954430658374,
"d_min": -1.289,
"d_max": 1.955,
"d_med": -0.7355
},
"22": {
"b_mean": 0.06260000000000002,
"b_sd": 0.6816773234700809,
"b_min": -1.964,
"b_max": 0.938,
"b_med": 0.186,
"d_mean": -0.05966666666666666,
"d_sd": 0.9359550143510579,
"d_min": -2.011,
"d_max": 0.954,
"d_med": 0.3225
},
"23": {
"b_mean": -0.5505333333333333,
"b_sd": 0.7585947197871132,
"b_min": -1.6,
"b_max": 1.701,
"b_med": -0.701,
"d_mean": -0.4213666666666666,
"d_sd": 1.014390834715868,
"d_min": -1.486,
"d_max": 1.763,
"d_med": -0.8494999999999999
},
"24": {
"b_mean": -0.20651666666666665,
"b_sd": 0.47808620183905,
"b_min": -0.767,
"b_max": 1.408,
"b_med": -0.294,
"d_mean": -0.09581666666666667,
"d_sd": 0.7304690158080325,
"d_min": -0.895,
"d_max": 1.442,
"d_med": -0.38
},
"25": {
"b_mean": 0.07354999999999999,
"b_sd": 0.3926355148225897,
"b_min": -1.17,
"b_max": 0.606,
"b_med": 0.1405,
"d_mean": -0.02091666666666667,
"d_sd": 0.5909040895573118,
"d_min": -1.289,
"d_max": 0.617,
"d_med": 0.2155
},
"26": {
"b_mean": -0.17070000000000005,
"b_sd": 0.5184685557807082,
"b_min": -0.842,
"b_max": 1.584,
"b_med": -0.276,
"d_mean": -0.07795000000000002,
"d_sd": 0.8084392458105102,
"d_min": -0.894,
"d_max": 1.708,
"d_med": -0.442
},
"27": {
"b_mean": 0.57465,
"b_sd": 0.7649249816158444,
"b_min": -1.942,
"b_max": 1.588,
"b_med": 0.705,
"d_mean": 0.4054,
"d_sd": 1.1805878789823314,
"d_min": -2.089,
"d_max": 1.674,
"d_med": 0.8585
},
"28": {
"b_mean": -0.35880000000000006,
"b_sd": 0.6532444616425512,
"b_min": -1.163,
"b_max": 1.686,
"b_med": -0.4515,
"d_mean": -0.24141666666666667,
"d_sd": 0.9673166543186478,
"d_min": -1.226,
"d_max": 1.882,
"d_med": -0.619
},
"29": {
"b_mean": 0.3119833333333333,
"b_sd": 0.7016666466745841,
"b_min": -1.937,
"b_max": 1.298,
"b_med": 0.433,
"d_mean": 0.18445,
"d_sd": 1.0730317395895923,
"d_min": -2.067,
"d_max": 1.279,
"d_med": 0.64
},
"30": {
"b_mean": -0.21364999999999998,
"b_sd": 0.6452195188461055,
"b_min": -1.189,
"b_max": 1.736,
"b_med": -0.347,
"d_mean": -0.12789999999999999,
"d_sd": 0.903933528160856,
"d_min": -1.119,
"d_max": 1.759,
"d_med": -0.497
},
"31": {
"b_mean": -0.35176666666666667,
"b_sd": 0.9683627654735365,
"b_min": -1.672,
"b_max": 2.544,
"b_med": -0.5545,
"d_mean": -0.22864999999999996,
"d_sd": 1.3823385960634489,
"d_min": -1.594,
"d_max": 2.723,
"d_med": -0.8305
},
"32": {
"b_mean": -0.2907166666666667,
"b_sd": 0.6548616162128369,
"b_min": -1.131,
"b_max": 1.961,
"b_med": -0.4005,
"d_mean": -0.1585,
"d_sd": 1.008318079774433,
"d_min": -1.272,
"d_max": 2.012,
"d_med": -0.5794999999999999
},
"33": {
"b_mean": 0.2252166666666667,
"b_sd": 0.7927997874971685,
"b_min": -2.346,
"b_max": 1.246,
"b_med": 0.3495,
"d_mean": 0.08756666666666671,
"d_sd": 1.1423421753378258,
"d_min": -2.259,
"d_max": 1.347,
"d_med": 0.528
},
"34": {
"b_mean": 0.2813333333333334,
"b_sd": 0.9171755860006063,
"b_min": -2.733,
"b_max": 1.572,
"b_med": 0.428,
"d_mean": 0.16476666666666664,
"d_sd": 1.3950796197907687,
"d_min": -2.847,
"d_max": 1.609,
"d_med": 0.717
},
"35": {
"b_mean": -0.24305000000000002,
"b_sd": 0.5626772735473389,
"b_min": -1.0,
"b_max": 1.429,
"b_med": -0.3825,
"d_mean": -0.1714166666666667,
"d_sd": 0.8281222190728987,
"d_min": -1.073,
"d_max": 1.578,
"d_med": -0.5245
},
"36": {
"b_mean": 0.11408333333333334,
"b_sd": 0.5967760409530157,
"b_min": -1.893,
"b_max": 0.855,
"b_med": 0.2055,
"d_mean": -0.01688333333333333,
"d_sd": 0.9004347485458837,
"d_min": -1.891,
"d_max": 0.871,
"d_med": 0.4095
},
"37": {
"b_mean": 0.10264999999999999,
"b_sd": 0.5796688084587612,
"b_min": -1.839,
"b_max": 0.831,
"b_med": 0.178,
"d_mean": -0.07138333333333334,
"d_sd": 0.8978265996591744,
"d_min": -1.939,
"d_max": 0.934,
"d_med": 0.3
},
"38": {
"b_mean": 0.44669999999999993,
"b_sd": 0.42105076099365185,
"b_min": -0.751,
"b_max": 0.959,
"b_med": 0.522,
"d_mean": 0.3955666666666667,
"d_sd": 0.5794178793313932,
"d_min": -0.829,
"d_max": 1.013,
"d_med": 0.6505000000000001
},
"39": {
"b_mean": -0.26355,
"b_sd": 0.45340230204532483,
"b_min": -0.894,
"b_max": 1.262,
"b_med": -0.3325,
"d_mean": -0.13013333333333332,
"d_sd": 0.6783973139359821,
"d_min": -0.898,
"d_max": 1.248,
"d_med": -0.4105
}
}
app/physim/data/drv_g0.json (2,852 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [0,1,2,3,4,5],
"series": {"0": [-1.179, -1.106, -0.852, -0.603, -0.344, 0.199, 2.076, -0.363, -1.168, -0.934, -0.651, -0.496, 0.449, 2.205, -0.563, -1.104, -0.905, -0.635, -0.451, 0.859, 2.074, -0.987, -1.048, -0.855, -0.604, -0.436, 1.325, 1.818, -1.187, -1.098, -0.829, -0.507, -0.309, 1.869, 1.348, -1.304, -0.946, -0.833, -0.622, -0.214, 2.127, 0.638, -1.235, -0.945, -0.725, -0.531, 0.034, 2.202, -0.175, -1.159, -0.986, -0.676, -0.524, 0.771, 2.05, -0.888, -1.045, -0.936, -0.63, -0.442],
"1": [-0.109, -0.205, -0.237, -0.16, -0.144, 1.288, 0.493, -0.623, -0.482, -0.341, -0.224, 0.208, 1.457, -0.058, -0.624, -0.618, -0.359, -0.209, 0.537, 1.317, -0.272, -0.66, -0.445, -0.305, -0.173, 0.758, 1.25, -0.587, -0.633, -0.401, -0.287, -0.211, 1.154, 1.003, -0.736, -0.544, -0.397, -0.219, -0.088, 1.309, 0.627, -0.696, -0.634, -0.497, -0.272, 0.049, 1.283, 0.151, -0.659, -0.46, -0.363, -0.219, 0.38, 1.323, -0.26, -0.655, -0.554, -0.389, -0.22, 0.744],
"2": [0.02, 0.016, -0.002, 0.048, 0.069, 0.074, 0.021, 0.025, 0.06, -0.004, 0.014, 0.111, -0.05, 0.073, 0.077, 0.073, 0.013, 0.023, 0.052, -0.039, -0.077, 0.001, 0.054, 0.049, 0.037, 0.045, 0.094, 0.116, 0.087, 0.108, 0.122, 0.008, 0.046, 0.144, 0.064, 0.077, 0.046, -0.092, 0.067, 0.028, 0.014, -0.044, 0.09, 0.043, 0.105, 0.047, 0.091, 0.03, 0.069, 0.033, 0.073, 0.027, -0.041, -0.0, 0.03, -0.01, 0.075, 0.016, 0.024, 0.098],
"3": [0.009, -0.136, -0.101, -0.03, 0.015, 0.025, 1.298, 0.326, -0.529, -0.446, -0.298, -0.204, 0.704, 1.354, -0.449, -0.466, -0.384, -0.303, -0.157, 1.142, 1.034, -0.679, -0.375, -0.295, -0.259, 0.022, 1.367, 0.558, -0.555, -0.501, -0.367, -0.182, 0.019, 1.417, 0.138, -0.606, -0.413, -0.261, -0.137, 0.508, 1.357, -0.259, -0.586, -0.492, -0.268, -0.227, 0.781, 1.226, -0.529, -0.53, -0.459, -0.173, -0.082, 1.189, 0.978, -0.583, -0.5, -0.306, -0.215, -0.005],
"4": [-0.405, -0.267, -0.267, -0.222, 0.213, 1.479, -0.38, -0.769, -0.652, -0.461, -0.204, 0.87, 1.237, -0.813, -0.853, -0.662, -0.41, -0.238, 1.109, 1.019, -0.868, -0.703, -0.57, -0.437, -0.207, 1.383, 0.713, -0.816, -0.701, -0.468, -0.459, -0.147, 1.537, 0.214, -0.756, -0.705, -0.49, -0.411, 0.211, 1.509, -0.384, -0.89, -0.694, -0.459, -0.343, 0.72, 1.33, -0.786, -0.843, -0.622, -0.429, -0.264, 1.108, 1.16, -0.87, -0.792, -0.621, -0.488, -0.182, 1.331],
"5": [-0.206, -0.129, -0.084, -0.062, -0.127, -0.118, -0.091, -0.099, -0.177, -0.07, -0.1, -0.147, -0.062, -0.124, -0.141, -0.159, -0.121, -0.188, -0.117, -0.121, -0.135, -0.077, -0.113, -0.169, -0.127, -0.095, -0.114, -0.233, -0.159, -0.116, -0.153, -0.175, -0.086, -0.079, -0.057, -0.185, -0.169, -0.119, -0.183, -0.096, -0.116, -0.017, -0.064, -0.05, -0.126, -0.178, -0.147, -0.158, -0.159, -0.101, -0.126, -0.234, -0.098, -0.125, -0.105, -0.207, -0.13, -0.045, -0.105, -0.118]}}
app/physim/data/drv_g1.json (2,789 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [6,7,8,9,10,11],
"series": {"6": [-0.822, -0.753, -0.457, 1.117, 1.574, -1.251, -1.168, -0.843, -0.675, -0.437, 1.508, 1.319, -1.246, -1.092, -0.879, -0.6, -0.302, 1.897, 0.789, -1.192, -1.089, -0.663, -0.546, 0.031, 1.868, -0.079, -1.168, -1.011, -0.701, -0.596, 0.474, 1.689, -0.714, -1.166, -0.933, -0.661, -0.582, 1.042, 1.596, -1.11, -1.157, -0.911, -0.654, -0.364, 1.582, 1.297, -1.172, -1.083, -0.878, -0.729, -0.202, 1.794, 0.759, -1.301, -1.109, -0.955, -0.76, 0.027, 1.781, -0.026],
"7": [-1.765, -0.399, 0.714, 0.574, 0.332, 0.122, -0.378, -1.776, 0.198, 0.667, 0.403, 0.253, 0.141, -0.974, -1.621, 0.602, 0.645, 0.302, 0.324, 0.125, -1.319, -1.406, 0.774, 0.608, 0.365, 0.253, 0.083, -1.709, -0.994, 0.717, 0.697, 0.276, 0.278, -0.002, -1.791, -0.4, 0.584, 0.529, 0.361, 0.155, -0.351, -1.704, 0.163, 0.663, 0.526, 0.373, 0.191, -0.865, -1.653, 0.447, 0.604, 0.406, 0.295, 0.018, -1.31, -1.384, 0.768, 0.634, 0.402, 0.238],
"8": [-0.522, 0.394, 1.272, -1.14, -1.037, -0.814, -0.733, -0.578, 0.891, 0.964, -1.165, -1.05, -0.842, -0.719, -0.478, 1.341, 0.629, -1.272, -1.06, -0.913, -0.683, -0.384, 1.475, -0.164, -1.157, -0.925, -0.794, -0.613, 0.032, 1.331, -0.523, -1.058, -1.0, -0.799, -0.647, 0.426, 1.29, -1.07, -1.043, -0.912, -0.751, -0.56, 0.882, 1.088, -1.193, -1.066, -0.947, -0.668, -0.516, 1.288, 0.52, -1.214, -0.927, -0.817, -0.734, -0.379, 1.37, 0.077, -1.142, -1.012],
"9": [0.091, 0.016, 0.071, 0.102, 0.082, 0.13, 0.156, 0.095, 0.111, 0.167, 0.105, 0.136, 0.125, 0.092, 0.012, 0.141, 0.128, 0.098, 0.187, 0.073, 0.009, 0.146, 0.126, 0.178, 0.005, 0.157, 0.123, 0.101, 0.12, 0.03, 0.127, 0.208, 0.035, 0.138, 0.036, 0.031, 0.097, 0.109, 0.123, 0.134, -0.002, 0.071, 0.099, 0.068, 0.179, 0.098, 0.111, 0.109, 0.068, 0.09, 0.148, 0.051, 0.124, 0.073, 0.092, 0.067, 0.164, 0.134, 0.04, 0.018],
"10": [-1.356, -1.022, -0.661, 2.361, 0.787, -1.693, -1.529, -1.232, -0.936, -0.285, 2.455, -0.342, -1.621, -1.439, -1.272, -0.893, 0.158, 2.363, -1.201, -1.608, -1.477, -1.198, -0.896, 1.16, 2.171, -1.749, -1.525, -1.285, -1.057, -0.784, 1.76, 1.664, -1.827, -1.527, -1.289, -0.996, -0.72, 2.303, 0.878, -1.749, -1.427, -1.302, -0.963, -0.388, 2.377, -0.148, -1.646, -1.491, -1.166, -0.858, 0.214, 2.32, -0.965, -1.789, -1.413, -1.079, -0.835, 1.037, 2.139, -1.696],
"11": [0.297, 0.112, -1.889, -1.039, 0.786, 0.618, 0.568, 0.305, -0.112, -2.0, -0.39, 0.672, 0.543, 0.411, 0.261, -0.531, -2.026, 0.187, 0.733, 0.57, 0.331, 0.14, -1.063, -1.799, 0.745, 0.65, 0.559, 0.334, 0.264, -1.575, -1.572, 0.803, 0.716, 0.547, 0.232, 0.07, -1.821, -1.048, 0.891, 0.59, 0.402, 0.337, -0.175, -2.009, -0.436, 0.729, 0.538, 0.412, 0.151, -0.485, -2.005, 0.258, 0.635, 0.622, 0.367, 0.304, -0.99, -1.871, 0.573, 0.685]}}
app/physim/data/drv_g2.json (2,869 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [12,13,14,15,16,17],
"series": {"12": [-0.524, 0.017, 1.501, -0.558, -1.038, -0.893, -0.789, -0.621, 0.584, 1.309, -1.122, -1.018, -0.831, -0.644, -0.5, 1.0, 1.091, -1.152, -1.056, -0.776, -0.625, -0.437, 1.356, 0.698, -1.069, -0.916, -0.806, -0.601, -0.211, 1.534, 0.074, -1.158, -0.899, -0.878, -0.581, -0.007, 1.419, -0.51, -1.113, -0.863, -0.72, -0.5, 0.536, 1.384, -0.989, -1.011, -0.927, -0.65, -0.509, 1.006, 1.057, -1.097, -0.976, -0.924, -0.625, -0.486, 1.457, 0.652, -1.073, -1.03],
"13": [2.215, 1.415, -1.545, -1.381, -1.064, -0.71, -0.208, 2.442, 0.524, -1.579, -1.219, -0.923, -0.721, 0.163, 2.527, -0.466, -1.567, -1.167, -0.831, -0.613, 0.899, 2.367, -1.209, -1.396, -1.012, -0.834, -0.524, 1.65, 2.066, -1.481, -1.416, -1.036, -0.781, -0.533, 2.202, 1.448, -1.629, -1.294, -0.974, -0.715, -0.306, 2.463, 0.6, -1.536, -1.276, -0.959, -0.643, 0.123, 2.519, -0.369, -1.496, -1.159, -0.888, -0.558, 0.879, 2.421, -1.13, -1.383, -1.107, -0.762],
"14": [0.675, 0.491, 0.01, -1.423, 0.326, 0.833, 0.836, 0.544, 0.49, -0.259, -1.355, 0.751, 0.942, 0.774, 0.688, 0.458, -0.848, -1.231, 0.984, 0.978, 0.762, 0.635, 0.355, -1.237, -0.784, 0.997, 0.804, 0.789, 0.592, 0.372, -1.445, -0.273, 1.096, 0.84, 0.665, 0.513, 0.108, -1.385, 0.217, 1.064, 0.818, 0.651, 0.507, -0.362, -1.302, 0.785, 0.806, 0.804, 0.597, 0.426, -0.779, -1.192, 1.075, 0.838, 0.839, 0.566, 0.41, -1.202, -0.767, 1.036],
"15": [-0.449, -0.223, 0.845, 1.201, -0.807, -0.699, -0.603, -0.335, -0.177, 1.3, 0.875, -0.844, -0.558, -0.548, -0.368, -0.137, 1.5, 0.46, -0.944, -0.69, -0.451, -0.322, 0.118, 1.495, -0.028, -0.693, -0.64, -0.499, -0.278, 0.506, 1.491, -0.472, -0.718, -0.598, -0.41, -0.207, 0.875, 1.375, -0.74, -0.749, -0.562, -0.35, -0.206, 1.344, 0.992, -0.822, -0.779, -0.507, -0.307, -0.17, 1.518, 0.445, -0.861, -0.689, -0.464, -0.269, 0.037, 1.517, -0.08, -0.809],
"16": [-0.926, -0.636, 1.11, 0.46, -1.453, -1.242, -1.027, -0.918, -0.475, 1.155, -0.124, -1.318, -1.142, -0.945, -0.706, -0.295, 1.297, -0.666, -1.372, -1.156, -0.994, -0.827, 0.231, 1.21, -1.181, -1.272, -1.085, -0.886, -0.783, 0.633, 0.973, -1.402, -1.217, -1.083, -0.855, -0.699, 1.082, 0.532, -1.337, -1.293, -1.159, -0.885, -0.607, 1.216, 0.056, -1.372, -1.143, -1.037, -0.882, -0.219, 1.271, -0.626, -1.251, -1.149, -1.096, -0.824, 0.095, 1.167, -1.115, -1.248],
"17": [-0.221, -0.27, -0.216, -0.168, -0.263, -0.232, -0.23, -0.175, -0.329, -0.246, -0.19, -0.243, -0.245, -0.277, -0.134, -0.18, -0.176, -0.27, -0.327, -0.203, -0.194, -0.279, -0.185, -0.122, -0.188, -0.162, -0.244, -0.17, -0.263, -0.264, -0.252, -0.168, -0.157, -0.298, -0.217, -0.215, -0.196, -0.194, -0.231, -0.187, -0.256, -0.288, -0.222, -0.317, -0.229, -0.246, -0.222, -0.19, -0.274, -0.148, -0.262, -0.246, -0.152, -0.23, -0.219, -0.163, -0.318, -0.176, -0.146, -0.159]}}
app/physim/data/drv_g3.json (2,862 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [18,19,20,21,22,23],
"series": {"18": [-1.079, -0.794, -0.561, -0.191, 2.17, -0.036, -1.198, -1.02, -0.791, -0.58, 0.431, 2.013, -0.841, -1.27, -0.981, -0.674, -0.518, 1.076, 1.858, -1.258, -1.101, -0.956, -0.725, -0.484, 1.574, 1.384, -1.357, -1.049, -0.882, -0.592, -0.364, 2.037, 0.719, -1.342, -1.063, -0.872, -0.58, -0.176, 2.172, 0.101, -1.24, -1.063, -0.805, -0.632, 0.342, 2.058, -0.707, -1.196, -0.978, -0.819, -0.558, 1.075, 1.844, -1.29, -1.065, -0.96, -0.663, -0.426, 1.589, 1.488],
"19": [1.66, -1.088, -0.956, -0.67, -0.399, -0.241, 1.657, 1.574, -1.103, -0.839, -0.613, -0.607, -0.178, 2.048, 1.204, -0.893, -0.765, -0.568, -0.356, -0.04, 2.041, 0.059, -0.954, -0.742, -0.548, -0.399, 0.154, 1.901, -0.731, -0.869, -0.724, -0.538, -0.332, 0.888, 1.704, -1.047, -0.763, -0.763, -0.472, -0.279, 1.57, 1.63, -1.048, -0.738, -0.645, -0.439, -0.263, 2.065, 1.22, -0.942, -0.722, -0.596, -0.399, -0.093, 2.055, 0.203, -0.871, -0.776, -0.499, -0.348],
"20": [0.87, 0.07, -0.931, -0.822, -0.713, -0.531, -0.346, 0.888, -0.467, -0.923, -0.772, -0.621, -0.552, -0.122, 0.739, -0.887, -0.919, -0.772, -0.621, -0.5, 0.254, 0.761, -0.908, -0.797, -0.722, -0.631, -0.472, 0.735, 0.575, -0.958, -0.817, -0.727, -0.505, -0.451, 0.907, 0.202, -0.798, -0.698, -0.776, -0.541, -0.388, 0.892, -0.425, -0.899, -0.779, -0.696, -0.515, -0.228, 0.862, -0.814, -0.878, -0.843, -0.636, -0.473, 0.261, 0.82, -1.004, -0.873, -0.714, -0.631],
"21": [0.173, -1.218, -0.976, -0.798, -0.512, -0.048, 1.866, -0.824, -1.068, -1.004, -0.824, -0.558, 0.414, 1.72, -1.21, -1.17, -0.855, -0.725, -0.523, 1.282, 1.532, -1.289, -0.979, -0.869, -0.732, -0.544, 1.832, 1.226, -1.253, -1.062, -0.835, -0.664, -0.421, 1.936, 0.325, -1.085, -1.089, -0.754, -0.666, -0.173, 1.955, -0.739, -1.14, -0.996, -0.768, -0.576, 0.502, 1.769, -1.253, -1.049, -1.022, -0.699, -0.487, 1.174, 1.578, -1.263, -1.031, -0.934, -0.788, -0.518],
"22": [0.486, 0.298, -0.15, -1.965, -0.221, 0.869, 0.601, 0.482, 0.161, -0.476, -1.912, 0.384, 0.792, 0.671, 0.384, 0.244, -1.119, -1.821, 0.719, 0.697, 0.656, 0.327, 0.175, -1.656, -1.505, 0.843, 0.728, 0.523, 0.318, 0.114, -1.967, -0.881, 0.954, 0.667, 0.486, 0.225, -0.145, -2.009, -0.267, 0.857, 0.645, 0.452, 0.272, -0.629, -2.011, 0.376, 0.787, 0.58, 0.455, 0.259, -1.099, -1.728, 0.785, 0.758, 0.528, 0.369, 0.182, -1.52, -1.543, 0.935],
"23": [-1.082, -0.849, -0.707, 1.27, 0.886, -1.486, -1.152, -1.15, -0.853, -0.554, 1.657, 0.506, -1.454, -1.285, -0.978, -0.805, -0.33, 1.76, -0.243, -1.44, -1.278, -0.961, -0.819, 0.1, 1.622, -0.967, -1.357, -1.082, -0.933, -0.78, 0.732, 1.373, -1.41, -1.218, -1.131, -0.978, -0.68, 1.287, 1.11, -1.468, -1.236, -0.986, -0.85, -0.58, 1.59, 0.575, -1.409, -1.241, -1.011, -0.793, -0.31, 1.763, -0.254, -1.307, -1.23, -0.965, -0.703, 0.197, 1.591, -0.996]}}
app/physim/data/drv_g4.json (2,799 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [24,25,26,27,28,29],
"series": {"24": [-0.538, -0.32, -0.022, 1.414, 0.1, -0.895, -0.667, -0.439, -0.373, 0.294, 1.352, -0.406, -0.786, -0.59, -0.42, -0.365, 0.612, 1.313, -0.685, -0.756, -0.617, -0.349, -0.398, 0.98, 1.095, -0.844, -0.723, -0.616, -0.416, -0.216, 1.328, 0.711, -0.826, -0.726, -0.559, -0.366, -0.053, 1.442, 0.164, -0.793, -0.623, -0.458, -0.335, 0.224, 1.419, -0.231, -0.783, -0.662, -0.401, -0.24, 0.581, 1.252, -0.762, -0.771, -0.646, -0.374, -0.386, 1.051, 1.106, -0.751],
"25": [0.355, 0.14, 0.183, -1.254, -0.509, 0.575, 0.404, 0.338, 0.21, -0.043, -1.216, -0.008, 0.506, 0.471, 0.39, 0.214, -0.432, -1.196, 0.316, 0.542, 0.398, 0.258, 0.098, -0.785, -1.135, 0.584, 0.583, 0.389, 0.206, 0.082, -1.072, -0.775, 0.55, 0.448, 0.339, 0.217, 0.038, -1.289, -0.513, 0.498, 0.475, 0.266, 0.259, -0.107, -1.256, -0.104, 0.617, 0.364, 0.25, 0.191, -0.39, -1.15, 0.309, 0.511, 0.357, 0.251, 0.068, -0.672, -1.107, 0.508],
"26": [1.525, 0.941, -0.759, -0.674, -0.463, -0.372, -0.181, 1.699, 0.217, -0.804, -0.682, -0.438, -0.362, 0.01, 1.626, -0.502, -0.718, -0.666, -0.519, -0.393, 0.424, 1.489, -0.894, -0.67, -0.578, -0.48, -0.299, 1.187, 1.279, -0.765, -0.777, -0.568, -0.452, -0.114, 1.583, 0.989, -0.824, -0.66, -0.516, -0.361, -0.091, 1.708, 0.057, -0.748, -0.619, -0.549, -0.4, 0.173, 1.47, -0.543, -0.719, -0.698, -0.446, -0.247, 0.745, 1.342, -0.814, -0.725, -0.696, -0.355],
"27": [0.771, 0.554, -2.089, -0.458, 1.674, 1.292, 1.05, 0.812, 0.146, -1.989, 0.375, 1.505, 1.263, 1.082, 0.737, -0.415, -1.869, 1.15, 1.509, 1.276, 0.956, 0.656, -1.119, -1.712, 1.509, 1.394, 1.214, 0.867, 0.631, -1.675, -1.239, 1.63, 1.395, 1.167, 0.982, 0.476, -2.047, -0.523, 1.594, 1.363, 1.053, 0.817, 0.212, -2.018, 0.351, 1.651, 1.26, 1.034, 0.85, -0.382, -1.997, 1.115, 1.394, 1.209, 0.97, 0.722, -1.024, -1.687, 1.421, 1.478],
"28": [-1.181, -0.942, -0.769, -0.556, 0.053, 1.882, -0.418, -1.067, -0.848, -0.631, -0.506, 0.706, 1.726, -0.995, -1.073, -0.888, -0.651, -0.467, 1.11, 1.367, -1.137, -1.001, -0.886, -0.562, -0.39, 1.562, 0.999, -1.198, -0.994, -0.764, -0.476, -0.26, 1.84, 0.3, -1.196, -0.981, -0.827, -0.607, 0.129, 1.763, -0.327, -1.181, -0.997, -0.684, -0.551, 0.525, 1.716, -0.885, -1.127, -0.957, -0.69, -0.497, 1.165, 1.466, -1.226, -1.023, -0.844, -0.645, -0.383, 1.494],
"29": [1.171, 0.934, 0.729, 0.467, -0.527, -1.988, 0.881, 1.115, 0.9, 0.615, 0.49, -1.113, -1.787, 1.21, 1.02, 0.747, 0.677, 0.424, -1.707, -1.238, 1.216, 1.054, 0.815, 0.635, 0.262, -2.042, -0.595, 1.279, 0.931, 0.785, 0.506, 0.012, -2.033, 0.195, 1.127, 0.985, 0.734, 0.46, -0.55, -1.93, 0.833, 1.177, 0.868, 0.774, 0.427, -1.161, -1.805, 1.188, 1.093, 0.874, 0.645, 0.41, -1.728, -1.346, 1.261, 1.041, 0.845, 0.593, 0.279, -2.067]}}
app/physim/data/drv_g5.json (2,837 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [30,31,32,33,34,35],
"series": {"30": [-0.881, -0.638, -0.532, -0.369, 1.27, 1.363, -0.981, -0.857, -0.766, -0.513, -0.287, 1.605, 0.899, -1.119, -0.825, -0.6, -0.481, -0.193, 1.697, 0.321, -1.083, -0.809, -0.675, -0.523, 0.211, 1.724, -0.344, -0.932, -0.798, -0.634, -0.406, 0.609, 1.663, -0.734, -0.993, -0.774, -0.571, -0.352, 1.115, 1.441, -1.046, -0.861, -0.69, -0.447, -0.345, 1.484, 0.971, -1.105, -0.989, -0.639, -0.387, -0.12, 1.657, 0.382, -0.995, -0.753, -0.566, -0.386, 0.154, 1.759],
"31": [-0.849, -0.567, 1.744, 2.139, -1.587, -1.379, -1.106, -0.826, -0.468, 2.461, 1.4, -1.54, -1.336, -1.155, -0.642, -0.393, 2.723, 0.429, -1.398, -1.226, -0.994, -0.753, 0.178, 2.513, -0.934, -1.452, -1.227, -0.91, -0.656, 1.007, 2.45, -1.399, -1.34, -1.191, -0.914, -0.546, 1.965, 1.859, -1.594, -1.402, -1.166, -0.835, -0.529, 2.454, 1.526, -1.567, -1.341, -1.162, -0.788, -0.054, 2.607, -0.113, -1.371, -1.255, -0.943, -0.671, 0.67, 2.45, -1.296, -1.419],
"32": [1.677, 1.003, -1.127, -0.922, -0.888, -0.647, -0.203, 1.915, 0.449, -1.096, -0.894, -0.802, -0.526, 0.165, 1.939, -0.493, -1.115, -0.853, -0.568, -0.531, 0.664, 1.846, -0.869, -0.933, -0.87, -0.573, -0.436, 1.213, 1.606, -1.109, -0.914, -0.902, -0.616, -0.409, 1.728, 1.106, -1.272, -0.983, -0.75, -0.586, -0.25, 2.012, 0.418, -1.095, -0.876, -0.697, -0.608, 0.222, 1.942, -0.333, -0.98, -0.875, -0.741, -0.378, 0.575, 1.902, -0.841, -0.948, -0.825, -0.558],
"33": [0.627, 0.377, -1.802, -1.562, 1.347, 1.071, 0.853, 0.481, 0.247, -2.106, -0.896, 1.214, 1.029, 0.687, 0.535, -0.095, -2.226, -0.111, 1.112, 0.96, 0.784, 0.475, -0.557, -2.259, 0.521, 1.235, 0.905, 0.663, 0.49, -1.253, -2.062, 1.122, 1.044, 0.862, 0.572, 0.33, -1.861, -1.702, 1.217, 0.953, 0.813, 0.582, 0.251, -2.15, -1.083, 1.239, 0.994, 0.798, 0.558, 0.102, -2.251, -0.251, 1.196, 0.93, 0.713, 0.517, -0.55, -2.131, 0.481, 1.275],
"34": [0.861, 1.233, 1.028, 0.802, 0.474, -1.584, -2.518, 1.471, 1.447, 1.135, 0.699, 0.376, -2.392, -2.006, 1.609, 1.326, 1.027, 0.688, 0.325, -2.799, -1.197, 1.51, 1.119, 0.904, 0.628, 0.024, -2.843, -0.135, 1.471, 1.068, 0.822, 0.648, -0.735, -2.847, 0.769, 1.407, 1.043, 0.735, 0.554, -1.451, -2.6, 1.461, 1.356, 1.093, 0.816, 0.511, -2.306, -1.976, 1.464, 1.298, 0.964, 0.601, 0.249, -2.772, -1.281, 1.569, 1.187, 0.931, 0.613, 0.012],
"35": [-0.403, 0.525, 1.348, -0.727, -0.965, -0.744, -0.59, -0.341, 0.878, 1.283, -0.856, -0.842, -0.748, -0.477, -0.314, 1.241, 0.882, -1.073, -0.901, -0.723, -0.527, -0.168, 1.498, 0.474, -1.054, -0.797, -0.58, -0.522, -0.01, 1.393, -0.107, -1.069, -0.839, -0.565, -0.47, 0.461, 1.418, -0.669, -0.973, -0.761, -0.582, -0.381, 0.922, 1.283, -0.923, -0.821, -0.695, -0.537, -0.352, 1.314, 0.886, -0.971, -0.87, -0.648, -0.431, -0.197, 1.578, 0.523, -1.034, -0.935]}}
app/physim/data/drv_g6.json (2,781 chars)
{"u": [0.8,0,0,0,0,0,0,0], "t": 360, "stride": 6, "channels": [36,37,38,39,2,17],
"series": {"2": [0.029, 0.011, 0.022, 0.043, 0.055, 0.061, 0.012, -0.021, 0.059, 0.033, 0.02, -0.029, 0.042, 0.004, 0.131, 0.026, 0.056, 0.087, 0.001, 0.064, 0.006, -0.019, 0.07, 0.003, -0.03, 0.094, -0.041, 0.055, -0.004, 0.057, 0.063, -0.012, 0.037, 0.16, 0.024, 0.09, 0.016, 0.048, 0.094, 0.01, 0.063, 0.055, 0.062, -0.0, 0.026, 0.047, 0.006, 0.1, 0.03, -0.008, 0.085, 0.072, -0.047, -0.044, 0.065, 0.04, 0.001, -0.09, 0.017, 0.058],
"17": [-0.229, -0.165, -0.217, -0.132, -0.215, -0.213, -0.169, -0.206, -0.151, -0.216, -0.271, -0.282, -0.212, -0.157, -0.233, -0.201, -0.139, -0.222, -0.216, -0.263, -0.25, -0.246, -0.272, -0.203, -0.228, -0.168, -0.183, -0.255, -0.178, -0.112, -0.256, -0.29, -0.21, -0.212, -0.229, -0.059, -0.222, -0.199, -0.25, -0.263, -0.251, -0.293, -0.23, -0.207, -0.25, -0.187, -0.24, -0.275, -0.293, -0.174, -0.253, -0.183, -0.269, -0.288, -0.261, -0.307, -0.225, -0.167, -0.258, -0.204],
"36": [-1.766, -0.787, 0.786, 0.66, 0.536, 0.227, -0.247, -1.891, -0.161, 0.871, 0.566, 0.479, 0.207, -0.503, -1.865, 0.44, 0.731, 0.645, 0.434, 0.243, -1.13, -1.646, 0.758, 0.693, 0.575, 0.459, 0.184, -1.559, -1.406, 0.868, 0.789, 0.505, 0.398, 0.084, -1.808, -0.835, 0.866, 0.718, 0.58, 0.395, -0.233, -1.837, -0.199, 0.867, 0.646, 0.438, 0.394, -0.551, -1.849, 0.403, 0.836, 0.657, 0.463, 0.249, -0.981, -1.777, 0.743, 0.624, 0.585, 0.416],
"37": [0.339, 0.091, -1.742, -1.157, 0.715, 0.622, 0.478, 0.299, 0.1, -1.716, -1.147, 0.847, 0.593, 0.472, 0.336, 0.007, -1.908, -0.456, 0.753, 0.647, 0.562, 0.204, -0.412, -1.939, 0.374, 0.798, 0.545, 0.397, 0.172, -1.516, -1.388, 0.934, 0.683, 0.582, 0.316, 0.242, -1.246, -1.608, 0.708, 0.604, 0.588, 0.301, 0.279, -1.716, -1.207, 0.842, 0.594, 0.61, 0.219, 0.109, -1.916, -0.748, 0.677, 0.596, 0.4, 0.218, -0.13, -1.937, 0.128, 0.625],
"38": [-0.196, -0.764, 0.864, 0.849, 0.753, 0.732, 0.569, -0.444, -0.481, 0.971, 0.86, 0.772, 0.669, 0.59, -0.726, -0.258, 1.013, 0.711, 0.695, 0.651, 0.422, -0.756, 0.164, 0.94, 0.762, 0.75, 0.626, 0.092, -0.821, 0.56, 0.937, 0.916, 0.708, 0.569, -0.199, -0.673, 0.816, 0.825, 0.866, 0.613, 0.555, -0.365, -0.518, 1.0, 0.914, 0.697, 0.651, 0.629, -0.73, -0.265, 0.929, 0.857, 0.65, 0.583, 0.389, -0.829, 0.128, 0.912, 0.84, 0.76],
"39": [-0.576, -0.48, -0.04, 1.199, 0.196, -0.807, -0.586, -0.506, -0.398, 0.202, 1.248, -0.288, -0.809, -0.625, -0.489, -0.344, 0.654, 1.083, -0.683, -0.764, -0.569, -0.516, -0.314, 0.921, 0.961, -0.898, -0.719, -0.509, -0.483, -0.249, 1.095, 0.672, -0.782, -0.624, -0.482, -0.423, -0.055, 1.248, 0.198, -0.861, -0.647, -0.376, -0.355, 0.144, 1.198, -0.32, -0.707, -0.656, -0.543, -0.396, 0.604, 1.159, -0.624, -0.865, -0.59, -0.43, -0.274, 0.926, 1.01, -0.864]}}
app/physim/data/waves.json (70,602 chars)
{"0": {"base": [2.205666666666666, 1.4193333333333331, 0.633, 0.31333333333333335, -0.006333333333333302, -0.32599999999999996, -0.6456666666666666, -0.7303333333333333, -0.8150000000000001, -0.8765000000000001, -0.938, -0.9994999999999999, -1.061, -0.83525, -0.6095, -0.688875, -0.7682500000000001, -0.8476250000000001, -0.889875, -0.895, -0.8566111111111111, -0.8118333333333334, -0.7606666666666667, -0.7094999999999999, -0.652, -0.5881666666666667, -0.5346111111111111, -0.4976666666666667, -0.4773333333333334, -0.4570000000000001, -0.4406666666666667, -0.4283333333333333, -0.4128333333333334, -0.3901666666666667, -0.36033333333333334, -0.33049999999999996, -0.3085, -0.29433333333333334, -0.29097222222222224, -0.29058333333333325, -0.29316666666666663, -0.29574999999999996, -0.32175, -0.37116666666666664, -0.41405555555555557, -0.427, -0.41, -0.39299999999999996, -0.4021666666666666, -0.4375, -0.4666111111111111, -0.4633333333333333, -0.42766666666666664, -0.39199999999999996, -0.351, -0.3046666666666667, -0.2803611111111111, -0.28341666666666665, -0.31383333333333335, -0.34425, -0.3670462962962963, -0.38222222222222224, -0.3897777777777778, -0.3973333333333333, -0.40488888888888885, -0.41244444444444445, -0.41585185185185186, -0.41511111111111115, -0.4102222222222222, -0.4053333333333333, -0.40044444444444444, -0.3955555555555556, -0.33794444444444444, -0.22761111111111113, -0.06455555555555557, 0.09849999999999996, 0.2615555555555555, 0.42461111111111105, 0.668148148148148, 0.9921666666666665, 1.3966666666666665, 1.8011666666666661], "drv": [2.1525, 2.062, 1.818, 1.5830000000000002, 1.348, 0.638, -0.367, -0.9375, -1.187, -1.2455, -1.304, -1.235, -1.1436666666666666, -1.0465, -1.098, -1.022, -0.946, -0.945, -0.9273888888888889, -0.8887222222222221, -0.8518333333333333, -0.831, -0.7963333333333332, -0.7373333333333333, -0.6653333333333333, -0.5926666666666667, -0.5628333333333334, -0.5644999999999999, -0.5725000000000001, -0.5477777777777778, -0.4867777777777778, -0.41277777777777774, -0.3365, -0.2615, -0.14716666666666667, 0.17100000000000004, 0.684, 1.2049999999999998, 1.597, 1.869]}, "1": {"base": [1.2916666666666667, 1.354, 1.118, 0.882, 0.6075, 0.333, -0.03, -0.429, -0.5595, -0.69, -0.669, -0.648, -0.615, -0.555, -0.539, -0.523, -0.509, -0.495, -0.465, -0.4546666666666666, -0.46399999999999997, -0.4106666666666667, -0.361, -0.338, -0.3106666666666667, -0.302, -0.289, -0.29783333333333334, -0.30550000000000005, -0.28783333333333333, -0.26, -0.2001666666666667, -0.1325, -0.09016666666666666, -0.09500000000000001, -0.127, -0.12133333333333335, -0.09533333333333334, -0.069, -0.0625, -0.058499999999999996, -0.0825, -0.11533333333333333, -0.16316666666666668, -0.2005, -0.21516666666666664, -0.20099999999999998, -0.20266666666666666, -0.20200000000000004, -0.215, -0.19699999999999998, -0.18833333333333332, -0.17300000000000001, -0.156, -0.16133333333333333, -0.18716666666666668, -0.2285, -0.21966666666666668, -0.1625, -0.13616666666666666, -0.11966666666666666, -0.14383333333333334, -0.12949999999999998, -0.14583333333333331, -0.16199999999999998, -0.17299999999999996, -0.16966666666666666, -0.15533333333333332, -0.135, -0.15066666666666667, -0.19899999999999998, -0.21166666666666667, -0.21533333333333335, -0.1665, -0.1335, 0.008000000000000007, 0.2145, 0.6018333333333333, 0.8676666666666666, 1.0740740740740742, 1.1052222222222223, 1.1984444444444444], "drv": [1.219, 1.2835, 1.14325, 1.003, 0.627, 0.322, -0.159, -0.4295, -0.58275, -0.736, -0.696, -0.641, -0.6395, -0.6465000000000001, -0.5952500000000001, -0.544, -0.634, -0.471, -0.49333333333333335, -0.47300000000000003, -0.41, -0.4346666666666667, -0.41533333333333333, -0.4076666666666666, -0.3406666666666667, -0.30916666666666665, -0.2575, -0.24950000000000003, -0.23750000000000002, -0.23600000000000002, -0.20933333333333334, -0.18216666666666667, -0.14, -0.059666666666666666, 0.085, 0.29333333333333333, 0.5956666666666667, 0.8751666666666665, 1.1324999999999998, 1.309]}, "3": {"base": [1.333, 1.202, 1.0875, 0.8813333333333333, 0.6751666666666667, 0.469, -0.05149999999999999, -0.572, -0.603, -0.5966666666666667, -0.5903333333333333, -0.584, -0.5055, -0.427, -0.4515, -0.45566666666666666, -0.45983333333333337, -0.464, -0.3845, -0.363, -0.35661111111111105, -0.3653333333333333, -0.3311666666666666, -0.3028888888888889, -0.28049999999999997, -0.24733333333333332, -0.21761111111111112, -0.19133333333333336, -0.18516666666666667, -0.17105555555555554, -0.149, -0.11433333333333334, -0.084, -0.058, -0.041, -0.0345, -0.0385, -0.04650000000000001, -0.045000000000000005, -0.034, -0.02, -0.024333333333333332, -0.04699999999999999, -0.09016666666666666, -0.1045, -0.09000000000000001, -0.044500000000000005, -0.033999999999999996, -0.058499999999999996, -0.1065, -0.1338888888888889, -0.14066666666666663, -0.13833333333333334, -0.11044444444444444, -0.057, -0.03366666666666667, -0.036666666666666674, -0.066, -0.066, -0.07, -0.078, -0.08549999999999998, -0.09705555555555556, -0.11266666666666665, -0.13683333333333333, -0.14894444444444446, -0.14900000000000002, -0.1165, -0.09294444444444445, -0.07833333333333332, -0.09316666666666666, -0.10588888888888888, -0.11649999999999999, 0.0365, 0.19999999999999998, 0.37399999999999994, 0.39699999999999996, 0.503, 0.6919999999999998, 0.9143333333333333, 1.087, 1.21], "drv": [1.35975, 1.29, 1.1480000000000001, 1.006, 0.6733333333333333, 0.34066666666666673, -0.259, -0.489, -0.56, -0.631, -0.5971666666666666, -0.5633333333333334, -0.586, -0.498, -0.46775, -0.4375, -0.4454166666666667, -0.45333333333333337, -0.45561111111111113, -0.42483333333333334, -0.361, -0.32202777777777775, -0.3045833333333334, -0.29375, -0.27155555555555555, -0.24783333333333335, -0.23749999999999996, -0.2267222222222222, -0.20566666666666666, -0.20233333333333334, -0.17361111111111108, -0.134, -0.055499999999999994, 0.05413888888888888, 0.20941666666666667, 0.46691666666666665, 0.7856111111111111, 1.0589166666666667, 1.23025, 1.295]}, "4": {"base": [1.437, 1.335, 1.108, -0.147, 0.007000000000000006, 0.161, -0.514, -0.845, -0.866, -0.8553333333333333, -0.8446666666666667, -0.834, -0.765, -0.763, -0.783, -0.7456666666666667, -0.7083333333333334, -0.671, -0.6543333333333333, -0.645, -0.638, -0.604, -0.5650000000000001, -0.5720000000000001, -0.505, -0.47300000000000003, -0.4053333333333333, -0.422, -0.414, -0.38000000000000006, -0.32166666666666666, -0.27399999999999997, -0.257, -0.269, -0.275, -0.25433333333333336, -0.2383333333333333, -0.20166666666666666, -0.19722222222222222, -0.19366666666666665, -0.21633333333333335, -0.2554444444444444, -0.272, -0.30066666666666664, -0.31455555555555553, -0.35266666666666663, -0.38033333333333336, -0.36344444444444446, -0.36000000000000004, -0.3223333333333333, -0.3178888888888889, -0.2886666666666667, -0.2823333333333333, -0.2951111111111111, -0.284, -0.27466666666666667, -0.25077777777777777, -0.25533333333333336, -0.26266666666666666, -0.2578888888888889, -0.26, -0.25, -0.26299999999999996, -0.28, -0.32, -0.31266666666666665, -0.294, -0.28, -0.307, -0.33899999999999997, -0.36000000000000004, -0.332, -0.3256666666666667, -0.24633333333333338, -0.16866666666666666, -0.021999999999999992, 0.09900000000000002, 0.41, 0.2853333333333333, 0.3105555555555556, 0.29566666666666674, 0.8663333333333335], "drv": [1.464, 1.33, 1.1985000000000001, 1.019, 0.713, 0.214, -0.382, -0.786, -0.8414999999999999, -0.868, -0.816, -0.756, -0.8295, -0.843, -0.8225, -0.703, -0.701, -0.705, -0.6666666666666666, -0.6455, -0.6111666666666666, -0.5598333333333333, -0.5093333333333333, -0.4726666666666666, -0.45966666666666667, -0.446, -0.4383333333333333, -0.4483333333333333, -0.43566666666666665, -0.38116666666666665, -0.31616666666666665, -0.24916666666666668, -0.22699999999999998, -0.18799999999999997, -0.04766666666666666, 0.28633333333333333, 0.7046666666666667, 1.004, 1.109, 1.383]}, "6": {"base": [1.923, 1.7355, 1.41375, 1.092, 0.51125, -0.0695, -0.648, -1.2265000000000001, -1.19425, -1.162, -1.09875, -1.0354999999999999, -0.97425, -0.913, -0.9415, -0.97, -1.00175, -1.0335, -0.9700000000000001, -0.92175, -0.88875, -0.8567499999999999, -0.8104999999999999, -0.7456666666666667, -0.6764999999999999, -0.6381666666666667, -0.635, -0.64025, -0.61875, -0.5791666666666666, -0.54825, -0.5110833333333334, -0.4590000000000001, -0.40391666666666665, -0.36075000000000007, -0.3416666666666666, -0.33475000000000005, -0.33558333333333334, -0.332, -0.3428333333333334, -0.37250000000000005, -0.41050000000000003, -0.438, -0.46016666666666667, -0.48750000000000004, -0.5100833333333333, -0.52275, -0.5216666666666667, -0.51675, -0.4935833333333333, -0.45599999999999996, -0.426, -0.418, -0.4408333333333334, -0.4725, -0.4776666666666667, -0.4475, -0.3988333333333333, -0.367, -0.3595, -0.3595, -0.38099999999999995, -0.41650000000000004, -0.44583333333333336, -0.455, -0.45933333333333337, -0.47900000000000004, -0.4928333333333333, -0.48550000000000004, -0.4750000000000001, -0.4825, -0.4936666666666667, -0.49049999999999994, -0.44883333333333336, -0.383, -0.18433333333333332, 0.12299999999999996, 0.5506666666666666, 0.9899999999999999, 1.3442222222222222, 1.6016666666666668, 1.7623333333333333], "drv": [1.8058000000000003, 1.596, 1.574, 1.3079999999999998, 1.041, 0.774, -0.27299999999999996, -1.11, -1.251, -1.209, -1.22775, -1.2465, -1.1669999999999998, -1.157, -1.168, -1.0875, -1.0932499999999998, -1.099, -0.9939999999999999, -0.9086666666666666, -0.8775000000000001, -0.8550833333333333, -0.84375, -0.7779166666666667, -0.7146666666666667, -0.6699999999999999, -0.6645, -0.6660833333333334, -0.65875, -0.6335833333333333, -0.5353333333333333, -0.4633333333333333, -0.351, -0.2668333333333333, -0.1115, 0.22516666666666665, 0.7896666666666667, 1.2826666666666666, 1.508, 1.6569000000000003]}, "7": {"base": [-1.643, -1.577, -1.504, -1.255, -1.006, -0.757, 0.181, 0.731, 0.677, 0.6953333333333334, 0.7136666666666667, 0.732, 0.656, 0.644, 0.632, 0.594, 0.556, 0.518, 0.47900000000000004, 0.4296666666666667, 0.3754444444444444, 0.3853333333333333, 0.40066666666666667, 0.3612222222222223, 0.302, 0.25133333333333335, 0.24244444444444446, 0.24033333333333332, 0.21666666666666667, 0.18255555555555558, 0.11466666666666668, 0.05166666666666667, 0.008888888888888889, 0.009666666666666667, 0.015333333333333332, 0.02844444444444445, 0.036000000000000004, 0.04, 0.04633333333333334, 0.068, 0.10300000000000002, 0.09866666666666668, 0.10433333333333333, 0.12066666666666666, 0.15155555555555555, 0.14766666666666667, 0.10833333333333334, 0.07977777777777778, 0.08666666666666667, 0.105, 0.12744444444444444, 0.12933333333333333, 0.13466666666666668, 0.10555555555555557, 0.06933333333333334, 0.07166666666666667, 0.0901111111111111, 0.09733333333333333, 0.04766666666666666, 0.03255555555555555, 0.02633333333333333, 0.028999999999999998, 0.025999999999999995, 0.043000000000000003, 0.08, 0.083, 0.08, 0.071, 0.078, 0.073, 0.056, 0.09066666666666667, 0.09616666666666666, 0.0725, -0.03761111111111111, -0.15333333333333332, -0.27466666666666667, -0.5852222222222222, -0.9018333333333333, -1.2245, -1.3639999999999999, -1.5035], "drv": [-1.759, -1.637, -1.395, -1.1945000000000001, -0.994, -0.4, -0.012666666666666668, 0.5245, 0.771, 0.744, 0.717, 0.584, 0.6813333333333333, 0.6245, 0.621, 0.659, 0.697, 0.529, 0.4613333333333333, 0.41283333333333333, 0.35575, 0.32975, 0.32225, 0.31877777777777777, 0.32994444444444443, 0.29144444444444445, 0.27225, 0.26175, 0.23158333333333336, 0.1947777777777778, 0.12594444444444444, 0.10194444444444445, 0.065, 0.0405, -0.10416666666666667, -0.36399999999999993, -0.8014999999999999, -1.1884166666666667, -1.5117500000000001, -1.709]}, "8": {"base": [1.391, 1.2389999999999999, 1.0594999999999999, 0.88, 0.5603333333333333, 0.2406666666666667, -0.079, -0.976, -1.1275, -1.279, -1.2266666666666666, -1.1743333333333335, -1.122, -1.0935000000000001, -1.0837500000000002, -1.074, -1.0506666666666666, -1.0273333333333334, -1.0067777777777778, -0.9879999999999999, -0.971, -0.9431111111111111, -0.9053333333333334, -0.8576666666666667, -0.793888888888889, -0.7445, -0.7094999999999999, -0.6967222222222222, -0.6756666666666665, -0.6463333333333333, -0.6152777777777777, -0.5774166666666667, -0.5327500000000001, -0.5005833333333334, -0.486, -0.48900000000000005, -0.47866666666666663, -0.472, -0.46900000000000003, -0.46900000000000003, -0.455, -0.42700000000000005, -0.4286666666666667, -0.44083333333333335, -0.4635, -0.4777222222222222, -0.5026666666666667, -0.5383333333333332, -0.5927777777777777, -0.6181666666666666, -0.6144999999999999, -0.5728333333333332, -0.5409999999999999, -0.519, -0.5101666666666667, -0.53275, -0.58675, -0.6176944444444445, -0.6073333333333334, -0.5556666666666666, -0.5213888888888889, -0.5005833333333333, -0.49324999999999997, -0.4833055555555556, -0.4746666666666666, -0.4673333333333333, -0.47877777777777775, -0.4845, -0.4845, -0.48761111111111116, -0.5183333333333333, -0.5766666666666667, -0.5382222222222223, -0.42583333333333334, -0.23950000000000002, -0.06283333333333334, 0.12699999999999997, 0.33, 0.6823333333333332, 0.9899999999999999, 1.253, 1.322], "drv": [1.3920000000000001, 1.2810000000000001, 1.026, 0.80025, 0.5745, -0.043500000000000004, -0.523, -1.105, -1.179, -1.2109999999999999, -1.2429999999999999, -1.1495, -1.058, -1.04, -1.058, -1.02575, -0.9935, -0.9685, -0.9438333333333334, -0.9191666666666666, -0.8790833333333333, -0.8797499999999999, -0.8462500000000001, -0.8193333333333334, -0.7783333333333333, -0.7448333333333332, -0.7121666666666666, -0.7010000000000001, -0.6741666666666667, -0.6561666666666667, -0.6096666666666667, -0.5710000000000001, -0.5017499999999999, -0.43925, -0.2629166666666667, 0.025499999999999984, 0.44816666666666666, 0.8043333333333335, 1.1005, 1.3145]}, "10": {"base": [2.321, 1.9585000000000001, 1.596, 1.108, 0.6200000000000001, 0.132, -1.1755, -1.53275, -1.89, -1.8399999999999999, -1.79, -1.74, -1.6480000000000001, -1.5395, -1.431, -1.4443333333333335, -1.4576666666666667, -1.471, -1.423416666666667, -1.38275, -1.3514722222222222, -1.3226666666666667, -1.2963333333333333, -1.214777777777778, -1.1286666666666667, -1.038, -1.0063333333333333, -0.983, -0.968, -0.9213333333333332, -0.8684999999999999, -0.8094999999999999, -0.779388888888889, -0.7526666666666667, -0.7293333333333333, -0.7064444444444445, -0.6890000000000001, -0.677, -0.6777777777777777, -0.6863333333333334, -0.7026666666666667, -0.7282222222222222, -0.7565, -0.7875, -0.8061666666666668, -0.8190000000000001, -0.826, -0.8076666666666666, -0.8026666666666666, -0.8109999999999999, -0.8392222222222223, -0.8486666666666666, -0.8393333333333333, -0.8437777777777778, -0.8228333333333332, -0.7765, -0.7294999999999999, -0.721, -0.751, -0.726, -0.7103333333333334, -0.7040000000000001, -0.7393333333333333, -0.7520000000000001, -0.742, -0.7466666666666667, -0.767, -0.8029999999999999, -0.8334444444444443, -0.8573333333333334, -0.8746666666666667, -0.8508888888888889, -0.7773333333333333, -0.654, -0.47022222222222226, -0.2346666666666666, 0.052666666666666716, 0.6265555555555556, 1.1741666666666666, 1.6955, 1.9040000000000001, 2.1125000000000003], "drv": [2.3752000000000004, 2.155, 1.9095, 1.664, 0.878, 0.3195, -0.836, -1.7225000000000001, -1.77475, -1.827, -1.749, -1.6695, -1.6726666666666665, -1.525, -1.5259999999999998, -1.527, -1.427, -1.51, -1.4126666666666667, -1.3383333333333336, -1.287, -1.2926666666666666, -1.2633333333333334, -1.228, -1.1463333333333332, -1.0888333333333333, -1.0265, -0.9951666666666666, -0.952, -0.9115555555555556, -0.8518888888888889, -0.8035555555555556, -0.7520000000000001, -0.62, -0.3811666666666667, 0.12049999999999994, 0.8365, 1.5254999999999999, 2.0315, 2.303]}, "11": {"base": [-2.067, -1.7665, -1.512, -1.2574999999999998, -1.003, -0.905, 0.251, 0.9175, 0.8573333333333333, 0.7971666666666667, 0.737, 0.712, 0.646, 0.6385000000000001, 0.6306666666666667, 0.6228333333333333, 0.615, 0.671, 0.5911666666666666, 0.5412777777777777, 0.5213333333333333, 0.5041666666666668, 0.4780555555555555, 0.443, 0.3703333333333334, 0.3106666666666667, 0.264, 0.259, 0.2505, 0.23850000000000002, 0.20666666666666667, 0.1733888888888889, 0.1386666666666667, 0.11883333333333335, 0.10577777777777779, 0.09949999999999999, 0.07933333333333334, 0.059722222222222225, 0.04066666666666666, 0.042833333333333334, 0.041444444444444443, 0.0365, 0.06883333333333334, 0.10844444444444445, 0.15533333333333332, 0.16866666666666666, 0.1863888888888889, 0.2085, 0.22816666666666666, 0.2303333333333333, 0.215, 0.18900000000000003, 0.1745, 0.17149999999999999, 0.14166666666666666, 0.1066111111111111, 0.06633333333333333, 0.059166666666666666, 0.07672222222222222, 0.119, 0.15566666666666665, 0.16555555555555554, 0.14866666666666664, 0.13533333333333333, 0.13294444444444445, 0.1415, 0.1465, 0.15000000000000002, 0.15200000000000002, 0.167, 0.1505, 0.1025, 0.059166666666666666, -0.008333333333333326, -0.09999999999999999, -0.252, -0.4791666666666667, -0.7815, -1.1265, -1.439, -1.719, -1.999], "drv": [-2.01, -1.835, -1.7035, -1.572, -1.0434999999999999, -0.41300000000000003, 0.2225, 0.659, 0.7310000000000001, 0.803, 0.8385, 0.7005, 0.6839999999999999, 0.6675, 0.69175, 0.716, 0.604, 0.5405, 0.5651666666666667, 0.5693333333333334, 0.553, 0.5283333333333333, 0.4811666666666667, 0.41516666666666663, 0.36483333333333334, 0.322, 0.283, 0.2786666666666667, 0.25300000000000006, 0.24966666666666668, 0.2306666666666667, 0.21766666666666667, 0.16700000000000004, 0.031166666666666676, -0.19383333333333333, -0.5593333333333333, -1.0365, -1.4388333333333332, -1.7149999999999999, -1.855]}, "12": {"base": [1.4400000000000002, 1.3, 1.1600000000000001, 1.02, 0.519, 0.018, -0.7605, -0.8786666666666666, -0.9968333333333333, -1.115, -1.0925, -1.07, -1.0915, -1.0573333333333332, -1.0231666666666666, -0.989, -0.9610000000000001, -0.933, -0.9093333333333334, -0.891, -0.8780000000000001, -0.838, -0.771, -0.6963333333333334, -0.6552222222222223, -0.6476666666666667, -0.6543333333333333, -0.6612777777777777, -0.6685, -0.6076666666666667, -0.5350555555555556, -0.4506666666666667, -0.42283333333333334, -0.4066111111111111, -0.40199999999999997, -0.39916666666666667, -0.3906111111111111, -0.37633333333333335, -0.3661666666666667, -0.37905555555555553, -0.415, -0.4571666666666667, -0.47905555555555557, -0.48066666666666674, -0.4788333333333334, -0.49044444444444446, -0.5155, -0.5408333333333334, -0.5531111111111112, -0.5523333333333333, -0.5516666666666667, -0.5483888888888889, -0.5425000000000001, -0.5118333333333334, -0.4837777777777778, -0.4583333333333333, -0.45766666666666667, -0.4568888888888889, -0.456, -0.4655, -0.4740555555555556, -0.4816666666666667, -0.47783333333333333, -0.46561111111111114, -0.445, -0.44250000000000006, -0.44894444444444453, -0.4643333333333333, -0.46216666666666667, -0.45622222222222225, -0.44650000000000006, -0.45616666666666666, -0.45166666666666666, -0.433, -0.377, -0.25716666666666665, -0.07350000000000001, 0.39316666666666666, 0.8074166666666667, 1.16925, 1.2595, 1.3497500000000002], "drv": [1.4846666666666668, 1.3464999999999998, 1.0739999999999998, 0.8744999999999999, 0.675, 0.074, -0.534, -1.0555, -1.1244999999999998, -1.09775, -1.071, -1.158, -1.0755, -1.0145, -1.016, -0.9945, -0.9730000000000001, -0.899, -0.8853333333333334, -0.8690000000000001, -0.8523333333333335, -0.828, -0.8373333333333334, -0.8128333333333334, -0.7598333333333332, -0.6755, -0.6283333333333333, -0.613, -0.5983333333333333, -0.5808333333333333, -0.5486666666666666, -0.5088333333333334, -0.4340833333333333, -0.33625, -0.18475, 0.11400000000000003, 0.5186666666666667, 0.9225833333333334, 1.2047500000000002, 1.4065]}, "13": {"base": [2.435, 2.2375, 2.04, 1.5876666666666668, 1.1353333333333335, 0.683, -0.6725, -1.12575, -1.579, -1.525, -1.471, -1.417, -1.4085, -1.3827500000000001, -1.357, -1.3326666666666667, -1.3083333333333333, -1.284, -1.15575, -1.05275, -1.0000277777777777, -0.9723333333333333, -0.9696666666666666, -0.9347222222222 … [+50,602 chars]
app/physim/fit_channels.py (1,111 chars)
import json, glob
import numpy as np
def load(cond):
out = {}
for f in sorted(glob.glob(f"data/{cond}_g*.json")):
d = json.load(open(f))
for ch, s in d["series"].items():
out[int(ch)] = np.array(s, float)
return out
base = load("base")
drv = load("drv")
print(f"{'ch':>3} {'b_mean':>7} {'b_sd':>6} {'b_min':>6} {'b_max':>6} {'quiet':>6} | {'d_mean':>7} {'d_sd':>6} {'d_min':>6} {'d_max':>6}")
rows = {}
for ch in sorted(base):
b, d = base[ch], drv[ch]
# quiet level: median of middle 50% (robust to spikes)
qb = np.median(b)
rows[ch] = dict(
b_mean=float(b.mean()), b_sd=float(b.std()), b_min=float(b.min()), b_max=float(b.max()), b_med=float(qb),
d_mean=float(d.mean()), d_sd=float(d.std()), d_min=float(d.min()), d_max=float(d.max()), d_med=float(np.median(d)),
)
r = rows[ch]
print(f"{ch:>3} {r['b_mean']:>7.3f} {r['b_sd']:>6.3f} {r['b_min']:>6.2f} {r['b_max']:>6.2f} {qb:>6.2f} | {r['d_mean']:>7.3f} {r['d_sd']:>6.3f} {r['d_min']:>6.2f} {r['d_max']:>6.2f}")
json.dump(rows, open("data/chan_stats.json", "w"), indent=1)
app/physim/model.py (4,350 chars)
"""Generative model of the hidden system.
Structure discovered by experiment:
- One global relaxation oscillator. Period depends on the MAX rectified port
input a = max_p u_p (ports interchangeable; u < theta does nothing;
no summation across ports).
T(0) = 82.5; T(a): 0.27->48, 0.3->47, 0.35->45.5, 0.4->45, 0.5->43.5,
0.6->42, 0.8->40.5, 1.0->39.5 (per-interval jitter sd ~2 ticks)
- Threshold theta ~ 0.26 (sharp).
- On release (a drops below theta after driving): one extra-long interval
(~+40 ticks, observed pauses 100-130), then normal.
- No slow adaptation; fresh draws only randomize phase.
- 36 spiking channels: fixed per-channel pulse waveform locked to the
oscillator (each channel has its own delay - irrelevant for single-channel
stats with random phase), plus baseline + iid noise (sd ~0.05-0.1).
- 4 quiet channels: 2, 5, 9, 17 (constant level + noise, input-independent).
"""
import json, glob
import numpy as np
THETA = 0.26
# amplitude -> period lookup (measured)
T_TAB = [(0.0, 82.5), (0.26, 82.5), (0.27, 48.0), (0.30, 47.0), (0.35, 45.5),
(0.40, 45.0), (0.50, 43.5), (0.60, 42.0), (0.70, 41.2), (0.80, 40.5),
(0.90, 40.0), (1.00, 39.5)]
def period(a):
if a < THETA:
return 82.5
xs = [x for x, _ in T_TAB]
ys = [y for _, y in T_TAB]
return float(np.interp(a, xs, ys))
# ---------------- waveform extraction ----------------
def load(cond):
out = {}
for f in sorted(glob.glob(f"data/{cond}_g*.json")):
d = json.load(open(f))
for ch, s in d["series"].items():
out[int(ch)] = (np.array(s, float), d["stride"])
return out
QUIET = {2, 5, 9, 17}
def extract_waveform(series, stride, T, wlen=None):
"""Spike-align and average onto a 1-tick grid over one cycle length T."""
x = np.asarray(series, float)
n = len(x)
t = np.arange(n) * stride
# find event times via extreme deviation from median
med = np.median(x)
dev = x - med
amp = np.max(np.abs(dev))
sign = 1 if abs(np.max(dev)) >= abs(np.min(dev)) else -1
sd = np.median(np.abs(dev)) * 1.48
thr = 0.5 * amp
events = []
i = 0
while i < n:
if sign * dev[i] > thr:
j = i
while j + 1 < n and sign * dev[j + 1] > thr:
j += 1
# subgrid peak: parabola on the extreme sample
k = i + int(np.argmax(sign * dev[i:j + 1]))
tk = t[k]
if 0 < k < n - 1:
y0, y1, y2 = sign * dev[k - 1], sign * dev[k], sign * dev[k + 1]
den = (y0 - 2 * y1 + y2)
if den != 0:
tk = t[k] + 0.5 * (y0 - y2) / den * stride
events.append(tk)
i = j + 1
else:
i += 1
if len(events) < 2:
return None, events
# pool phases
Tcyc = int(round(T))
grid = np.full(Tcyc, np.nan)
cnt = np.zeros(Tcyc)
acc = np.zeros(Tcyc)
for k in range(n):
# offset to nearest preceding event
evs = [e for e in events]
d = [(t[k] - e) % T for e in evs if abs(((t[k] - e + T / 2) % T) - T / 2) < T]
if not events:
continue
ph = (t[k] - events[0]) % T
b = int(ph) % Tcyc
acc[b] += x[k]
cnt[b] += 1
with np.errstate(invalid="ignore"):
grid = acc / np.maximum(cnt, 1)
grid[cnt == 0] = np.nan
# fill gaps by interpolation
idx = np.arange(Tcyc)
good = ~np.isnan(grid)
if good.sum() >= 2:
grid = np.interp(idx, idx[good], grid[good], period=Tcyc)
return grid, events
if __name__ == "__main__":
base = load("base")
drv = load("drv")
waves = {}
for ch in sorted(base):
if ch in QUIET:
continue
gb, eb = extract_waveform(*base[ch], 82.5)
gd, ed = extract_waveform(*drv[ch], 40.5)
waves[ch] = dict(base=gb.tolist() if gb is not None else None,
drv=gd.tolist() if gd is not None else None,
n_ev_base=len(eb), n_ev_drv=len(ed))
print(ch, len(eb), len(ed),
None if gb is None else (round(float(np.nanmin(gb)),2), round(float(np.nanmax(gb)),2)),
None if gd is None else (round(float(np.nanmin(gd)),2), round(float(np.nanmax(gd)),2)))
json.dump(waves, open("data/waves.json", "w"))
app/physim/refit.py (2,442 chars)
import json
import numpy as np
from model import load, QUIET
def detect_events(x, t, stride):
"""Event = interpolated peak time of the channel's dominant excursion."""
med = np.median(x)
dev = x - med
sign = 1 if abs(dev.max()) >= abs(dev.min()) else -1
thr = 0.5 * max(sign * dev)
events = []
i, n = 0, len(x)
while i < n:
if sign * dev[i] > thr:
j = i
while j + 1 < n and sign * dev[j + 1] > thr:
j += 1
k = i + int(np.argmax(sign * dev[i:j + 1]))
tk = t[k]
if 0 < k < n - 1:
y0, y1, y2 = sign * dev[k - 1], sign * dev[k], sign * dev[k + 1]
den = y0 - 2 * y1 + y2
if den != 0:
tk = t[k] + 0.5 * (y0 - y2) / den * stride
events.append(tk)
i = j + 1
else:
i += 1
return events
def extract(series, stride, T):
x = np.asarray(series, float)
n = len(x)
t = np.arange(n) * stride
events = detect_events(x, t, stride)
if len(events) < 2:
return None
Tcyc = int(round(T))
acc = np.zeros(Tcyc)
cnt = np.zeros(Tcyc)
for k in range(n):
prev = [e for e in events if e <= t[k] + 2]
if not prev:
continue
dt = t[k] - prev[-1]
if dt >= Tcyc:
# only use if within one cycle of an event; else fold modulo cycle
if dt < 2 * Tcyc:
dt = dt - Tcyc
else:
continue
b = int(dt) % Tcyc
acc[b] += x[k]
cnt[b] += 1
grid = np.where(cnt > 0, acc / np.maximum(cnt, 1), np.nan)
idx = np.arange(Tcyc)
good = ~np.isnan(grid)
if good.sum() < 5:
return None
grid = np.interp(idx, idx[good], grid[good], period=Tcyc)
# light smoothing on the recovery part only (keep spike sharp)
sm = grid.copy()
for i in range(18, Tcyc - 2):
sm[i] = grid[max(i-1,0):i+2].mean()
return sm
base = load("base")
drv = load("drv")
waves = {}
for ch in sorted(base):
if ch in QUIET:
continue
gb = extract(*base[ch], 82.5)
gd = extract(*drv[ch], 40.5)
waves[ch] = dict(base=gb.tolist(), drv=gd.tolist())
print(ch, "base rng (%.2f, %.2f) mean %.3f | drv rng (%.2f, %.2f) mean %.3f" % (
gb.min(), gb.max(), gb.mean(), gd.min(), gd.max(), gd.mean()))
json.dump(waves, open("data/waves.json", "w"))
app/physim/sim.py (5,985 chars)
"""Monte-Carlo simulator for contract protocols."""
import json
import numpy as np
from model import period, THETA, QUIET, load
waves = {int(k): v for k, v in json.load(open("data/waves.json")).items()}
# quiet channel levels and noise (measured)
QUIET_LEV = {2: 0.032, 5: -0.130, 9: 0.092, 17: -0.216}
QUIET_SD = {2: 0.050, 5: 0.048, 9: 0.052, 17: 0.048}
TB, TD = 82.5, 40.5
SPIKE_LEN = 16 # ticks after peak that are "spike shape" (top+fall+dip)
RISE = 8 # ticks before peak that are rise
def render_value(ch, dt_prev, dt_next, T):
"""Value for channel ch, dt_prev ticks after last peak, dt_next before next."""
wb = np.array(waves[ch]["base"])
wd = np.array(waves[ch]["drv"])
lam = np.clip((TB - T) / (TB - TD), 0, 1)
if dt_next is not None and dt_next <= RISE:
# rising edge of next spike (same in both conditions)
vb = wb[int(len(wb) - dt_next) % len(wb)]
vd = wd[int(len(wd) - dt_next) % len(wd)]
return (1 - lam) * vb + lam * vd
if dt_prev <= SPIKE_LEN:
i = int(dt_prev)
return (1 - lam) * wb[i] + lam * wd[min(i, len(wd) - 1)]
# recovery: normalized position between spike end and next rise
span = max(T - SPIKE_LEN - RISE, 1)
s = np.clip((dt_prev - SPIKE_LEN) / span, 0, 1)
ib = SPIKE_LEN + s * (TB - SPIKE_LEN - RISE)
idn = SPIKE_LEN + s * (TD - SPIKE_LEN - RISE)
vb = np.interp(ib, np.arange(len(wb)), wb)
vd = np.interp(idn, np.arange(len(wd)), wd)
return (1 - lam) * vb + lam * vd
def noise_sd(ch):
if ch in QUIET_SD:
return QUIET_SD[ch]
return 0.07
def expand_protocol(segments, n_in=8):
"""segments: list of dicts with t and u or u_start/u_end -> per-tick max-amp array."""
amps = []
for seg in segments:
t = int(seg["t"])
if "u" in seg:
a = np.full(t, max(0.0, max(seg["u"])))
else:
us, ue = np.array(seg["u_start"], float), np.array(seg["u_end"], float)
frac = np.arange(t) / max(t - 1, 1)
uu = us[None, :] + frac[:, None] * (ue - us)[None, :]
a = np.maximum(0.0, uu.max(axis=1))
amps.append(a)
return np.concatenate(amps)
def spike_times(amp, rng, phase0=None):
"""Simulate oscillator: returns array of spike (peak) times.
Release dynamics (measured): when drive drops below threshold,
the drive effect persists ~35 ticks (current cycle completes at the
driven rate), then ONE long cycle (~+45 ticks vs baseline, i.e. ~128
total; sometimes instead a short pause + doublet), then normal.
"""
n = len(amp)
ph = rng.uniform(0, 1) if phase0 is None else phase0
driven = amp[0] >= THETA
spikes = []
state = "norm" # norm | persist | pause
pause_now = 0.0
a_prev = amp[0] if amp[0] >= THETA else 0.8
jit = rng.normal(0, 0.05)
for t in range(n):
a = amp[t]
if driven and a < THETA:
state = "persist"
driven = a >= THETA
a_eff = a
if state == "persist" and not driven:
a_eff = a_prev # drive persists until next spike
if a >= THETA:
a_prev = a
state = "norm"
pause_now = 0.0
T = period(a_eff) * (1 + jit * 0.4) + pause_now
ph += 1.0 / max(T, 5)
if ph >= 1.0:
spikes.append(t)
ph -= 1.0
jit = rng.normal(0, 0.05)
if state == "persist":
state = "pause"
if rng.uniform() < 0.2:
pause_now = rng.normal(5, 8) # occasional weak pause
else:
pause_now = rng.normal(45, 10) # one long cycle (~128)
elif state == "pause":
state = "norm"
pause_now = 0.0
return np.array(spikes, int)
def render_trace(ch, amp, spikes, rng, with_noise=True):
n = len(amp)
y = np.empty(n)
if ch in QUIET:
y[:] = QUIET_LEV[ch]
else:
sp = spikes
j = 0
for t in range(n):
# find prev and next spike
while j < len(sp) and sp[j] <= t:
j += 1
prev = sp[j - 1] if j > 0 else None
nxt = sp[j] if j < len(sp) else None
T = period(amp[t])
if prev is None:
dtp = 999
else:
dtp = t - prev
dtn = None if nxt is None else nxt - t
y[t] = render_value(ch, dtp, dtn, T)
if with_noise:
y = y + rng.normal(0, noise_sd(ch), n)
return y
def predict(segments, ch, stat, window, n_mc=300, thr=None, seed=0):
"""stat: 'mean' | 'sd' | 'count'; window: (start, end) ticks (absolute).
Returns samples of the statistic."""
rng = np.random.default_rng(seed)
amp = expand_protocol(segments)
a, b = window
vals = []
for _ in range(n_mc):
sp = spike_times(amp, rng)
y = render_trace(ch, amp, sp, rng)
w = y[a:b]
if stat == "mean":
vals.append(w.mean())
elif stat == "sd":
vals.append(w.std())
elif stat == "count":
x = w
up = np.sum((x[:-1] < thr) & (x[1:] >= thr))
vals.append(up)
return np.array(vals)
if __name__ == "__main__":
# self-test protocol
segs = [{"t": 250, "u": [0]*8},
{"t": 300, "u": [0,0,0,0.5,0,0,0,0]},
{"t": 250, "u": [0]*8},
{"t": 200, "u": [1]*8}]
total = 1000
for ch in [0, 34, 27, 5]:
m = predict(segs, ch, "mean", (980, 1000), 200)
s = predict(segs, ch, "sd", (800, 1000), 100)
print(f"ch{ch}: tail20 mean {np.mean(m):.3f} [{np.quantile(m,0.05):.3f},{np.quantile(m,0.95):.3f}]"
f" sd200 {np.mean(s):.3f} [{np.quantile(s,0.05):.3f},{np.quantile(s,0.95):.3f}]")
c = predict(segs, 0, "count", (800, 1000), 200, thr=1.0)
print("ch0 upcross(1.0) in [800,1000):", np.mean(c), np.quantile(c, [0.05, 0.5, 0.95]))
app/physim/spk.py (1,110 chars)
import numpy as np, json, sys
def onsets(series, stride, thr=0.0, hyst=-0.5):
"""Upward crossings of thr, requiring a prior dip below hyst (armed)."""
x = np.asarray(series, float)
on = []
armed = x[0] < thr
for i in range(1, len(x)):
if not armed and x[i] < hyst:
armed = True
if armed and x[i-1] < thr <= x[i]:
on.append(i * stride)
armed = False
return np.array(on)
def report(series, stride, seg_bounds=None, thr=0.0):
on = onsets(series, stride, thr)
iv = np.diff(on)
print("onsets:", on.tolist())
print("intervals:", iv.tolist())
if seg_bounds:
for a, b in zip(seg_bounds[:-1], seg_bounds[1:]):
sel = on[(on >= a) & (on < b)]
if len(sel) > 1:
d = np.diff(sel)
print(f"seg [{a},{b}): n={len(sel)}, T mean={d.mean():.1f}, last3={d[-3:].tolist()}")
else:
print(f"seg [{a},{b}): n={len(sel)} spikes")
if __name__ == "__main__":
d = json.load(open(sys.argv[1]))
report(d["series"], d["stride"], d.get("segs"))
app/physim/theory_code.py (37,241 chars)
import math
import numpy as np
WB = {"0": [2.206, 1.419, 0.633, 0.313, -0.006, -0.326, -0.646, -0.73, -0.815, -0.877, -0.938, -0.999, -1.061, -0.835, -0.61, -0.689, -0.768, -0.848, -0.89, -0.895, -0.857, -0.812, -0.761, -0.709, -0.652, -0.588, -0.535, -0.498, -0.477, -0.457, -0.441, -0.428, -0.413, -0.39, -0.36, -0.33, -0.308, -0.294, -0.291, -0.291, -0.293, -0.296, -0.322, -0.371, -0.414, -0.427, -0.41, -0.393, -0.402, -0.438, -0.467, -0.463, -0.428, -0.392, -0.351, -0.305, -0.28, -0.283, -0.314, -0.344, -0.367, -0.382, -0.39, -0.397, -0.405, -0.412, -0.416, -0.415, -0.41, -0.405, -0.4, -0.396, -0.338, -0.228, -0.065, 0.098, 0.262, 0.425, 0.668, 0.992, 1.397, 1.801], "1": [1.292, 1.354, 1.118, 0.882, 0.608, 0.333, -0.03, -0.429, -0.559, -0.69, -0.669, -0.648, -0.615, -0.555, -0.539, -0.523, -0.509, -0.495, -0.465, -0.455, -0.464, -0.411, -0.361, -0.338, -0.311, -0.302, -0.289, -0.298, -0.306, -0.288, -0.26, -0.2, -0.133, -0.09, -0.095, -0.127, -0.121, -0.095, -0.069, -0.062, -0.058, -0.083, -0.115, -0.163, -0.201, -0.215, -0.201, -0.203, -0.202, -0.215, -0.197, -0.188, -0.173, -0.156, -0.161, -0.187, -0.229, -0.22, -0.163, -0.136, -0.12, -0.144, -0.129, -0.146, -0.162, -0.173, -0.17, -0.155, -0.135, -0.151, -0.199, -0.212, -0.215, -0.167, -0.134, 0.008, 0.214, 0.602, 0.868, 1.074, 1.105, 1.198], "3": [1.333, 1.202, 1.087, 0.881, 0.675, 0.469, -0.051, -0.572, -0.603, -0.597, -0.59, -0.584, -0.505, -0.427, -0.452, -0.456, -0.46, -0.464, -0.385, -0.363, -0.357, -0.365, -0.331, -0.303, -0.28, -0.247, -0.218, -0.191, -0.185, -0.171, -0.149, -0.114, -0.084, -0.058, -0.041, -0.035, -0.038, -0.047, -0.045, -0.034, -0.02, -0.024, -0.047, -0.09, -0.104, -0.09, -0.045, -0.034, -0.058, -0.106, -0.134, -0.141, -0.138, -0.11, -0.057, -0.034, -0.037, -0.066, -0.066, -0.07, -0.078, -0.085, -0.097, -0.113, -0.137, -0.149, -0.149, -0.117, -0.093, -0.078, -0.093, -0.106, -0.116, 0.036, 0.2, 0.374, 0.397, 0.503, 0.692, 0.914, 1.087, 1.21], "4": [1.437, 1.335, 1.108, -0.147, 0.007, 0.161, -0.514, -0.845, -0.866, -0.855, -0.845, -0.834, -0.765, -0.763, -0.783, -0.746, -0.708, -0.671, -0.654, -0.645, -0.638, -0.604, -0.565, -0.572, -0.505, -0.473, -0.405, -0.422, -0.414, -0.38, -0.322, -0.274, -0.257, -0.269, -0.275, -0.254, -0.238, -0.202, -0.197, -0.194, -0.216, -0.255, -0.272, -0.301, -0.315, -0.353, -0.38, -0.363, -0.36, -0.322, -0.318, -0.289, -0.282, -0.295, -0.284, -0.275, -0.251, -0.255, -0.263, -0.258, -0.26, -0.25, -0.263, -0.28, -0.32, -0.313, -0.294, -0.28, -0.307, -0.339, -0.36, -0.332, -0.326, -0.246, -0.169, -0.022, 0.099, 0.41, 0.285, 0.311, 0.296, 0.866], "6": [1.923, 1.736, 1.414, 1.092, 0.511, -0.07, -0.648, -1.227, -1.194, -1.162, -1.099, -1.035, -0.974, -0.913, -0.942, -0.97, -1.002, -1.034, -0.97, -0.922, -0.889, -0.857, -0.81, -0.746, -0.676, -0.638, -0.635, -0.64, -0.619, -0.579, -0.548, -0.511, -0.459, -0.404, -0.361, -0.342, -0.335, -0.336, -0.332, -0.343, -0.373, -0.411, -0.438, -0.46, -0.488, -0.51, -0.523, -0.522, -0.517, -0.494, -0.456, -0.426, -0.418, -0.441, -0.472, -0.478, -0.448, -0.399, -0.367, -0.359, -0.359, -0.381, -0.417, -0.446, -0.455, -0.459, -0.479, -0.493, -0.486, -0.475, -0.482, -0.494, -0.49, -0.449, -0.383, -0.184, 0.123, 0.551, 0.99, 1.344, 1.602, 1.762], "7": [-1.643, -1.577, -1.504, -1.255, -1.006, -0.757, 0.181, 0.731, 0.677, 0.695, 0.714, 0.732, 0.656, 0.644, 0.632, 0.594, 0.556, 0.518, 0.479, 0.43, 0.375, 0.385, 0.401, 0.361, 0.302, 0.251, 0.242, 0.24, 0.217, 0.183, 0.115, 0.052, 0.009, 0.01, 0.015, 0.028, 0.036, 0.04, 0.046, 0.068, 0.103, 0.099, 0.104, 0.121, 0.152, 0.148, 0.108, 0.08, 0.087, 0.105, 0.127, 0.129, 0.135, 0.106, 0.069, 0.072, 0.09, 0.097, 0.048, 0.033, 0.026, 0.029, 0.026, 0.043, 0.08, 0.083, 0.08, 0.071, 0.078, 0.073, 0.056, 0.091, 0.096, 0.072, -0.038, -0.153, -0.275, -0.585, -0.902, -1.224, -1.364, -1.504], "8": [1.391, 1.239, 1.059, 0.88, 0.56, 0.241, -0.079, -0.976, -1.127, -1.279, -1.227, -1.174, -1.122, -1.094, -1.084, -1.074, -1.051, -1.027, -1.007, -0.988, -0.971, -0.943, -0.905, -0.858, -0.794, -0.745, -0.709, -0.697, -0.676, -0.646, -0.615, -0.577, -0.533, -0.501, -0.486, -0.489, -0.479, -0.472, -0.469, -0.469, -0.455, -0.427, -0.429, -0.441, -0.464, -0.478, -0.503, -0.538, -0.593, -0.618, -0.614, -0.573, -0.541, -0.519, -0.51, -0.533, -0.587, -0.618, -0.607, -0.556, -0.521, -0.501, -0.493, -0.483, -0.475, -0.467, -0.479, -0.484, -0.484, -0.488, -0.518, -0.577, -0.538, -0.426, -0.24, -0.063, 0.127, 0.33, 0.682, 0.99, 1.253, 1.322], "10": [2.321, 1.959, 1.596, 1.108, 0.62, 0.132, -1.175, -1.533, -1.89, -1.84, -1.79, -1.74, -1.648, -1.54, -1.431, -1.444, -1.458, -1.471, -1.423, -1.383, -1.351, -1.323, -1.296, -1.215, -1.129, -1.038, -1.006, -0.983, -0.968, -0.921, -0.868, -0.809, -0.779, -0.753, -0.729, -0.706, -0.689, -0.677, -0.678, -0.686, -0.703, -0.728, -0.756, -0.787, -0.806, -0.819, -0.826, -0.808, -0.803, -0.811, -0.839, -0.849, -0.839, -0.844, -0.823, -0.776, -0.729, -0.721, -0.751, -0.726, -0.71, -0.704, -0.739, -0.752, -0.742, -0.747, -0.767, -0.803, -0.833, -0.857, -0.875, -0.851, -0.777, -0.654, -0.47, -0.235, 0.053, 0.627, 1.174, 1.696, 1.904, 2.113], "11": [-2.067, -1.766, -1.512, -1.257, -1.003, -0.905, 0.251, 0.917, 0.857, 0.797, 0.737, 0.712, 0.646, 0.639, 0.631, 0.623, 0.615, 0.671, 0.591, 0.541, 0.521, 0.504, 0.478, 0.443, 0.37, 0.311, 0.264, 0.259, 0.251, 0.239, 0.207, 0.173, 0.139, 0.119, 0.106, 0.099, 0.079, 0.06, 0.041, 0.043, 0.041, 0.036, 0.069, 0.108, 0.155, 0.169, 0.186, 0.208, 0.228, 0.23, 0.215, 0.189, 0.174, 0.171, 0.142, 0.107, 0.066, 0.059, 0.077, 0.119, 0.156, 0.166, 0.149, 0.135, 0.133, 0.141, 0.146, 0.15, 0.152, 0.167, 0.15, 0.102, 0.059, -0.008, -0.1, -0.252, -0.479, -0.781, -1.127, -1.439, -1.719, -1.999], "12": [1.44, 1.3, 1.16, 1.02, 0.519, 0.018, -0.76, -0.879, -0.997, -1.115, -1.093, -1.07, -1.091, -1.057, -1.023, -0.989, -0.961, -0.933, -0.909, -0.891, -0.878, -0.838, -0.771, -0.696, -0.655, -0.648, -0.654, -0.661, -0.668, -0.608, -0.535, -0.451, -0.423, -0.407, -0.402, -0.399, -0.391, -0.376, -0.366, -0.379, -0.415, -0.457, -0.479, -0.481, -0.479, -0.49, -0.515, -0.541, -0.553, -0.552, -0.552, -0.548, -0.543, -0.512, -0.484, -0.458, -0.458, -0.457, -0.456, -0.466, -0.474, -0.482, -0.478, -0.466, -0.445, -0.443, -0.449, -0.464, -0.462, -0.456, -0.447, -0.456, -0.452, -0.433, -0.377, -0.257, -0.074, 0.393, 0.807, 1.169, 1.26, 1.35], "13": [2.435, 2.237, 2.04, 1.588, 1.135, 0.683, -0.672, -1.126, -1.579, -1.525, -1.471, -1.417, -1.409, -1.383, -1.357, -1.333, -1.308, -1.284, -1.156, -1.053, -1.0, -0.972, -0.97, -0.935, -0.884, -0.816, -0.774, -0.741, -0.717, -0.671, -0.633, -0.603, -0.574, -0.516, -0.429, -0.381, -0.348, -0.331, -0.32, -0.336, -0.38, -0.423, -0.463, -0.5, -0.533, -0.563, -0.591, -0.628, -0.641, -0.628, -0.595, -0.576, -0.572, -0.535, -0.509, -0.494, -0.519, -0.54, -0.558, -0.506, -0.461, -0.423, -0.444, -0.449, -0.437, -0.429, -0.435, -0.454, -0.488, -0.526, -0.569, -0.579, -0.547, -0.472, -0.351, -0.193, 0.0, 0.528, 1.079, 1.652, 1.913, 2.174], "14": [-1.316, -1.112, -0.905, -0.698, -0.491, -0.081, 0.33, 0.935, 0.947, 0.958, 0.97, 0.887, 0.803, 0.891, 0.836, 0.781, 0.726, 0.771, 0.791, 0.8, 0.798, 0.81, 0.786, 0.725, 0.624, 0.557, 0.523, 0.527, 0.528, 0.525, 0.487, 0.452, 0.42, 0.423, 0.433, 0.451, 0.427, 0.395, 0.353, 0.35, 0.367, 0.403, 0.415, 0.413, 0.396, 0.407, 0.418, 0.428, 0.439, 0.448, 0.455, 0.459, 0.454, 0.44, 0.423, 0.41, 0.402, 0.394, 0.391, 0.394, 0.403, 0.411, 0.417, 0.42, 0.427, 0.435, 0.451, 0.46, 0.465, 0.46, 0.452, 0.441, 0.417, 0.353, 0.248, 0.111, -0.079, -0.324, -0.596, -0.844, -1.066, -1.288], "15": [1.455, 1.257, 1.059, 0.8, 0.541, 0.282, -0.419, -0.598, -0.777, -0.764, -0.751, -0.738, -0.651, -0.667, -0.683, -0.683, -0.684, -0.684, -0.609, -0.563, -0.551, -0.542, -0.535, -0.521, -0.487, -0.432, -0.382, -0.347, -0.329, -0.319, -0.297, -0.263, -0.219, -0.187, -0.166, -0.175, -0.184, -0.195, -0.187, -0.192, -0.207, -0.228, -0.241, -0.245, -0.243, -0.248, -0.259, -0.269, -0.275, -0.278, -0.274, -0.266, -0.252, -0.244, -0.232, -0.217, -0.207, -0.211, -0.227, -0.224, -0.231, -0.247, -0.268, -0.264, -0.234, -0.233, -0.236, -0.241, -0.224, -0.21, -0.199, -0.204, -0.197, -0.175, -0.095, 0.015, 0.156, 0.468, 0.775, 1.077, 1.203, 1.329], "16": [1.173, 1.06, 0.948, 0.64, 0.333, 0.026, -0.939, -1.122, -1.305, -1.316, -1.327, -1.337, -1.373, -1.282, -1.192, -1.176, -1.159, -1.143, -1.159, -1.141, -1.098, -1.064, -1.038, -0.996, -0.956, -0.915, -0.901, -0.896, -0.899, -0.837, -0.778, -0.721, -0.725, -0.719, -0.705, -0.698, -0.688, -0.677, -0.661, -0.648, -0.639, -0.663, -0.673, -0.666, -0.643, -0.653, -0.695, -0.718, -0.723, -0.711, -0.708, -0.716, -0.733, -0.759, -0.771, -0.768, -0.747, -0.73, -0.718, -0.707, -0.693, -0.675, -0.671, -0.684, -0.716, -0.734, -0.753, -0.773, -0.788, -0.782, -0.755, -0.726, -0.692, -0.652, -0.581, -0.479, -0.348, 0.004, 0.361, 0.724, 0.874, 1.024], "18": [2.035, 1.913, 1.684, 1.454, 1.225, 0.291, -0.643, -1.537, -1.392, -1.246, -1.101, -1.125, -1.15, -1.07, -1.091, -1.111, -1.132, -1.085, -1.021, -0.967, -0.923, -0.905, -0.884, -0.859, -0.805, -0.745, -0.678, -0.63, -0.599, -0.587, -0.56, -0.52, -0.466, -0.431, -0.403, -0.38, -0.361, -0.358, -0.37, -0.4, -0.426, -0.449, -0.472, -0.496, -0.522, -0.546, -0.553, -0.543, -0.538, -0.525, -0.503, -0.45, -0.421, -0.414, -0.446, -0.471, -0.49, -0.484, -0.478, -0.472, -0.444, -0.438, -0.453, -0.51, -0.533, -0.521, -0.491, -0.486, -0.508, -0.539, -0.538, -0.504, -0.459, -0.411, -0.362, -0.289, -0.082, 0.258, 0.74, 1.23, 1.729, 2.227], "19": [1.732, 1.827, 1.54, 1.253, 0.745, 0.238, 1.285, -0.673, -0.838, -1.002, -0.967, -0.932, -1.059, -0.948, -0.852, -0.756, -0.745, -0.734, -0.781, -0.768, -0.694, -0.641, -0.583, -0.591, -0.58, -0.575, -0.506, -0.454, -0.394, -0.371, -0.342, -0.326, -0.279, -0.249, -0.218, -0.204, -0.188, -0.176, -0.149, -0.156, -0.188, -0.215, -0.239, -0.245, -0.264, -0.283, -0.317, -0.357, -0.378, -0.367, -0.333, -0.302, -0.286, -0.305, -0.293, -0.295, -0.292, -0.314, -0.315, -0.292, -0.267, -0.255, -0.26, -0.274, -0.281, -0.296, -0.296, -0.298, -0.286, -0.296, -0.31, -0.308, -0.285, -0.222, -0.141, 0.03, 0.273, 0.277, 0.68, 1.006, 1.566, 1.649], "20": [0.808, 0.674, 0.553, 0.433, 0.312, -0.049, -0.41, -0.92, -0.937, -0.954, -0.97, -0.943, -0.916, -0.854, -0.841, -0.828, -0.816, -0.79, -0.823, -0.838, -0.836, -0.759, -0.731, -0.752, -0.724, -0.665, -0.574, -0.55, -0.536, -0.534, -0.503, -0.484, -0.478, -0.524, -0.543, -0.534, -0.487, -0.453, -0.43, -0.43, -0.444, -0.473, -0.51, -0.533, -0.543, -0.544, -0.551, -0.561, -0.517, -0.485, -0.463, -0.512, -0.543, -0.556, -0.539, -0.526, -0.517, -0.524, -0.518, -0.5, -0.49, -0.497, -0.521, -0.54, -0.551, -0.555, -0.554, -0.543, -0.523, -0.489, -0.468, -0.458, -0.474, -0.465, -0.431, -0.358, -0.257, -0.128, 0.048, 0.243, 0.456, 0.67], "21": [1.754, 1.549, 1.344, 0.977, 0.611, 0.245, -0.763, -0.989, -1.215, -1.205, -1.194, -1.184, -1.149, -1.13, -1.11, -1.111, -1.112, -1.113, -1.017, -0.95, -0.912, -0.873, -0.834, -0.768, -0.7, -0.629, -0.601, -0.588, -0.592, -0.572, -0.542, -0.501, -0.475, -0.453, -0.434, -0.436, -0.433, -0.425, -0.404, -0.395, -0.399, -0.426, -0.463, -0.509, -0.542, -0.576, -0.609, -0.587, -0.564, -0.54, -0.549, -0.538, -0.505, -0.519, -0.524, -0.522, -0.482, -0.458, -0.449, -0.44, -0.434, -0.432, -0.443, -0.463, -0.493, -0.499, -0.5, -0.496, -0.505, -0.508, -0.506, -0.503, -0.472, -0.413, -0.29, -0.13, 0.067, 0.522, 0.955, 1.365, 1.495, 1.625], "22": [-1.828, -1.844, -1.593, -1.343, -1.092, -0.736, -0.38, 0.774, 0.809, 0.843, 0.878, 0.887, 0.896, 0.807, 0.785, 0.764, 0.742, 0.687, 0.616, 0.566, 0.537, 0.548, 0.536, 0.504, 0.44, 0.396, 0.372, 0.376, 0.359, 0.321, 0.246, 0.191, 0.155, 0.155, 0.153, 0.151, 0.152, 0.158, 0.168, 0.18, 0.171, 0.142, 0.137, 0.144, 0.165, 0.153, 0.164, 0.196, 0.242, 0.267, 0.271, 0.264, 0.251, 0.235, 0.224, 0.206, 0.181, 0.138, 0.108, 0.092, 0.13, 0.169, 0.212, 0.217, 0.201, 0.164, 0.147, 0.137, 0.135, 0.1, 0.093, 0.114, 0.145, 0.114, 0.023, -0.109, -0.243, -0.378, -0.598, -0.902, -1.291, -1.679], "23": [1.595, 1.452, 1.187, 0.921, 0.656, 0.305, -0.045, -1.341, -1.378, -1.415, -1.452, -1.47, -1.489, -1.339, -1.315, -1.291, -1.267, -1.243, -1.189, -1.137, -1.087, -1.068, -1.047, -1.023, -0.981, -0.929, -0.869, -0.814, -0.779, -0.764, -0.749, -0.711, -0.65, -0.585, -0.551, -0.548, -0.566, -0.561, -0.533, -0.49, -0.497, -0.554, -0.635, -0.668, -0.653, -0.617, -0.614, -0.645, -0.714, -0.753, -0.761, -0.735, -0.722, -0.722, -0.689, -0.663, -0.642, -0.672, -0.695, -0.71, -0.693, -0.669, -0.638, -0.624, -0.633, -0.665, -0.676, -0.681, -0.678, -0.712, -0.729, -0.73, -0.663, -0.569, -0.45, -0.357, -0.239, -0.095, 0.167, 0.518, 0.961, 1.403], "24": [1.398, 1.289, 1.18, 0.886, 0.592, 0.149, -0.294, -0.525, -0.757, -0.743, -0.729, -0.744, -0.76, -0.697, -0.634, -0.622, -0.61, -0.595, -0.562, -0.508, -0.475, -0.48, -0.506, -0.513, -0.483, -0.432, -0.395, -0.391, -0.396, -0.381, -0.348, -0.319, -0.289, -0.255, -0.223, -0.199, -0.198, -0.213, -0.241, -0.263, -0.276, -0.284, -0.286, -0.288, -0.264, -0.215, -0.19, -0.212, -0.261, -0.288, -0.293, -0.296, -0.302, -0.311, -0.321, -0.33, -0.315, -0.277, -0.251, -0.26, -0.275, -0.262, -0.24, -0.237, -0.263, -0.298, -0.32, -0.32, -0.304, -0.297, -0.294, -0.286, -0.275, -0.263, -0.195, -0.071, 0.166, 0.459, 0.735, 0.938, 1.07, 1.201], "25": [-1.17, -1.042, -0.906, -0.77, -0.635, -0.225, 0.186, 0.576, 0.562, 0.549, 0.536, 0.526, 0.515, 0.488, 0.461, 0.435, 0.408, 0.376, 0.351, 0.333, 0.32, 0.304, 0.312, 0.345, 0.327, 0.295, 0.247, 0.258, 0.256, 0.24, 0.192, 0.143, 0.093, 0.058, 0.043, 0.048, 0.067, 0.068, 0.051, 0.019, 0.023, 0.064, 0.116, 0.141, 0.14, 0.139, 0.149, 0.171, 0.2, 0.211, 0.203, 0.182, 0.17, 0.167, 0.175, 0.173, 0.16, 0.135, 0.131, 0.148, 0.158, 0.154, 0.134, 0.127, 0.115, 0.099, 0.081, 0.068, 0.061, 0.055, 0.074, 0.117, 0.137, 0.103, 0.014, -0.082, -0.232, -0.437, -0.652, -0.823, -0.95, -1.077], "26": [1.584, 1.468, 1.196, 0.924, 0.497, 0.069, -0.261, -0.591, -0.716, -0.842, -0.804, -0.767, -0.763, -0.759, -0.768, -0.776, -0.696, -0.616, -0.6, -0.563, -0.505, -0.461, -0.454, -0.463, -0.452, -0.427, -0.407, -0.38, -0.343, -0.309, -0.291, -0.276, -0.247, -0.221, -0.213, -0.201, -0.167, -0.15, -0.173, -0.235, -0.296, -0.32, -0.307, -0.278, -0.268, -0.276, -0.282, -0.279, -0.269, -0.282, -0.326, -0.369, -0.381, -0.344, -0.288, -0.241, -0.221, -0.219, -0.207, -0.211, -0.24, -0.27, -0.278, -0.271, -0.272, -0.274, -0.269, -0.267, -0.276, -0.278, -0.262, -0.228, -0.193, -0.146, -0.089, 0.061, 0.289, 0.589, 0.88, 1.114, 1.302, 1.443], "27": [-1.938, -1.782, -1.506, -1.229, -0.627, -0.024, 0.563, 1.15, 1.361, 1.572, 1.569, 1.566, 1.547, 1.529, 1.46, 1.392, 1.382, 1.372, 1.294, 1.215, 1.135, 1.073, 1.03, 1.001, 0.966, 0.924, 0.885, 0.845, 0.805, 0.768, 0.735, 0.715, 0.705, 0.689, 0.658, 0.619, 0.587, 0.563, 0.538, 0.543, 0.577, 0.63, 0.67, 0.679, 0.668, 0.663, 0.685, 0.717, 0.732, 0.733, 0.738, 0.739, 0.732, 0.722, 0.718, 0.698, 0.658, 0.624, 0.614, 0.632, 0.652, 0.661, 0.659, 0.67, 0.707, 0.734, 0.727, 0.701, 0.69, 0.691, 0.688, 0.68, 0.671, 0.622, 0.533, 0.313, 0.003, -0.432, -0.9, -1.294, -1.581, -1.76], "28": [1.686, 1.562, 1.312, 1.062, 0.812, 0.282, -0.249, -1.078, -1.1, -1.122, -1.143, -1.102, -1.06, -0.916, -0.923, -0.93, -0.938, -0.931, -0.894, -0.856, -0.817, -0.808, -0.802, -0.799, -0.713, -0.626, -0.537, -0.535, -0.524, -0.505, -0.476, -0.449, -0.424, -0.401, -0.389, -0.388, -0.354, -0.319, -0.282, -0.285, -0.314, -0.369, -0.424, -0.446, -0.436, -0.417, -0.422, -0.448, -0.483, -0.495, -0.484, -0.465, -0.437, -0.398, -0.391, -0.402, -0.431, -0.436, -0.427, -0.404, -0.415, -0.428, -0.443, -0.412, -0.396, -0.395, -0.421, -0.446, -0.468, -0.473, -0.491, -0.521, -0.483, -0.401, -0.274, -0.18, 0.017, 0.317, 0.685, 1.02, 1.32, 1.621], "29": [-1.887, -1.735, -1.583, -1.263, -0.944, -0.625, 0.446, 0.832, 1.219, 1.22, 1.221, 1.222, 1.162, 1.14, 1.118, 1.086, 1.054, 1.022, 0.943, 0.885, 0.868, 0.869, 0.889, 0.83, 0.74, 0.617, 0.563, 0.531, 0.521, 0.5, 0.476, 0.452, 0.446, 0.45, 0.463, 0.417, 0.357, 0.284, 0.265, 0.253, 0.249, 0.305, 0.377, 0.465, 0.487, 0.488, 0.469, 0.474, 0.469, 0.454, 0.417, 0.393, 0.38, 0.407, 0.426, 0.437, 0.411, 0.397, 0.393, 0.387, 0.37, 0.343, 0.325, 0.323, 0.337, 0.379, 0.413, 0.442, 0.426, 0.401, 0.367, 0.374, 0.374, 0.367, 0.275, 0.146, -0.02, -0.469, -0.92, -1.372, -1.544, -1.715], "30": [1.69, 1.528, 1.34, 1.151, 0.963, 0.022, -0.377, -0.775, -0.89, -1.005, -1.119, -0.955, -0.927, -0.9, -0.903, -0.906, -0.909, -0.744, -0.724, -0.708, -0.695, -0.685, -0.649, -0.618, -0.591, -0.584, -0.566, -0.536, -0.467, -0.41, -0.363, -0.359, -0.347, -0.327, -0.321, -0.308, -0.29, -0.268, -0.263, -0.275, -0.251, -0.267, -0.321, -0.396, -0.418, -0.386, -0.358, -0.357, -0.386, -0.412, -0.412, -0.385, -0.381, -0.385, -0.398, -0.392, -0.381, -0.364, -0.33, -0.299, -0.272, -0.277, -0.292, -0.317, -0.325, -0.345, -0.378, -0.407, -0.4, -0.358, -0.312, -0.275, -0.246, -0.222, -0.19, -0.152, 0.138, 0.473, 0.854, 1.03, 1.205, 1.381], "31": [2.485, 2.11, 1.734, 1.31, 0.887, 0.464, -0.891, -1.281, -1.672, -1.638, -1.605, -1.571, -1.306, -1.352, -1.397, -1.353, -1.31, -1.266, -1.218, -1.182, -1.14, -1.081, -1.005, -0.932, -0.884, -0.861, -0.839, -0.799, -0.74, -0.692, -0.638, -0.578, -0.526, -0.502, -0.507, -0.501, -0.502, -0.511, -0.521, -0.511, -0.482, -0.46, -0.462, -0.488, -0.516, -0.529, -0.529, -0.574, -0.602, -0.615, -0.585, -0.575, -0.585, -0.587, -0.592, -0.603, -0.612, -0.608, -0.591, -0.566, -0.542, -0.521, -0.516, -0.517, -0.524, -0.558, -0.593, -0.631, -0.634, -0.626, -0.608, -0.587, -0.531, -0.44, -0.268, -0.047, 0.224, 0.798, 1.348, 1.876, 2.079, 2.282], "32": [1.93, 1.557, 1.308, 1.058, 0.809, 0.234, -0.342, -0.962, -1.018, -1.075, -1.131, -1.027, -0.923, -0.991, -0.962, -0.932, -0.903, -0.908, -0.856, -0.806, -0.757, -0.766, -0.761, -0.741, -0.676, -0.615, -0.56, -0.541, -0.519, -0.495, -0.48, -0.45, -0.406, -0.336, -0.3, -0.297, -0.331, -0.35, -0.355, -0.344, -0.338, -0.339, -0.343, -0.376, -0.437, -0.529, -0.566, -0.546, -0.505, -0.479, -0.466, -0.433, -0.418, -0.423, -0.416, -0.403, -0.384, -0.39, -0.384, -0.368, -0.356, -0.351, -0.354, -0.348, -0.356, -0.377, -0.401, -0.409, -0.402, -0.391, -0.397, -0.419, -0.426, -0.362, -0.228, -0.054, 0.192, 0.51, 0.87, 1.2, 1.499, 1.798], "33": [-2.332, -2.006, -1.705, -1.404, -1.103, -0.269, 0.565, 1.246, 1.204, 1.162, 1.119, 1.031, 0.943, 0.991, 0.989, 0.988, 0.986, 0.99, 0.939, 0.879, 0.809, 0.783, 0.753, 0.72, 0.674, 0.634, 0.6, 0.581, 0.547, 0.499, 0.418, 0.358, 0.318, 0.318, 0.316, 0.314, 0.273, 0.248, 0.237, 0.277, 0.334, 0.407, 0.459, 0.475, 0.456, 0.437, 0.427, 0.427, 0.416, 0.396, 0.367, 0.348, 0.329, 0.31, 0.288, 0.274, 0.269, 0.274, 0.29, 0.316, 0.326, 0.33, 0.327, 0.343, 0.369, 0.405, 0.41, 0.4, 0.375, 0.377, 0.371, 0.357, 0.325, 0.259, 0.161, 0.041, -0.215, -0.608, -1.093, -1.532, -1.925, -2.317], "34": [-2.733, -2.457, -2.08, -1.703, -1.326, -0.602, 0.122, 1.243, 1.329, 1.414, 1.5, 1.41, 1.321, 1.222, 1.206, 1.19, 1.175, 1.159, 1.126, 1.083, 1.031, 0.987, 0.948, 0.912, 0.834, 0.758, 0.683, 0.656, 0.642, 0.642, 0.586, 0.525, 0.459, 0.458, 0.422, 0.354, 0.288, 0.266, 0.287, 0.315, 0.351, 0.395, 0.416, 0.429, 0.432, 0.457, 0.472, 0.476, 0.515, 0.542, 0.558, 0.516, 0.48, 0.452, 0.417, 0.39, 0.373, 0.378, 0.372, 0.354, 0.344, 0.347, 0.363, 0.371, 0.367, 0.351, 0.362, 0.381, 0.409, 0.407, 0.411, 0.423, 0.381, 0.273, 0.099, -0.08, -0.371, -0.774, -1.241, -1.662, -2.036, -2.41], "35": [1.38, 1.347, 1.105, 0.864, 0.464, 0.064, -0.314, -0.693, -0.847, -1.0, -0.97, -0.94, -0.86, -0.78, -0.784, -0.787, -0.787, -0.788, -0.754, -0.73, -0.714, -0.692, -0.654, -0.604, -0.554, -0.512, -0.474, -0.451, -0.439, -0.44, -0.442, -0.413, -0.347, -0.295, -0.292, -0.314, -0.314, -0.301, -0.298, -0.297, -0.288, -0.301, -0.344, -0.385, -0.395, -0.383, -0.381, -0.396, -0.416, -0.434, -0.442, -0.437, -0.429, -0.399, -0.349, -0.318, -0.324, -0.347, -0.352, -0.349, -0.36, -0.379, -0.395, -0.402, -0.403, -0.391, -0.373, -0.352, -0.335, -0.336, … [+17,241 chars]
app/physim/theory_final.py (28,407 chars)
import math
import numpy as np
WB = {"0":[2.21,1.42,0.63,0.31,-0.01,-0.33,-0.65,-0.73,-0.82,-0.88,-0.94,-1.0,-1.06,-0.84,-0.61,-0.69,-0.77,-0.85,-0.89,-0.9,-0.86,-0.81,-0.76,-0.71,-0.65,-0.59,-0.53,-0.5,-0.48,-0.46,-0.44,-0.43,-0.41,-0.39,-0.36,-0.33,-0.31,-0.29,-0.29,-0.29,-0.29,-0.3,-0.32,-0.37,-0.41,-0.43,-0.41,-0.39,-0.4,-0.44,-0.47,-0.46,-0.43,-0.39,-0.35,-0.3,-0.28,-0.28,-0.31,-0.34,-0.37,-0.38,-0.39,-0.4,-0.4,-0.41,-0.42,-0.42,-0.41,-0.41,-0.4,-0.4,-0.34,-0.23,-0.06,0.1,0.26,0.42,0.67,0.99,1.4,1.8],"1":[1.29,1.35,1.12,0.88,0.61,0.33,-0.03,-0.43,-0.56,-0.69,-0.67,-0.65,-0.61,-0.56,-0.54,-0.52,-0.51,-0.49,-0.47,-0.45,-0.46,-0.41,-0.36,-0.34,-0.31,-0.3,-0.29,-0.3,-0.31,-0.29,-0.26,-0.2,-0.13,-0.09,-0.1,-0.13,-0.12,-0.1,-0.07,-0.06,-0.06,-0.08,-0.12,-0.16,-0.2,-0.22,-0.2,-0.2,-0.2,-0.21,-0.2,-0.19,-0.17,-0.16,-0.16,-0.19,-0.23,-0.22,-0.16,-0.14,-0.12,-0.14,-0.13,-0.15,-0.16,-0.17,-0.17,-0.16,-0.14,-0.15,-0.2,-0.21,-0.22,-0.17,-0.13,0.01,0.21,0.6,0.87,1.07,1.11,1.2],"3":[1.33,1.2,1.09,0.88,0.68,0.47,-0.05,-0.57,-0.6,-0.6,-0.59,-0.58,-0.51,-0.43,-0.45,-0.46,-0.46,-0.46,-0.38,-0.36,-0.36,-0.37,-0.33,-0.3,-0.28,-0.25,-0.22,-0.19,-0.19,-0.17,-0.15,-0.11,-0.08,-0.06,-0.04,-0.03,-0.04,-0.05,-0.05,-0.03,-0.02,-0.02,-0.05,-0.09,-0.1,-0.09,-0.04,-0.03,-0.06,-0.11,-0.13,-0.14,-0.14,-0.11,-0.06,-0.03,-0.04,-0.07,-0.07,-0.07,-0.08,-0.09,-0.1,-0.11,-0.14,-0.15,-0.15,-0.12,-0.09,-0.08,-0.09,-0.11,-0.12,0.04,0.2,0.37,0.4,0.5,0.69,0.91,1.09,1.21],"4":[1.44,1.33,1.11,-0.15,0.01,0.16,-0.51,-0.84,-0.87,-0.86,-0.84,-0.83,-0.77,-0.76,-0.78,-0.75,-0.71,-0.67,-0.65,-0.65,-0.64,-0.6,-0.57,-0.57,-0.51,-0.47,-0.41,-0.42,-0.41,-0.38,-0.32,-0.27,-0.26,-0.27,-0.28,-0.25,-0.24,-0.2,-0.2,-0.19,-0.22,-0.26,-0.27,-0.3,-0.31,-0.35,-0.38,-0.36,-0.36,-0.32,-0.32,-0.29,-0.28,-0.3,-0.28,-0.27,-0.25,-0.26,-0.26,-0.26,-0.26,-0.25,-0.26,-0.28,-0.32,-0.31,-0.29,-0.28,-0.31,-0.34,-0.36,-0.33,-0.33,-0.25,-0.17,-0.02,0.1,0.41,0.29,0.31,0.3,0.87],"6":[1.92,1.74,1.41,1.09,0.51,-0.07,-0.65,-1.23,-1.19,-1.16,-1.1,-1.04,-0.97,-0.91,-0.94,-0.97,-1.0,-1.03,-0.97,-0.92,-0.89,-0.86,-0.81,-0.75,-0.68,-0.64,-0.64,-0.64,-0.62,-0.58,-0.55,-0.51,-0.46,-0.4,-0.36,-0.34,-0.33,-0.34,-0.33,-0.34,-0.37,-0.41,-0.44,-0.46,-0.49,-0.51,-0.52,-0.52,-0.52,-0.49,-0.46,-0.43,-0.42,-0.44,-0.47,-0.48,-0.45,-0.4,-0.37,-0.36,-0.36,-0.38,-0.42,-0.45,-0.46,-0.46,-0.48,-0.49,-0.49,-0.48,-0.48,-0.49,-0.49,-0.45,-0.38,-0.18,0.12,0.55,0.99,1.34,1.6,1.76],"7":[-1.64,-1.58,-1.5,-1.25,-1.01,-0.76,0.18,0.73,0.68,0.7,0.71,0.73,0.66,0.64,0.63,0.59,0.56,0.52,0.48,0.43,0.38,0.39,0.4,0.36,0.3,0.25,0.24,0.24,0.22,0.18,0.11,0.05,0.01,0.01,0.02,0.03,0.04,0.04,0.05,0.07,0.1,0.1,0.1,0.12,0.15,0.15,0.11,0.08,0.09,0.1,0.13,0.13,0.13,0.11,0.07,0.07,0.09,0.1,0.05,0.03,0.03,0.03,0.03,0.04,0.08,0.08,0.08,0.07,0.08,0.07,0.06,0.09,0.1,0.07,-0.04,-0.15,-0.27,-0.59,-0.9,-1.22,-1.36,-1.5],"8":[1.39,1.24,1.06,0.88,0.56,0.24,-0.08,-0.98,-1.13,-1.28,-1.23,-1.17,-1.12,-1.09,-1.08,-1.07,-1.05,-1.03,-1.01,-0.99,-0.97,-0.94,-0.91,-0.86,-0.79,-0.74,-0.71,-0.7,-0.68,-0.65,-0.62,-0.58,-0.53,-0.5,-0.49,-0.49,-0.48,-0.47,-0.47,-0.47,-0.46,-0.43,-0.43,-0.44,-0.46,-0.48,-0.5,-0.54,-0.59,-0.62,-0.61,-0.57,-0.54,-0.52,-0.51,-0.53,-0.59,-0.62,-0.61,-0.56,-0.52,-0.5,-0.49,-0.48,-0.47,-0.47,-0.48,-0.48,-0.48,-0.49,-0.52,-0.58,-0.54,-0.43,-0.24,-0.06,0.13,0.33,0.68,0.99,1.25,1.32],"10":[2.32,1.96,1.6,1.11,0.62,0.13,-1.18,-1.53,-1.89,-1.84,-1.79,-1.74,-1.65,-1.54,-1.43,-1.44,-1.46,-1.47,-1.42,-1.38,-1.35,-1.32,-1.3,-1.21,-1.13,-1.04,-1.01,-0.98,-0.97,-0.92,-0.87,-0.81,-0.78,-0.75,-0.73,-0.71,-0.69,-0.68,-0.68,-0.69,-0.7,-0.73,-0.76,-0.79,-0.81,-0.82,-0.83,-0.81,-0.8,-0.81,-0.84,-0.85,-0.84,-0.84,-0.82,-0.78,-0.73,-0.72,-0.75,-0.73,-0.71,-0.7,-0.74,-0.75,-0.74,-0.75,-0.77,-0.8,-0.83,-0.86,-0.87,-0.85,-0.78,-0.65,-0.47,-0.23,0.05,0.63,1.17,1.7,1.9,2.11],"11":[-2.07,-1.77,-1.51,-1.26,-1.0,-0.91,0.25,0.92,0.86,0.8,0.74,0.71,0.65,0.64,0.63,0.62,0.61,0.67,0.59,0.54,0.52,0.5,0.48,0.44,0.37,0.31,0.26,0.26,0.25,0.24,0.21,0.17,0.14,0.12,0.11,0.1,0.08,0.06,0.04,0.04,0.04,0.04,0.07,0.11,0.16,0.17,0.19,0.21,0.23,0.23,0.21,0.19,0.17,0.17,0.14,0.11,0.07,0.06,0.08,0.12,0.16,0.17,0.15,0.14,0.13,0.14,0.15,0.15,0.15,0.17,0.15,0.1,0.06,-0.01,-0.1,-0.25,-0.48,-0.78,-1.13,-1.44,-1.72,-2.0],"12":[1.44,1.3,1.16,1.02,0.52,0.02,-0.76,-0.88,-1.0,-1.11,-1.09,-1.07,-1.09,-1.06,-1.02,-0.99,-0.96,-0.93,-0.91,-0.89,-0.88,-0.84,-0.77,-0.7,-0.66,-0.65,-0.65,-0.66,-0.67,-0.61,-0.54,-0.45,-0.42,-0.41,-0.4,-0.4,-0.39,-0.38,-0.37,-0.38,-0.41,-0.46,-0.48,-0.48,-0.48,-0.49,-0.52,-0.54,-0.55,-0.55,-0.55,-0.55,-0.54,-0.51,-0.48,-0.46,-0.46,-0.46,-0.46,-0.47,-0.47,-0.48,-0.48,-0.47,-0.45,-0.44,-0.45,-0.46,-0.46,-0.46,-0.45,-0.46,-0.45,-0.43,-0.38,-0.26,-0.07,0.39,0.81,1.17,1.26,1.35],"13":[2.44,2.24,2.04,1.59,1.14,0.68,-0.67,-1.13,-1.58,-1.52,-1.47,-1.42,-1.41,-1.38,-1.36,-1.33,-1.31,-1.28,-1.16,-1.05,-1.0,-0.97,-0.97,-0.93,-0.88,-0.82,-0.77,-0.74,-0.72,-0.67,-0.63,-0.6,-0.57,-0.52,-0.43,-0.38,-0.35,-0.33,-0.32,-0.34,-0.38,-0.42,-0.46,-0.5,-0.53,-0.56,-0.59,-0.63,-0.64,-0.63,-0.6,-0.58,-0.57,-0.53,-0.51,-0.49,-0.52,-0.54,-0.56,-0.51,-0.46,-0.42,-0.44,-0.45,-0.44,-0.43,-0.43,-0.45,-0.49,-0.53,-0.57,-0.58,-0.55,-0.47,-0.35,-0.19,0.0,0.53,1.08,1.65,1.91,2.17],"14":[-1.32,-1.11,-0.91,-0.7,-0.49,-0.08,0.33,0.94,0.95,0.96,0.97,0.89,0.8,0.89,0.84,0.78,0.73,0.77,0.79,0.8,0.8,0.81,0.79,0.73,0.62,0.56,0.52,0.53,0.53,0.53,0.49,0.45,0.42,0.42,0.43,0.45,0.43,0.39,0.35,0.35,0.37,0.4,0.41,0.41,0.4,0.41,0.42,0.43,0.44,0.45,0.46,0.46,0.45,0.44,0.42,0.41,0.4,0.39,0.39,0.39,0.4,0.41,0.42,0.42,0.43,0.44,0.45,0.46,0.46,0.46,0.45,0.44,0.42,0.35,0.25,0.11,-0.08,-0.32,-0.6,-0.84,-1.07,-1.29],"15":[1.46,1.26,1.06,0.8,0.54,0.28,-0.42,-0.6,-0.78,-0.76,-0.75,-0.74,-0.65,-0.67,-0.68,-0.68,-0.68,-0.68,-0.61,-0.56,-0.55,-0.54,-0.54,-0.52,-0.49,-0.43,-0.38,-0.35,-0.33,-0.32,-0.3,-0.26,-0.22,-0.19,-0.17,-0.17,-0.18,-0.19,-0.19,-0.19,-0.21,-0.23,-0.24,-0.25,-0.24,-0.25,-0.26,-0.27,-0.27,-0.28,-0.27,-0.27,-0.25,-0.24,-0.23,-0.22,-0.21,-0.21,-0.23,-0.22,-0.23,-0.25,-0.27,-0.26,-0.23,-0.23,-0.24,-0.24,-0.22,-0.21,-0.2,-0.2,-0.2,-0.18,-0.1,0.02,0.16,0.47,0.77,1.08,1.2,1.33],"16":[1.17,1.06,0.95,0.64,0.33,0.03,-0.94,-1.12,-1.3,-1.32,-1.33,-1.34,-1.37,-1.28,-1.19,-1.18,-1.16,-1.14,-1.16,-1.14,-1.1,-1.06,-1.04,-1.0,-0.96,-0.92,-0.9,-0.9,-0.9,-0.84,-0.78,-0.72,-0.72,-0.72,-0.71,-0.7,-0.69,-0.68,-0.66,-0.65,-0.64,-0.66,-0.67,-0.67,-0.64,-0.65,-0.69,-0.72,-0.72,-0.71,-0.71,-0.72,-0.73,-0.76,-0.77,-0.77,-0.75,-0.73,-0.72,-0.71,-0.69,-0.68,-0.67,-0.68,-0.72,-0.73,-0.75,-0.77,-0.79,-0.78,-0.76,-0.73,-0.69,-0.65,-0.58,-0.48,-0.35,0.0,0.36,0.72,0.87,1.02],"18":[2.03,1.91,1.68,1.45,1.23,0.29,-0.64,-1.54,-1.39,-1.25,-1.1,-1.13,-1.15,-1.07,-1.09,-1.11,-1.13,-1.09,-1.02,-0.97,-0.92,-0.91,-0.88,-0.86,-0.81,-0.75,-0.68,-0.63,-0.6,-0.59,-0.56,-0.52,-0.47,-0.43,-0.4,-0.38,-0.36,-0.36,-0.37,-0.4,-0.43,-0.45,-0.47,-0.5,-0.52,-0.55,-0.55,-0.54,-0.54,-0.52,-0.5,-0.45,-0.42,-0.41,-0.45,-0.47,-0.49,-0.48,-0.48,-0.47,-0.44,-0.44,-0.45,-0.51,-0.53,-0.52,-0.49,-0.49,-0.51,-0.54,-0.54,-0.5,-0.46,-0.41,-0.36,-0.29,-0.08,0.26,0.74,1.23,1.73,2.23],"19":[1.73,1.83,1.54,1.25,0.75,0.24,1.28,-0.67,-0.84,-1.0,-0.97,-0.93,-1.06,-0.95,-0.85,-0.76,-0.74,-0.73,-0.78,-0.77,-0.69,-0.64,-0.58,-0.59,-0.58,-0.58,-0.51,-0.45,-0.39,-0.37,-0.34,-0.33,-0.28,-0.25,-0.22,-0.2,-0.19,-0.18,-0.15,-0.16,-0.19,-0.21,-0.24,-0.25,-0.26,-0.28,-0.32,-0.36,-0.38,-0.37,-0.33,-0.3,-0.29,-0.3,-0.29,-0.3,-0.29,-0.31,-0.32,-0.29,-0.27,-0.25,-0.26,-0.27,-0.28,-0.3,-0.3,-0.3,-0.29,-0.3,-0.31,-0.31,-0.28,-0.22,-0.14,0.03,0.27,0.28,0.68,1.01,1.57,1.65],"20":[0.81,0.67,0.55,0.43,0.31,-0.05,-0.41,-0.92,-0.94,-0.95,-0.97,-0.94,-0.92,-0.85,-0.84,-0.83,-0.82,-0.79,-0.82,-0.84,-0.84,-0.76,-0.73,-0.75,-0.72,-0.66,-0.57,-0.55,-0.54,-0.53,-0.5,-0.48,-0.48,-0.52,-0.54,-0.53,-0.49,-0.45,-0.43,-0.43,-0.44,-0.47,-0.51,-0.53,-0.54,-0.54,-0.55,-0.56,-0.52,-0.48,-0.46,-0.51,-0.54,-0.56,-0.54,-0.53,-0.52,-0.52,-0.52,-0.5,-0.49,-0.5,-0.52,-0.54,-0.55,-0.56,-0.55,-0.54,-0.52,-0.49,-0.47,-0.46,-0.47,-0.47,-0.43,-0.36,-0.26,-0.13,0.05,0.24,0.46,0.67],"21":[1.75,1.55,1.34,0.98,0.61,0.24,-0.76,-0.99,-1.21,-1.2,-1.19,-1.18,-1.15,-1.13,-1.11,-1.11,-1.11,-1.11,-1.02,-0.95,-0.91,-0.87,-0.83,-0.77,-0.7,-0.63,-0.6,-0.59,-0.59,-0.57,-0.54,-0.5,-0.47,-0.45,-0.43,-0.44,-0.43,-0.43,-0.4,-0.4,-0.4,-0.43,-0.46,-0.51,-0.54,-0.58,-0.61,-0.59,-0.56,-0.54,-0.55,-0.54,-0.51,-0.52,-0.52,-0.52,-0.48,-0.46,-0.45,-0.44,-0.43,-0.43,-0.44,-0.46,-0.49,-0.5,-0.5,-0.5,-0.5,-0.51,-0.51,-0.5,-0.47,-0.41,-0.29,-0.13,0.07,0.52,0.95,1.36,1.49,1.62],"22":[-1.83,-1.84,-1.59,-1.34,-1.09,-0.74,-0.38,0.77,0.81,0.84,0.88,0.89,0.9,0.81,0.79,0.76,0.74,0.69,0.62,0.57,0.54,0.55,0.54,0.5,0.44,0.4,0.37,0.38,0.36,0.32,0.25,0.19,0.16,0.15,0.15,0.15,0.15,0.16,0.17,0.18,0.17,0.14,0.14,0.14,0.16,0.15,0.16,0.2,0.24,0.27,0.27,0.26,0.25,0.23,0.22,0.21,0.18,0.14,0.11,0.09,0.13,0.17,0.21,0.22,0.2,0.16,0.15,0.14,0.14,0.1,0.09,0.11,0.14,0.11,0.02,-0.11,-0.24,-0.38,-0.6,-0.9,-1.29,-1.68],"23":[1.6,1.45,1.19,0.92,0.66,0.31,-0.04,-1.34,-1.38,-1.42,-1.45,-1.47,-1.49,-1.34,-1.31,-1.29,-1.27,-1.24,-1.19,-1.14,-1.09,-1.07,-1.05,-1.02,-0.98,-0.93,-0.87,-0.81,-0.78,-0.76,-0.75,-0.71,-0.65,-0.59,-0.55,-0.55,-0.57,-0.56,-0.53,-0.49,-0.5,-0.55,-0.63,-0.67,-0.65,-0.62,-0.61,-0.65,-0.71,-0.75,-0.76,-0.73,-0.72,-0.72,-0.69,-0.66,-0.64,-0.67,-0.7,-0.71,-0.69,-0.67,-0.64,-0.62,-0.63,-0.66,-0.68,-0.68,-0.68,-0.71,-0.73,-0.73,-0.66,-0.57,-0.45,-0.36,-0.24,-0.09,0.17,0.52,0.96,1.4],"24":[1.4,1.29,1.18,0.89,0.59,0.15,-0.29,-0.53,-0.76,-0.74,-0.73,-0.74,-0.76,-0.7,-0.63,-0.62,-0.61,-0.6,-0.56,-0.51,-0.47,-0.48,-0.51,-0.51,-0.48,-0.43,-0.4,-0.39,-0.4,-0.38,-0.35,-0.32,-0.29,-0.25,-0.22,-0.2,-0.2,-0.21,-0.24,-0.26,-0.28,-0.28,-0.29,-0.29,-0.26,-0.22,-0.19,-0.21,-0.26,-0.29,-0.29,-0.3,-0.3,-0.31,-0.32,-0.33,-0.31,-0.28,-0.25,-0.26,-0.27,-0.26,-0.24,-0.24,-0.26,-0.3,-0.32,-0.32,-0.3,-0.3,-0.29,-0.29,-0.27,-0.26,-0.2,-0.07,0.17,0.46,0.73,0.94,1.07,1.2],"25":[-1.17,-1.04,-0.91,-0.77,-0.64,-0.22,0.19,0.58,0.56,0.55,0.54,0.53,0.52,0.49,0.46,0.43,0.41,0.38,0.35,0.33,0.32,0.3,0.31,0.35,0.33,0.29,0.25,0.26,0.26,0.24,0.19,0.14,0.09,0.06,0.04,0.05,0.07,0.07,0.05,0.02,0.02,0.06,0.12,0.14,0.14,0.14,0.15,0.17,0.2,0.21,0.2,0.18,0.17,0.17,0.18,0.17,0.16,0.14,0.13,0.15,0.16,0.15,0.13,0.13,0.12,0.1,0.08,0.07,0.06,0.06,0.07,0.12,0.14,0.1,0.01,-0.08,-0.23,-0.44,-0.65,-0.82,-0.95,-1.08],"26":[1.58,1.47,1.2,0.92,0.5,0.07,-0.26,-0.59,-0.72,-0.84,-0.8,-0.77,-0.76,-0.76,-0.77,-0.78,-0.7,-0.62,-0.6,-0.56,-0.5,-0.46,-0.45,-0.46,-0.45,-0.43,-0.41,-0.38,-0.34,-0.31,-0.29,-0.28,-0.25,-0.22,-0.21,-0.2,-0.17,-0.15,-0.17,-0.23,-0.3,-0.32,-0.31,-0.28,-0.27,-0.28,-0.28,-0.28,-0.27,-0.28,-0.33,-0.37,-0.38,-0.34,-0.29,-0.24,-0.22,-0.22,-0.21,-0.21,-0.24,-0.27,-0.28,-0.27,-0.27,-0.27,-0.27,-0.27,-0.28,-0.28,-0.26,-0.23,-0.19,-0.15,-0.09,0.06,0.29,0.59,0.88,1.11,1.3,1.44],"27":[-1.94,-1.78,-1.51,-1.23,-0.63,-0.02,0.56,1.15,1.36,1.57,1.57,1.57,1.55,1.53,1.46,1.39,1.38,1.37,1.29,1.21,1.13,1.07,1.03,1.0,0.97,0.92,0.88,0.85,0.81,0.77,0.73,0.71,0.7,0.69,0.66,0.62,0.59,0.56,0.54,0.54,0.58,0.63,0.67,0.68,0.67,0.66,0.69,0.72,0.73,0.73,0.74,0.74,0.73,0.72,0.72,0.7,0.66,0.62,0.61,0.63,0.65,0.66,0.66,0.67,0.71,0.73,0.73,0.7,0.69,0.69,0.69,0.68,0.67,0.62,0.53,0.31,0.0,-0.43,-0.9,-1.29,-1.58,-1.76],"28":[1.69,1.56,1.31,1.06,0.81,0.28,-0.25,-1.08,-1.1,-1.12,-1.14,-1.1,-1.06,-0.92,-0.92,-0.93,-0.94,-0.93,-0.89,-0.86,-0.82,-0.81,-0.8,-0.8,-0.71,-0.63,-0.54,-0.53,-0.52,-0.5,-0.48,-0.45,-0.42,-0.4,-0.39,-0.39,-0.35,-0.32,-0.28,-0.29,-0.31,-0.37,-0.42,-0.45,-0.44,-0.42,-0.42,-0.45,-0.48,-0.49,-0.48,-0.47,-0.44,-0.4,-0.39,-0.4,-0.43,-0.44,-0.43,-0.4,-0.42,-0.43,-0.44,-0.41,-0.4,-0.39,-0.42,-0.45,-0.47,-0.47,-0.49,-0.52,-0.48,-0.4,-0.27,-0.18,0.02,0.32,0.68,1.02,1.32,1.62],"29":[-1.89,-1.73,-1.58,-1.26,-0.94,-0.62,0.45,0.83,1.22,1.22,1.22,1.22,1.16,1.14,1.12,1.09,1.05,1.02,0.94,0.89,0.87,0.87,0.89,0.83,0.74,0.62,0.56,0.53,0.52,0.5,0.48,0.45,0.45,0.45,0.46,0.42,0.36,0.28,0.27,0.25,0.25,0.31,0.38,0.47,0.49,0.49,0.47,0.47,0.47,0.45,0.42,0.39,0.38,0.41,0.43,0.44,0.41,0.4,0.39,0.39,0.37,0.34,0.33,0.32,0.34,0.38,0.41,0.44,0.43,0.4,0.37,0.37,0.37,0.37,0.28,0.15,-0.02,-0.47,-0.92,-1.37,-1.54,-1.72],"30":[1.69,1.53,1.34,1.15,0.96,0.02,-0.38,-0.78,-0.89,-1.0,-1.12,-0.95,-0.93,-0.9,-0.9,-0.91,-0.91,-0.74,-0.72,-0.71,-0.69,-0.69,-0.65,-0.62,-0.59,-0.58,-0.57,-0.54,-0.47,-0.41,-0.36,-0.36,-0.35,-0.33,-0.32,-0.31,-0.29,-0.27,-0.26,-0.27,-0.25,-0.27,-0.32,-0.4,-0.42,-0.39,-0.36,-0.36,-0.39,-0.41,-0.41,-0.39,-0.38,-0.38,-0.4,-0.39,-0.38,-0.36,-0.33,-0.3,-0.27,-0.28,-0.29,-0.32,-0.32,-0.35,-0.38,-0.41,-0.4,-0.36,-0.31,-0.28,-0.25,-0.22,-0.19,-0.15,0.14,0.47,0.85,1.03,1.21,1.38],"31":[2.49,2.11,1.73,1.31,0.89,0.46,-0.89,-1.28,-1.67,-1.64,-1.6,-1.57,-1.31,-1.35,-1.4,-1.35,-1.31,-1.27,-1.22,-1.18,-1.14,-1.08,-1.0,-0.93,-0.88,-0.86,-0.84,-0.8,-0.74,-0.69,-0.64,-0.58,-0.53,-0.5,-0.51,-0.5,-0.5,-0.51,-0.52,-0.51,-0.48,-0.46,-0.46,-0.49,-0.52,-0.53,-0.53,-0.57,-0.6,-0.61,-0.58,-0.58,-0.59,-0.59,-0.59,-0.6,-0.61,-0.61,-0.59,-0.57,-0.54,-0.52,-0.52,-0.52,-0.52,-0.56,-0.59,-0.63,-0.63,-0.63,-0.61,-0.59,-0.53,-0.44,-0.27,-0.05,0.22,0.8,1.35,1.88,2.08,2.28],"32":[1.93,1.56,1.31,1.06,0.81,0.23,-0.34,-0.96,-1.02,-1.07,-1.13,-1.03,-0.92,-0.99,-0.96,-0.93,-0.9,-0.91,-0.86,-0.81,-0.76,-0.77,-0.76,-0.74,-0.68,-0.62,-0.56,-0.54,-0.52,-0.5,-0.48,-0.45,-0.41,-0.34,-0.3,-0.3,-0.33,-0.35,-0.36,-0.34,-0.34,-0.34,-0.34,-0.38,-0.44,-0.53,-0.57,-0.55,-0.51,-0.48,-0.47,-0.43,-0.42,-0.42,-0.42,-0.4,-0.38,-0.39,-0.38,-0.37,-0.36,-0.35,-0.35,-0.35,-0.36,-0.38,-0.4,-0.41,-0.4,-0.39,-0.4,-0.42,-0.43,-0.36,-0.23,-0.05,0.19,0.51,0.87,1.2,1.5,1.8],"33":[-2.33,-2.01,-1.7,-1.4,-1.1,-0.27,0.56,1.25,1.2,1.16,1.12,1.03,0.94,0.99,0.99,0.99,0.99,0.99,0.94,0.88,0.81,0.78,0.75,0.72,0.67,0.63,0.6,0.58,0.55,0.5,0.42,0.36,0.32,0.32,0.32,0.31,0.27,0.25,0.24,0.28,0.33,0.41,0.46,0.48,0.46,0.44,0.43,0.43,0.42,0.4,0.37,0.35,0.33,0.31,0.29,0.27,0.27,0.27,0.29,0.32,0.33,0.33,0.33,0.34,0.37,0.41,0.41,0.4,0.38,0.38,0.37,0.36,0.32,0.26,0.16,0.04,-0.22,-0.61,-1.09,-1.53,-1.92,-2.32],"34":[-2.73,-2.46,-2.08,-1.7,-1.33,-0.6,0.12,1.24,1.33,1.41,1.5,1.41,1.32,1.22,1.21,1.19,1.17,1.16,1.13,1.08,1.03,0.99,0.95,0.91,0.83,0.76,0.68,0.66,0.64,0.64,0.59,0.53,0.46,0.46,0.42,0.35,0.29,0.27,0.29,0.31,0.35,0.4,0.42,0.43,0.43,0.46,0.47,0.48,0.52,0.54,0.56,0.52,0.48,0.45,0.42,0.39,0.37,0.38,0.37,0.35,0.34,0.35,0.36,0.37,0.37,0.35,0.36,0.38,0.41,0.41,0.41,0.42,0.38,0.27,0.1,-0.08,-0.37,-0.77,-1.24,-1.66,-2.04,-2.41],"35":[1.38,1.35,1.11,0.86,0.46,0.06,-0.31,-0.69,-0.85,-1.0,-0.97,-0.94,-0.86,-0.78,-0.78,-0.79,-0.79,-0.79,-0.75,-0.73,-0.71,-0.69,-0.65,-0.6,-0.55,-0.51,-0.47,-0.45,-0.44,-0.44,-0.44,-0.41,-0.35,-0.3,-0.29,-0.31,-0.31,-0.3,-0.3,-0.3,-0.29,-0.3,-0.34,-0.38,-0.39,-0.38,-0.38,-0.4,-0.42,-0.43,-0.44,-0.44,-0.43,-0.4,-0.35,-0.32,-0.32,-0.35,-0.35,-0.35,-0.36,-0.38,-0.4,-0.4,-0.4,-0.39,-0.37,-0.35,-0.33,-0.34,-0.35,-0.37,-0.37,-0.31,-0.21,-0.04,0.16,0.44,0.76,1.04,1.22,1.3],"36":[-1.89,-1.65,-1.45,-1.25,-1.05,-0.56,-0.07,0.72,0.76,0.79,0.83,0.8,0.77,0.76,0.71,0.67,0.62,0.61,0.59,0.55,0.52,0.51,0.48,0.42,0.4,0.39,0.4,0.38,0.35,0.31,0.26,0.22,0.19,0.18,0.17,0.17,0.14,0.12,0.1,0.12,0.13,0.12,0.17,0.21,0.25,0.23,0.24,0.27,0.26,0.24,0.21,0.24,0.24,0.23,0.21,0.2,0.2,0.2,0.2,0.21,0.2,0.19,0.17,0.18,0.17,0.14,0.15,0.16,0.17,0.13,0.11,0.13,0.12,0.07,-0.03,-0.12,-0.29,-0.54,-0.84,-1.1,-1.31,-1.53],"37":[-1.8,-1.57,-1.31,-1.05,-0.79,-0.35,0.09,0.79,0.81,0.82,0.83,0.81,0.79,0.8,0.74,0.67,0.61,0.58,0.55,0.54,0.53,0.52,0.49,0.44,0.37,0.31,0.27,0.24,0.22,0.21,0.2,0.19,0.18,0.17,0.16,0.16,0.13,0.1,0.08,0.09,0.11,0.14,0.18,0.21,0.21,0.18,0.18,0.19,0.21,0.22,0.22,0.23,0.23,0.2,0.17,0.17,0.19,0.22,0.21,0.18,0.13,0.1,0.1,0.11,0.13,0.17,0.16,0.14,0.12,0.16,0.18,0.18,0.15,0.07,-0.05,-0.19,-0.41,-0.71,-1.02,-1.26,-1.44,-1.61],"38":[-0.73,-0.63,-0.52,-0.34,-0.15,0.04,0.7,0.82,0.94,0.92,0.9,0.88,0.92,0.92,0.92,0.87,0.83,0.78,0.8,0.82,0.8,0.77,0.72,0.67,0.65,0.64,0.63,0.61,0.58,0.55,0.53,0.52,0.51,0.49,0.48,0.46,0.45,0.45,0.45,0.44,0.42,0.43,0.46,0.49,0.5,0.49,0.47,0.48,0.5,0.53,0.55,0.55,0.54,0.57,0.58,0.57,0.52,0.51,0.52,0.52,0.52,0.52,0.53,0.55,0.57,0.58,0.56,0.53,0.52,0.53,0.54,0.57,0.57,0.55,0.46,0.35,0.23,-0.04,-0.29,-0.53,-0.59,-0.66],"39":[1.25,1.01,0.86,0.7,0.55,0.15,-0.24,-0.81,-0.84,-0.86,-0.89,-0.84,-0.78,-0.74,-0.72,-0.7,-0.68,-0.67,-0.63,-0.57,-0.51,-0.47,-0.46,-0.48,-0.45,-0.41,-0.36,-0.37,-0.38,-0.39,-0.34,-0.3,-0.25,-0.25,-0.26,-0.26,-0.24,-0.22,-0.22,-0.24,-0.26,-0.3,-0.3,-0.3,-0.3,-0.34,-0.37,-0.37,-0.36,-0.36,-0.35,-0.33,-0.32,-0.31,-0.32,-0.34,-0.34,-0.32,-0.31,-0.31,-0.32,-0.32,-0.33,-0.35,-0.37,-0.37,-0.34,-0.31,-0.3,-0.32,-0.34,-0.36,-0.34,-0.27,-0.16,-0.04,0.13,0.34,0.56,0.74,0.87,1.01]}
WD = {"0":[2.15,2.06,1.82,1.58,1.35,0.64,-0.37,-0.94,-1.19,-1.25,-1.3,-1.24,-1.14,-1.05,-1.1,-1.02,-0.95,-0.94,-0.93,-0.89,-0.85,-0.83,-0.8,-0.74,-0.67,-0.59,-0.56,-0.56,-0.57,-0.55,-0.49,-0.41,-0.34,-0.26,-0.15,0.17,0.68,1.2,1.6,1.87],"1":[1.22,1.28,1.14,1.0,0.63,0.32,-0.16,-0.43,-0.58,-0.74,-0.7,-0.64,-0.64,-0.65,-0.6,-0.54,-0.63,-0.47,-0.49,-0.47,-0.41,-0.43,-0.42,-0.41,-0.34,-0.31,-0.26,-0.25,-0.24,-0.24,-0.21,-0.18,-0.14,-0.06,0.09,0.29,0.6,0.88,1.13,1.31],"3":[1.36,1.29,1.15,1.01,0.67,0.34,-0.26,-0.49,-0.56,-0.63,-0.6,-0.56,-0.59,-0.5,-0.47,-0.44,-0.45,-0.45,-0.46,-0.42,-0.36,-0.32,-0.3,-0.29,-0.27,-0.25,-0.24,-0.23,-0.21,-0.2,-0.17,-0.13,-0.06,0.05,0.21,0.47,0.79,1.06,1.23,1.29],"4":[1.46,1.33,1.2,1.02,0.71,0.21,-0.38,-0.79,-0.84,-0.87,-0.82,-0.76,-0.83,-0.84,-0.82,-0.7,-0.7,-0.7,-0.67,-0.65,-0.61,-0.56,-0.51,-0.47,-0.46,-0.45,-0.44,-0.45,-0.44,-0.38,-0.32,-0.25,-0.23,-0.19,-0.05,0.29,0.7,1.0,1.11,1.38],"6":[1.81,1.6,1.57,1.31,1.04,0.77,-0.27,-1.11,-1.25,-1.21,-1.23,-1.25,-1.17,-1.16,-1.17,-1.09,-1.09,-1.1,-0.99,-0.91,-0.88,-0.86,-0.84,-0.78,-0.71,-0.67,-0.66,-0.67,-0.66,-0.63,-0.54,-0.46,-0.35,-0.27,-0.11,0.23,0.79,1.28,1.51,1.66],"7":[-1.76,-1.64,-1.4,-1.19,-0.99,-0.4,-0.01,0.52,0.77,0.74,0.72,0.58,0.68,0.62,0.62,0.66,0.7,0.53,0.46,0.41,0.36,0.33,0.32,0.32,0.33,0.29,0.27,0.26,0.23,0.19,0.13,0.1,0.07,0.04,-0.1,-0.36,-0.8,-1.19,-1.51,-1.71],"8":[1.39,1.28,1.03,0.8,0.57,-0.04,-0.52,-1.1,-1.18,-1.21,-1.24,-1.15,-1.06,-1.04,-1.06,-1.03,-0.99,-0.97,-0.94,-0.92,-0.88,-0.88,-0.85,-0.82,-0.78,-0.74,-0.71,-0.7,-0.67,-0.66,-0.61,-0.57,-0.5,-0.44,-0.26,0.03,0.45,0.8,1.1,1.31],"10":[2.38,2.15,1.91,1.66,0.88,0.32,-0.84,-1.72,-1.77,-1.83,-1.75,-1.67,-1.67,-1.52,-1.53,-1.53,-1.43,-1.51,-1.41,-1.34,-1.29,-1.29,-1.26,-1.23,-1.15,-1.09,-1.03,-1.0,-0.95,-0.91,-0.85,-0.8,-0.75,-0.62,-0.38,0.12,0.84,1.53,2.03,2.3],"11":[-2.01,-1.83,-1.7,-1.57,-1.04,-0.41,0.22,0.66,0.73,0.8,0.84,0.7,0.68,0.67,0.69,0.72,0.6,0.54,0.57,0.57,0.55,0.53,0.48,0.42,0.36,0.32,0.28,0.28,0.25,0.25,0.23,0.22,0.17,0.03,-0.19,-0.56,-1.04,-1.44,-1.71,-1.85],"12":[1.48,1.35,1.07,0.87,0.68,0.07,-0.53,-1.06,-1.12,-1.1,-1.07,-1.16,-1.08,-1.01,-1.02,-0.99,-0.97,-0.9,-0.89,-0.87,-0.85,-0.83,-0.84,-0.81,-0.76,-0.68,-0.63,-0.61,-0.6,-0.58,-0.55,-0.51,-0.43,-0.34,-0.18,0.11,0.52,0.92,1.2,1.41],"13":[2.43,2.39,2.07,1.76,1.45,0.56,0.19,-1.17,-1.48,-1.56,-1.63,-1.56,-1.54,-1.39,-1.42,-1.35,-1.29,-1.25,-1.18,-1.11,-1.03,-1.0,-0.97,-0.95,-0.89,-0.84,-0.78,-0.75,-0.71,-0.67,-0.61,-0.56,-0.49,-0.42,-0.19,0.12,0.77,1.37,1.93,2.2],"14":[-1.4,-1.3,-1.21,-0.99,-0.78,-0.27,0.43,0.79,1.03,1.02,1.02,1.1,0.95,0.81,0.91,0.86,0.8,0.84,0.82,0.8,0.8,0.79,0.75,0.69,0.63,0.61,0.6,0.6,0.57,0.53,0.47,0.43,0.4,0.38,0.29,-0.0,-0.39,-0.76,-1.0,-1.22],"15":[1.5,1.38,1.2,1.07,0.93,0.45,-0.19,-0.74,-0.81,-0.82,-0.83,-0.9,-0.74,-0.75,-0.7,-0.68,-0.67,-0.69,-0.62,-0.59,-0.58,-0.57,-0.52,-0.48,-0.42,-0.38,-0.34,-0.34,-0.32,-0.29,-0.25,-0.21,-0.18,-0.17,-0.08,0.2,0.56,0.9,1.11,1.32],"16":[1.23,1.19,0.97,0.73,0.5,-0.03,-0.65,-1.15,-1.4,-1.4,-1.4,-1.35,-1.31,-1.26,-1.22,-1.24,-1.27,-1.14,-1.13,-1.11,-1.09,-1.09,-1.06,-1.04,-0.97,-0.93,-0.87,-0.88,-0.86,-0.84,-0.8,-0.77,-0.7,-0.62,-0.47,-0.21,0.18,0.55,0.86,1.1],"18":[2.09,1.85,1.64,1.44,0.85,0.26,-0.77,-1.27,-1.32,-1.36,-1.31,-1.26,-1.23,-1.08,-1.07,-1.05,-1.05,-1.05,-1.0,-0.95,-0.92,-0.88,-0.85,-0.81,-0.75,-0.69,-0.64,-0.61,-0.59,-0.58,-0.53,-0.47,-0.41,-0.29,-0.08,0.4,0.95,1.47,1. … [+8,407 chars]
Executable theory
accuracy 0.452 · per-stratum {'S1': 0.52, 'S2': 0.8, 'S3': 0.43, 'S4': 0.06} · 28,405 chars
Prediction contracts: truth vs answer
| id | stratum | truth μ | scale | |z| | accuracy | covered |
|---|
| 0 | S1 | -0.413 | 0.150 | 1.1 | 0.338 | ✗ |
| 1 | S1 | +3.000 | 1.000 | 2.8 | 0.063 | ✗ |
| 2 | S1 | -0.517 | 0.189 | 0.7 | 0.510 | ✗ |
| 3 | S1 | +3.000 | 1.000 | 2.8 | 0.063 | ✗ |
| 4 | S2 | -0.603 | 0.168 | 3.1 | 0.046 | ✗ |
| 5 | S2 | +5.000 | 1.000 | 4.5 | 0.011 | ✗ |
| 6 | S2 | -0.443 | 0.223 | 0.6 | 0.564 | ✗ |
| 7 | S2 | +5.000 | 1.000 | 4.5 | 0.011 | ✗ |
| 8 | S3 | +0.416 | 0.205 | 1.8 | 0.169 | ✗ |
| 9 | S3 | +2.667 | 2.550 | 1.0 | 0.373 | ✗ |
| 10 | S3 | -0.574 | 0.168 | 2.4 | 0.093 | ✗ |
| 11 | S3 | +3.000 | 1.000 | 2.9 | 0.057 | ✗ |
| 12 | S4 | -0.498 | 0.128 | 1.3 | 0.262 | ✓ |
| 13 | S4 | +2.000 | 1.000 | 1.4 | 0.242 | ✗ |
| 14 | S4 | +0.414 | 0.175 | 0.3 | 0.736 | ✓ |
| 15 | S4 | +2.000 | 1.000 | 1.7 | 0.179 | ✗ |
Verbatim log (183 entries)
physim.status({})
physim.status({})
{"budget_left": 200000, "phase": "explore"}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": "all"})
I'll start with a baseline observation of the system at zero input, then probe each input port.
{"ticks_run": 300, "budget_left": 199700}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 9, 10, 31, 34], "series": true, "max_numbers": 360})
Baseline shows many channels fluctuating strongly (sd up to 1.5) even at zero input. Let me look at time series to see if it's oscillation or noise.
{"ticks_run": 300, "budget_left": 199400}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
The system is a spiking/relaxation oscillator — channels show periodic pulses (~every 80 ticks) with slow recovery. Let me get a high-resolution trace to measure the spike period precisely.
{"ticks_run": 350, "budget_left": 199050}
physim.run({"segments": [{"t": 300, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 9, 5], "series": true, "max_numbers": 360, "stride": 5})
{"ticks_run": 300, "budget_left": 198750}
physim.run({"segments": [{"t": 300, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": "all", "series": true, "max_numbers": 360, "stride": 5})
Port 0 clearly increases the spike rate (interval ~82 → ~40 ticks at u0=0.8). Now probing the remaining ports.
{"error": "series observation limited to <=6 channels"}
physim.run({"segments": [{"t": 300, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 5})
physim.run({"segments": [{"t": 300, "u": [0, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 5})
{"ticks_run": 300, "budget_left": 198150}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0.8, 0, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 5})
{"ticks_run": 300, "budget_left": 197850}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0.8, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 5})
{"ticks_run": 300, "budget_left": 197550}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
All ports so far speed up spiking — suspicious. There may be a slow carryover (adaptation). Let me verify the baseline rate recovers at zero input.
{"ticks_run": 350, "budget_left": 197200}
physim.run({"segments": [{"t": 300, "u": [0, 0, 0, 0, 0.8, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 5})
Baseline period ~83 ticks confirmed, with a longer post-drive first interval (slow adaptation). Testing ports 4–7 now.
{"ticks_run": 300, "budget_left": 196900}
physim.run({"segments": [{"t": 400, "u": [-0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 10, 31, 34, 5, 9], "series": true, "max_numbers": 360, "stride": 7})
{"ticks_run": 400, "budget_left": 196500}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0.8, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 350, "budget_left": 196150}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0.8, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 350, "budget_left": 195800}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}, {"t": 350, "u": [0.8, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 2})
Port 6 same (T≈39). Now testing port 7 and additivity (ports 0+1 together) in one run.
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}, {"t": 350, "u": [0.8, 0.8, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 2})
Port 6 same (T≈39). Now testing port 7 and additivity (ports 0+1 together) in one run.
{"ticks_run": 700, "budget_left": 195100}
physim.run({"segments": [{"t": 300, "u": [0.2, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [1.0, 0, 0, 0, 0, 0, 0, 0]}], "chan)
Port 7 also drives (T≈40 for one port at 0.8), and ports 0+1 together give T≈25 — rate is roughly additive in total drive. Now an amplitude scan on port 0.
physim.run({"segments": [{"t": 300, "u": [0.2, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.4, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channe)
Port 7 also drives (T≈40 for one port at 0.8), and ports 0+1 together give T≈25 — rate is roughly additive in total drive. Now an amplitude scan on port 0.
{"ticks_run": 1200, "budget_left": 193900}
physim.run({"segments": [{"t": 350, "u": [-1, -1, -1, -1, -1, -1, -1, -1]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 350, "budget_left": 193550}
physim.run({"segments": [{"t": 100, "u": [-1, -1, -1, -1, -1, -1, -1, -1]}], "channels": "all"})
Negative drive confirmed to have no rate effect (rectified). Checking whether negative/positive inputs shift the level (non-spiking) channels.
{"ticks_run": 100, "budget_left": 193450}
physim.run({"segments": [{"t": 350, "u": [1, 1, 1, 1, 1, 1, 1, 1]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
No rate effect from negative drive. Now measuring the maximum rate (all 8 ports at +1) and the waveform under fast spiking.
{"ticks_run": 350, "budget_left": 193100}
physim.run({"segments": [{"t": 350, "u": [1, 1, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [1, 1, 1, 1, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 2})
Surprise: all 8 ports at 1.0 gives T≈36 — slower than 2 ports at 0.8 (T≈25). Rate is non-monotonic in total drive. Mapping the combination structure now.
{"ticks_run": 700, "budget_left": 192400}
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0.8, 0.8, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [1, 1, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360,)
Odd: ports 0+1 at 1.0 give T≈39, but at 0.8 gave T≈25. Possible non-monotonicity or history dependence. Replicating cleanly from rest in a single run.
physim.run({"segments": [{"t": 400, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0.8, 0.8, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [1, 1, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360,)
Odd: ports 0+1 at 1.0 give T≈39, but at 0.8 gave T≈25. Possible non-monotonicity or history dependence. Replicating cleanly from rest in a single run.
{"ticks_run": 1100, "budget_left": 191300}
physim.run({"segments": [{"t": 450, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0.8]}, {"t": 350, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 350, "u": [0.8, 0.8, 0, 0, 0, 0, 0, 0]}], "chan)
History matters: (0.8,0.8) from rest gives T=40, but after a different port was driving it gave T=25. Running a controlled switch experiment to isolate the effect.
{"ticks_run": 1500, "budget_left": 189800}
Write: /app/physim/analyze1.py
Let me stop eyeballing and analyze that anomalous run's trace numerically.
Write: /app/physim/spk.py
physim.run({"segments": [{"t": 400, "u": [0.15, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.25, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.35, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.5, 0, 0, 0, 0, 0, 0, 0]}], "c)
{"ticks_run": 1600, "budget_left": 188200}
physim.run({"segments": [{"t": 400, "u": [0.2, 0.2, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.15, 0.15, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.3, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.1, 0.1, 0.1, 0.1, 0, 0, 0,)
Threshold nonlinearity: u≤0.25 → no effect; u≥0.35 → near-saturated (T≈43–45). Testing whether subthreshold inputs on different ports sum across ports.
{"ticks_run": 1600, "budget_left": 186600}
physim.run({"segments": [{"t": 400, "u": [0.27, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.8, 0.2, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 3})
{"ticks_run": 800, "budget_left": 185800}
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 2, 3, 4, 5], "series": true, "max_numbers": 360, "stride": 6})
Threshold is between 0.25 and 0.27 (very sharp), and subthreshold inputs add nothing even alongside a driving port. Now characterizing all 40 channels' waveforms — baseline first, groups of 6.
{"ticks_run": 360, "budget_left": 185440}
Write: /app/physim/data/base_g0.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 7, 8, 9, 10, 11], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 185080}
Write: /app/physim/data/base_g1.json
Write: /app/physim/data/base_g1.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [12, 13, 14, 15, 16, 17], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 184720}
Write: /app/physim/data/base_g2.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 19, 20, 21, 22, 23], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 184360}
Write: /app/physim/data/base_g3.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [24, 25, 26, 27, 28, 29], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 184000}
Write: /app/physim/data/base_g4.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31, 32, 33, 34, 35], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 183640}
Write: /app/physim/data/base_g5.json
physim.run({"segments": [{"t": 360, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [36, 37, 38, 39, 2, 17], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 183280}
Write: /app/physim/data/base_g6.json
Write: /app/physim/data/base_g6.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 1, 2, 3, 4, 5], "series": true, "max_numbers": 360, "stride": 6})
All 40 baseline traces captured. Now the same groups under drive (u0=0.8, T≈40).
{"ticks_run": 360, "budget_left": 182920}
Write: /app/physim/data/drv_g0.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [6, 7, 8, 9, 10, 11], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 182560}
Write: /app/physim/data/drv_g1.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [12, 13, 14, 15, 16, 17], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 182200}
Write: /app/physim/data/drv_g2.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [18, 19, 20, 21, 22, 23], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 181840}
Write: /app/physim/data/drv_g3.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [24, 25, 26, 27, 28, 29], "series": true, "max_numbers": 360, "stride": 6})
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [24, 25, 26, 27, 28, 29], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 181480}
Write: /app/physim/data/drv_g4.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [30, 31, 32, 33, 34, 35], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 181120}
Write: /app/physim/data/drv_g5.json
physim.run({"segments": [{"t": 360, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [36, 37, 38, 39, 2, 17], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 360, "budget_left": 180760}
Write: /app/physim/data/drv_g6.json
Write: /app/physim/fit_channels.py
All 40 channels now have baseline + driven traces on disk. Let me fit per-channel parameters (baseline level, spike amplitude/polarity, cycle statistics) offline.
physim.run({"segments": [{"t": 2500, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 800, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 10})
Channel taxonomy done: 4 quiet channels (2,5,9,17), 36 spiking with various amplitudes/signs. Now the dynamics: long-hold adaptation and post-release pause in one run.
{"ticks_run": 3300, "budget_left": 177460}
physim.reset({})
physim.reset({})
{"budget_left": 177260}
physim.run({"segments": [{"t": 350, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0, 2, 5, 9, 17, 10], "series": true, "max_numbers": 360, "stride": 6})
{"ticks_run": 350, "budget_left": 176910}
physim.reset({})
{"budget_left": 176710}
physim.run({"segments": [{"t": 350, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stride": 1})
{"ticks_run": 350, "budget_left": 176360}
physim.run({"segments": [{"t": 500, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [1, 1, 1, 1, 1, 1, 1, 1]}, {"t": 400, "u": [1, 1, 1, 1, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "st)
Fresh draws confirm stable laws (T(0)≈82, T(0.8)=40, same channel levels; only phase re-randomizes). Now verifying the multi-port high-drive effect from a controlled rest context.
{"ticks_run": 1300, "budget_left": 175060}
physim.run({"segments": [{"t": 400, "u": [-1, -1, -1, -1, -1, -1, -1, -1]}, {"t": 400, "u": [1, 1, 1, 1, 1, 1, 1, 1]}, {"t": 400, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers")
{"ticks_run": 1200, "budget_left": 173860}
physim.run({"segments": [{"t": 400, "u": [0.3, 0.3, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27]}, {"t": 300, "u": [0.8, 0, 0, 0, 0, 0, 0, 0]}, {"t": 400, "u": [0, 0, 0, 0)
{"ticks_run": 1500, "budget_left": 172360}
physim.run({"segments": [{"t": 600, "u_start": [0, 0, 0, 0, 0, 0, 0, 0], "u_end": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 360, "stri)
{"ticks_run": 800, "budget_left": 171560}
Write: /app/physim/model.py
Ramp behaves as predicted by the static threshold + phase-integrator picture. The model is complete; now building the per-channel waveform fitter and a Monte-Carlo protocol simulator.
Write: /app/physim/sim.py
physim.run({"segments": [{"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0.5, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [1, 1, 1, 1, 1, 1, 1, 1]}], "channels":)
Simulator running. Validating against reality — same protocol run on the real system twice: once for all-channel tail stats, once for a ch0 spike-train trace.
{"ticks_run": 1000, "budget_left": 170560}
physim.run({"segments": [{"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0.5, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [1, 1, 1, 1, 1, 1, 1, 1]}], "channels":)
{"ticks_run": 1000, "budget_left": 169560}
physim.run({"segments": [{"t": 300, "u": [0.6, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 250, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, ")
{"ticks_run": 1650, "budget_left": 167910}
physim.run({"segments": [{"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 300, "u": [0, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u")
Odd observation: after release from 1.0, a "doublet" (two spikes 40 apart at zero input) appeared before the long pause. Gathering release statistics with repeated drive/release cycles.
{"ticks_run": 2000, "budget_left": 165910}
Edit: /app/physim/sim.py
Edit: /app/physim/sim.py
Edit: /app/physim/sim.py
Edit: /app/physim/sim.py
physim.run_policy({"code": "def policy(t, y, mem):\n # simple test: drive port 0 for first 100 ticks, then stop; count ticks\n mem['n'] = mem.get('n', 0) + 1\n if t < 100:\n return [0.8, 0, 0, 0, 0, 0, )
Release dynamics now match. Before ending exploration, one quick `run_policy` interface test (useful for preparation contracts).
{"ticks_run": 200, "budget_left": 165710}
physim.ready({})
The `run_policy` interface works, and the post-release pause replicated again. My model is complete and validated. Ending exploration to receive the contracts.
{"phase": "answer"}
physim.run({"segments": [{"t": 8, "u": [1, 0, 0, 0, 0, 0, 0, 0]}, {"t": 200, "u": [0, 0, 0, 0, 0, 0, 0, 0]}], "channels": [0], "series": true, "max_numbers": 210, "stride": 1})
{"error": "exploration is over; reply with the answers object"}
Write: /app/physim/contracts.json
Write: /app/physim/answer.py
physim.answer({"answers": [{"id": 0, "mean": -0.255, "low": -0.35, "high": -0.16}, {"id": 1, "mean": 0.24, "low": 0.011, "high": 0.34}, {"id": 2, "mean": -0.395, "low": -0.48, "high": -0.31}, {"id": 3, "mean": 0.24)
physim.answer({"answers": [{"id": 0, "mean": -0.255, "low": -0.35, "high": -0.16}, {"id": 1, "mean": 0.24, "low": 0.011, "high": 0.34}, {"id": 2, "mean": -0.395, "low": -0.48, "high": -0.31}, {"id": 3, "mean": 0.24)
{"received": 16}
Write: /app/physim/build_theory.py
Driven rendering is right, but the baseline render has spurious zero-crossings near the spike fall — likely ringing in the extracted waveform grid. Inspecting and cleaning.
Write: /app/physim/refit.py
Waveforms are now physically clean and cycle means match measured traces. Re-running all Monte-Carlo predictions with the corrected model.
physim.answer({"answers": [{"id": 0, "mean": -0.25, "low": -0.35, "high": -0.16}, {"id": 1, "mean": 0.24, "low": 0.011, "high": 0.34}, {"id": 2, "mean": -0.39, "low": -0.48, "high": -0.3}, {"id": 3, "mean": 0.24, ")
{"received": 16}
physim.submit_theory({"code": "import math\nimport numpy as np\n\nWB = {\"0\":[2.21,1.42,0.63,0.31,-0.01,-0.33,-0.65,-0.73,-0.82,-0.88,-0.94,-1.0,-1.06,-0.84,-0.61,-0.69,-0.77,-0.85,-0.89,-0.9,-0.86,-0.81,-0.76,-0.71,-0.6)
Investigation complete. All 16 contracts answered and an executable theory submitted. Here's a summary of what I found and did.
## What the system is
The hidden system is a **single global relaxation oscillator** driving 40 sensors:
- **At rest it fires a stereotyped pulse every ~82.5 ticks** (sharp rise over ~8 ticks to a plateau, drop to a hyperpolarized dip, slow recovery to baseline).
- **3