{"approach":"Measurement only, no candidate. B (sha256 baef955e...) was run byte-identical on seeds 238000..238999 (1000 simulations, 2,000,000 callbacks) through the brief's run_batch call on an unedited checkout of the simulator at b244530. Read-only taps installed at run time: a PredictionMarket subclass that reads the starting probability and, each step, the fills and true probability handed to record_participant_fills before delegating; a pass-through wrapper on process._sample_poisson that reads the jump count; a sys.monitoring PY_RETURN hook on B.on_step that reads B's locals lo, hi, phat, mean_t, var_t, s when it returns. At callback t B's phat and [lo,hi] (ticks) are compared with the true probability after t process steps, which is the value the arbitrageur used in the previous step (the start probability at t=0); that step's fills give the row's retail and arbitrage edge. Identity: total, retail and arbitrage edge and the failed flag are exactly equal with and without the taps on all 1000 seeds (0 mismatches; the first 20 seeds were checked and timed first), and per-step edges sum to the reported edges within 5.4e-9.","tried":["Timing first on seeds 238000..238019 in 4 processes: 0.74 s/sim plain, 0.80 s/sim instrumented, 0 edge mismatches; so the whole block was run (4 processes on disjoint 250-seed ranges, about 3.5 min wall per pass), not the 500-seed fallback.","Overall: MAE of phat against the previous-step truth is 0.303 ticks (se 0.002, clustered by simulation), bias -0.018, RMSE 0.406; the truth lies outside [lo,hi] on 0.35% of callbacks (7021 of 2,000,000; 3435 below lo, 3586 above hi; 230 of them were still outside from the callback before). Mean width hi-lo is 1.27 ticks and 81.6% of callbacks have width <= 1 tick (MAE 0.230 there; the interval midpoint gives 0.268). For scale the true one-step move |p_t - p_(t-1)| averages 0.524 ticks and |p_t - phat| 0.633. B's predictive sd is calibrated on no-jump steps (mean squared z of the next-step error 1.05).","By probability bucket: MAE is 0.34 ticks between 20 and 80 ticks, about 0.2 between 1 and 5 ticks, 0.08 to 0.23 below 1 tick. Bias is within 0.08 ticks in every bucket up to 99 ticks except 0.5-1 tick (phat 0.20 low); above 99 ticks it reaches -0.49 (bucket 99.9-100: B has no decay at the top, but callbacks with lo>=99 earn only 1.2 edge per simulation). Below tick 1 (6.7% of callbacks, 60.8 of the 100.9 mean edge) MAE is 0.124; the decay runs slightly fast at first (bias -0.09 in the first 10 callbacks below tick 1, -0.07 in callbacks 11-50, about 0 after).","By steps since the last jump: the first callback after a jump has MAE 0.366 (se 0.008) and 1.4% outside, the second 0.334, the third 0.312, then 0.29-0.30 as in steady state. Arbitrage edge on the first two callbacks after a jump totals -0.49 per simulation, so slow re-localisation after jumps is not where the loss is.","Where the arbitrage loss is: callbacks whose own step contains a jump (3905, 0.195% of callbacks; belief MAE before them 0.31, as accurate as anywhere) carry -13.74 of the -27.19 arbitrage edge (jumps >= 1 tick -13.20, se 1.60). 228 jump steps that start with p between 1 and 5 ticks cost -7.04 (se 1.27) alone, asks -4.61 and bids -2.43. No-jump steps carry -13.45 (se 0.59), of which -10.12 is on bids. Callbacks with the truth outside [lo,hi] carry -0.82; callbacks with |phat error| >= 1 tick (2.8% of callbacks) carry -2.02.","Defect found: on callbacks where the competitor's best bid has dropped by exactly one tick, or its best ask has risen by exactly one tick, since the previous callback (226,143 callbacks, 11.3%), phat is biased 0.65 ticks toward the cell p has just left (MAE 0.667 and 0.665, against 0.255 on callbacks with no retreat). B's code only uses a retreat of more than one tick ('if ca > self.pca + 1', 'if cb < self.pcb - 1'). Reading the one-tick retreat as p having crossed that tick is true on 98.5% (bid down) and 98.3% (ask up) of those callbacks; the bounds it gives are 1.00 tick wide with midpoint MAE 0.283, and the truth is outside them on 1.2% and 1.4% (0.4% with B's bounds). This is a counterfactual on the recorded states of B's own run, not a re-run with changed orders. The existing more-than-one-tick rule is less reliable: truth outside B's bounds on 5.3% and 5.7% of the 58,099 callbacks where it fires.","Not done: no oracle or changed strategy was run, so paired is null; the edge sizes under next are the edge B earned or lost on the named callbacks, which bounds what a fix can recover and is not a measured gain."],"next":[{"change":"Use a one-tick retreat of the competitor's best quote as evidence that p crossed it: in B's jumpinfo block set lo to at least ca-1 when ca > self.pca, and hi to at most cb+1 when cb < self.pcb, or better multiply the belief weights of the cell left behind by about 0.016 (the measured share of retreats that were not a crossing) instead of cutting hard, since a hard cut puts the truth outside the bounds on about 1.3% of those callbacks.","evidence":"226,143 callbacks (11.3%): phat MAE 0.666 with bias 0.65 ticks to the stale side; the crossing reading holds on 98.4% and leaves a 1-tick interval (midpoint MAE 0.283). Over all callbacks the same bounds with phat clipped into them give MAE 0.270 against 0.303.","edge_at_stake":"B's arbitrage edge on these callbacks is -3.57 per simulation (bid down one tick -2.79, se 0.23, of which -2.58 on bids; ask up one tick -0.78, se 0.10) against 4.43 retail edge, net +0.86. The bid-down side loses 2.0 more than the ask-up side. At most about 3.6 per simulation, plausibly 1 to 2; a paired run has to measure it."},{"change":"Cut what rests in front of a jump when p is between 1 and 5 ticks: cap share quantity (not notional) on the asks and on the accumulation bids there, or charge the ask and bid sizing a jump loss that scales with shares resting, and tune the cap against the retail edge it gives up. The belief cannot help here: its error before these jumps is 0.22 ticks.","evidence":"Callbacks starting with p in [1,5) ticks are 5.4% of all callbacks and carry -13.88 of the -27.19 arbitrage edge: -7.04 (se 1.27) on 228 jump steps and -6.84 (se 0.37) on no-jump steps (-5.77 of it on bids). The same callbacks earn 24.17 retail edge.","edge_at_stake":"Up to 7.0 per simulation on the jump steps in this zone (13.7 on all jump steps), gross of the retail edge forgone from the 24.2 earned there; the net is unknown until a paired run."}],"code":"\"\"\"Belief-calibration harness for strategy B (measurement only, builds no candidate).\n\n  python3 harness.py plain SIM B.py S0 S1 OUT.json   unmodified simulator, one run_batch call per seed\n  python3 harness.py inst  SIM B.py S0 S1 OUTPREFIX  same call with read-only taps; per-step rows -> OUTPREFIX.bin\n  python3 harness.py agg   OUT.json PLAIN.json... -- INSTPREFIX...   aggregate + identity check\n\nSIM is a checkout of danrobinson/prediction-market-challenge at b244530; no simulator file is edited.\nTaps (inst mode only): a PredictionMarket subclass that reads the starting probability and each step's\nfills/true probability before delegating to the original methods; a pass-through wrapper around\nprocess._sample_poisson that reads the jump count; a sys.monitoring PY_RETURN hook on B.on_step that reads\nB's locals (lo, hi, phat, mean_t, var_t, s) when it returns.  B's file is loaded byte-identical.\n\"\"\"\nimport array, json, math, sys, time\n\nNF = 20  # doubles per step row\n(SEED, STEP, LO, HI, PHAT, MEANT, VART, S, TB, CB, CA, Q, PN, JUMP, RB, RA, AB_, AA, AQ, SPARE) = range(NF)\n\n\ndef run_seed(run_batch, factory, CC, PV, s):\n    r = run_batch(factory, base_config=CC(), variance=PV(), n_simulations=1, seed_start=s, workers=1)\n    x = r.simulation_results[0]\n    return dict(seed=s, total_edge=x.total_edge, retail_edge=x.retail_edge, arb_edge=x.arb_edge, failed=x.failed,\n                error=x.error, regime=vars(x.regime) if hasattr(x.regime, '__dict__') else str(x.regime))\n\n\ndef main_run(mode, sim, bpath, s0, s1, out):\n    sys.path.insert(0, sim)\n    from orderbook_pm_challenge.runner import run_batch\n    from orderbook_pm_challenge.config import ChallengeConfig as CC, ParameterVariance as PV\n    from orderbook_pm_challenge.loader import load_strategy_factory\n    factory = load_strategy_factory(bpath)\n    rows = array.array('d')\n    if mode == 'inst':\n        import orderbook_pm_challenge.engine as E\n        import orderbook_pm_challenge.process as PR\n        from orderbook_pm_challenge.types import Side\n        T = dict(prev=None, jump=0, row=None, seed=-1)\n        orig_sp = PR._sample_poisson\n\n        def spy_sp(rng, mean):\n            n = orig_sp(rng, mean)\n            T['jump'] = n\n            return n\n        PR._sample_poisson = spy_sp\n\n        class SpyMarket(E.PredictionMarket):\n            def initialize_competitor(self, starting_probability):\n                T['prev'] = starting_probability\n                return super().initialize_competitor(starting_probability)\n\n            def record_participant_fills(self, fills, *, probability):\n                rb = ra = ab = aa = aq = 0.0\n                for f in fills:\n                    x = f.price_ticks / 100.0\n                    buy = f.side is Side.BUY\n                    e = f.quantity * (probability - x) if buy else f.quantity * (x - probability)\n                    if f.aggressor == 'retail':\n                        if buy: rb += e\n                        else: ra += e\n                    elif f.aggressor == 'arb':\n                        aq += f.quantity\n                        if buy: ab += e\n                        else: aa += e\n                r = T['row']\n                if r is not None:\n                    rows.extend(r)\n                    rows.extend((T['prev'], probability, float(T['jump']), rb, ra, ab, aa, aq, 0.0))\n                    T['row'] = None\n                T['prev'] = probability\n                return super().record_participant_fills(fills, probability=probability)\n        E.PredictionMarket = SpyMarket\n        code = factory().on_step.__func__.__code__\n        M = sys.monitoring\n        M.use_tool_id(M.PROFILER_ID, 'calib')\n\n        def on_ret(c, off, rv):\n            L = sys._getframe(1).f_locals\n            T['row'] = (float(T['seed']), float(L['state'].step), float(L['lo']), float(L['hi']), L['phat'],\n                        L['mean_t'], L['var_t'], L['s'], float(L['self'].tb), float(L['cb']), float(L['ca']))\n        M.register_callback(M.PROFILER_ID, M.events.PY_RETURN, on_ret)\n        M.set_local_events(M.PROFILER_ID, code, M.events.PY_RETURN)\n    res = []\n    t0 = time.time()\n    for s in range(s0, s1):\n        if mode == 'inst':\n            T['seed'] = s\n            T['row'] = None\n        t1 = time.time()\n        d = run_seed(run_batch, factory, CC, PV, s)\n        d['seconds'] = time.time() - t1\n        res.append(d)\n    meta = dict(mode=mode, s0=s0, s1=s1, seconds=time.time() - t0, python=sys.version.split()[0], results=res)\n    if mode == 'inst':\n        with open(out + '.bin', 'wb') as f:\n            rows.tofile(f)\n        out = out + '.json'\n    json.dump(meta, open(out, 'w'))\n    print(mode, s0, s1, 'sec/sim', round(meta['seconds'] / max(1, s1 - s0), 3), 'mean', sum(d['total_edge'] for d in res) / len(res))\n\n\n# ---------------------------------------------------------------- aggregation\nPB = [0, 0.1, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 80, 90, 95, 98, 99, 99.5, 99.9, 100.0000001]\nDB = [(0, 0), (1, 1), (2, 2), (3, 5), (6, 10), (11, 30), (31, 100), (101, 300), (301, 10 ** 9)]\nEB = [0, 0.1, 0.25, 0.5, 1, 2, 1e9]\nTBB = [(1, 10), (11, 50), (51, 200), (201, 10 ** 9)]\nTOL = 1e-7\n\n\ndef pbucket(q):\n    for i in range(len(PB) - 1):\n        if q < PB[i + 1]:\n            return 'p_prev_ticks[%g,%g%s' % (PB[i], min(PB[i + 1], 100), ']' if i == len(PB) - 2 else ')')\n\n\ndef rng_name(pref, bs, v):\n    for i in range(len(bs) - 1):\n        if v < bs[i + 1]:\n            return '%s[%g,%s)' % (pref, bs[i], 'inf' if bs[i + 1] > 1e8 else '%g' % round(bs[i + 1], 4))\n\n\nclass Acc:\n    __slots__ = ('n', 'ae', 'se', 'sq', 'out', 'outd', 'below', 'wid', 'am', 'an', 'ai', 'sv', 'ss', 'per', 'sqm', 'nj', 'njq', 'njs', 'njz', 'cx', 'cw', 'cm', 'cc', 'co')\n\n    def __init__(self):\n        self.n = 0; self.ae = self.se = self.sq = 0.0; self.out = 0; self.outd = 0.0; self.below = 0\n        self.wid = self.am = self.an = self.ai = self.sv = self.ss = 0.0\n        self.sqm = self.njq = self.njs = self.njz = 0.0; self.nj = 0\n        self.cx = self.co = 0; self.cw = self.cm = self.cc = 0.0\n        self.per = {}  # sim -> [n, abs err, outside, retail edge, arb edge]\n\n\ndef agg(out, plain_files, inst_prefixes):\n    plain = {}\n    for p in plain_files:\n        for d in json.load(open(p))['results']:\n            plain[d['seed']] = d\n    inst, secs = {}, 0.0\n    A = {}\n    order = []\n    tot = dict(n=0)\n    persim_step = {}\n    for pre in inst_prefixes:\n        m = json.load(open(pre + '.json'))\n        secs += m['seconds']\n        for d in m['results']:\n            inst[d['seed']] = d\n        a = array.array('d')\n        with open(pre + '.bin', 'rb') as f:\n            a.frombytes(f.read())\n        nrow = len(a) // NF\n        dj = None; djm = None; cur = None; pout = False; pret = False; pcb = pca = None\n        for i in range(nrow):\n            r = a[i * NF:(i + 1) * NF]\n            sd = int(r[SEED])\n            if sd != cur:\n                cur = sd; dj = None; djm = None; pout = False; pret = False; pcb = pca = None\n                persim_step[sd] = [0, 0.0, 0.0]\n            q = r[Q] * 100.0; pn = r[PN] * 100.0; ph = r[PHAT] * 100.0\n            lo, hi = r[LO], r[HI]\n            e = ph - q\n            below = q < lo - TOL; above = q > hi + TOL\n            outd = (lo - q) if below else (q - hi) if above else 0.0\n            re_, ar_ = r[RB] + r[RA], r[AB_] + r[AA]\n            ps = persim_step[sd]; ps[0] += 1; ps[1] += re_; ps[2] += ar_\n            jn = r[JUMP] > 0\n            keys = ['ALL', pbucket(q),\n                    'since_jump:' + ('none_yet' if dj is None else next('%d' % lo_ if lo_ == hi_ else '%d-%s' % (lo_, 'inf' if hi_ > 1e8 else hi_) for lo_, hi_ in DB if lo_ <= dj <= hi_)),\n                    'since_jump>=1tick:' + ('none_yet' if djm is None else next('%d' % lo_ if lo_ == hi_ else '%d-%s' % (lo_, 'inf' if hi_ > 1e8 else hi_) for lo_, hi_ in DB if lo_ <= djm <= hi_)),\n                    'next_step:' + ('jump>=1tick' if jn and abs(pn - q) >= 1 else 'jump<1tick' if jn else 'no_jump'),\n                    rng_name('abs_err_ticks', EB, abs(e)),\n                    'truth:' + ('below_lo' if below else 'above_hi' if above else 'inside'),\n                    'width_ticks:' + ('<=1' if hi - lo <= 1 + TOL else '(1,2]' if hi - lo <= 2 + TOL else '(2,4]' if hi - lo <= 4 + TOL else '>4'),\n                    'regime:' + ('tb>0 (hi<=1, decay)' if r[TB] > 0 else 'lo>=99' if lo >= 99 else 'interior'),\n                    'steps_remaining:' + ('1-50' if 2000 - r[STEP] <= 50 else '51-500' if 2000 - r[STEP] <= 500 else '501-2000')]\n            zone = '<1' if q < 1 else '[1,5)' if q < 5 else '[5,20)' if q < 20 else '[20,80)' if q < 80 else '[80,95)' if q < 95 else '[95,100]'\n            keys.append('zone_x_next:p%s,%s' % (zone, 'jump' if jn else 'no_jump'))\n            if not jn and 5 <= q < 95:\n                keys.append('interior_nojump_' + keys[7])\n            # competitor best quote retreated since the previous callback: counterfactual bounds if that is read as p crossing\n            cb, ca = r[CB], r[CA]\n            au = 0 if pca is None else ca - pca; bd = 0 if pcb is None else pcb - cb\n            lo2, hi2 = lo, hi; xok = True\n            if au >= 1:\n                lo2 = max(lo2, ca - 1); xok = xok and q >= ca - 1 - TOL\n            if bd >= 1:\n                hi2 = min(hi2, cb + 1); xok = xok and q <= cb + 1 + TOL\n            if lo2 > hi2:\n                lo2, hi2 = lo, hi\n            keys.append('comp_quote:' + ('ask_up_and_bid_down' if au >= 1 and bd >= 1 else 'ask_up_1tick' if au == 1 else 'ask_up_>1tick' if au > 1 else 'bid_down_1tick' if bd == 1 else 'bid_down_>1tick' if bd > 1 else 'no_retreat'))\n            pcb, pca = cb, ca\n            if r[TB] > 0:\n                keys.append('below_tick1_for_steps:' + next('%d-%s' % (a_, 'inf' if b_ > 1e8 else b_) for a_, b_ in TBB if a_ <= r[TB] <= b_))\n            if below or above:\n                keys.append('outside_cause:' + ('still_outside_from_prev_step' if pout else 'new_after_own_retail_fill' if pret else 'new_no_own_retail_fill'))\n            pout = below or above; pret = (r[RB] != 0.0 or r[RA] != 0.0)\n            for k in keys:\n                c = A.get(k)\n                if c is None:\n                    c = A[k] = Acc(); order.append(k)\n                c.n += 1; c.ae += abs(e); c.se += e; c.sq += e * e\n                if below or above:\n                    c.out += 1; c.outd += outd; c.below += below\n                c.wid += hi - lo; c.am += abs((lo + hi) / 2 - q); c.an += abs(pn - ph); c.ai += abs(pn - q)\n                c.sv += r[VART]; c.ss += (r[S] * 100) ** 2; c.sqm += ((lo + hi) / 2 - q) ** 2\n                c.cx += xok; c.cw += hi2 - lo2; c.cm += abs((lo2 + hi2) / 2 - q); c.cc += abs(min(max(ph, lo2), hi2) - q); c.co += (q < lo2 - TOL or q > hi2 + TOL)\n                if not jn:\n                    c.nj += 1; c.njq += (pn - ph) ** 2; c.njs += (r[S] * 100) ** 2; c.njz += ((pn - ph) / (r[S] * 100)) ** 2\n                p = c.per.get(sd)\n                if p is None:\n                    p = c.per[sd] = [0, 0.0, 0, 0.0, 0.0, 0.0, 0.0]\n                p[0] += 1; p[1] += abs(e); p[2] += (below or above); p[3] += re_; p[4] += ar_; p[5] += r[AB_]; p[6] += r[AA]\n            # advance jump clocks: row i+1's \"previous step\" is this step's process move\n            if jn:\n                dj = 0\n                djm = 0 if abs(pn - q) >= 1 else (None if djm is None else djm + 1)\n            else:\n                dj = None if dj is None else dj + 1\n                djm = None if djm is None else djm + 1\n        del a\n    seeds = sorted(inst)\n    n = len(seeds)\n    ident = [s for s in seeds if s in plain]\n    mism = [s for s in ident if (plain[s]['total_edge'], plain[s]['retail_edge'], plain[s]['arb_edge'], plain[s]['failed']) !=\n            (inst[s]['total_edge'], inst[s]['retail_edge'], inst[s]['arb_edge'], inst[s]['failed'])]\n    drift = max(abs(persim_step[s][1] - inst[s]['retail_edge']) + abs(persim_step[s][2] - inst[s]['arb_edge']) for s in seeds)\n\n    def mse(v):\n        m = sum(v) / len(v)\n        return m, math.sqrt(sum((x - m) ** 2 for x in v) / (len(v) - 1) / len(v))\n\n    def ratio_se(num, den, R):  # cluster (per-simulation) linearised SE of sum(num)/sum(den)\n        D = sum(den)\n        return math.sqrt(n / (n - 1.0) * sum((a_ - R * b_) ** 2 for a_, b_ in zip(num, den))) / D\n    rows = []\n    for k in order:\n        c = A[k]\n        z = [0, 0.0, 0, 0.0, 0.0, 0.0, 0.0]\n        per = [c.per.get(s, z) for s in seeds]\n        mae = c.ae / c.n; osh = c.out / c.n\n        em, es = mse([p[3] + p[4] for p in per]); rm, rs = mse([p[3] for p in per]); am, as_ = mse([p[4] for p in per])\n        rows.append(dict(\n            name=k, count=c.n, sims_with_steps=len(c.per), steps_per_sim=round(c.n / n, 3),\n            edge_mean=round(em, 4), retail_mean=round(rm, 4), arb_mean=round(am, 4), se=round(es, 4),\n            retail_se=round(rs, 4), arb_se=round(as_, 4),\n            arb_bid_mean=round(sum(p[5] for p in per) / n, 4), arb_ask_mean=round(sum(p[6] for p in per) / n, 4),\n            arb_per_1000_steps=round(1000 * sum(p[4] for p in per) / c.n, 4),\n            mae_ticks=round(mae, 4), mae_se=round(ratio_se([p[1] for p in per], [p[0] for p in per], mae), 4),\n            bias_ticks=round(c.se / c.n, 4), rmse_ticks=round(math.sqrt(c.sq / c.n), 4),\n            outside_share=round(osh, 5), outside_se=round(ratio_se([p[2] for p in per], [p[0] for p in per], osh), 5),\n            outside_below_lo_share=round(c.below / c.n, 5),\n            outside_mean_miss_ticks=round(c.outd / c.out, 4) if c.out else None,\n            width_ticks=round(c.wid / c.n, 4), mae_midpoint_ticks=round(c.am / c.n, 4),\n            mae_next_vs_phat_ticks=round(c.an / c.n, 4), mae_next_vs_prev_truth_ticks=round(c.ai / c.n, 4),\n            belief_sd_ticks=round(math.sqrt(c.sv / c.n), 4), pred_sd_ticks=round(math.sqrt(c.ss / c.n), 4),\n            skill_vs_midpoint=round(1 - c.sq / c.sqm, 4) if c.sqm else None,\n            nojump_rmse_next_vs_phat_ticks=round(math.sqrt(c.njq / c.nj), 4) if c.nj else None,\n            nojump_pred_sd_ticks=round(math.sqrt(c.njs / c.nj), 4) if c.nj else None,\n            nojump_mean_z2=round(c.njz / c.nj, 4) if c.nj else None,\n            cf_crossing_true_share=round(c.cx / c.n, 5), cf_width_ticks=round(c.cw / c.n, 4), cf_mae_midpoint_ticks=round(c.cm / c.n, 4),\n            cf_mae_phat_clipped_ticks=round(c.cc / c.n, 4), cf_outside_share=round(c.co / c.n, 5)))\n    tm, ts = mse([inst[s]['total_edge'] for s in seeds])\n    res = dict(n=n, seeds=[seeds[0], seeds[-1]], complete=(n == seeds[-1] - seeds[0] + 1),\n               incumbent=dict(mean=tm, retail_mean=sum(inst[s]['retail_edge'] for s in seeds) / n,\n                              arb_mean=sum(inst[s]['arb_edge'] for s in seeds) / n, se=ts),\n               failures=sum(1 for s in seeds if inst[s]['failed']),\n               seconds_per_simulation_instrumented=secs / n,\n               seconds_per_simulation_plain=(sum(plain[s]['seconds'] for s in ident) / len(ident)) if ident else None,\n               identity=dict(seeds_compared=len(ident), first=ident[0] if ident else None, last=ident[-1] if ident else None,\n                             mismatches=len(mism), mismatch_seeds=mism[:10],\n                             max_abs_step_sum_vs_reported_edge=drift),\n               steps=sum(v[0] for v in persim_step.values()), findings=rows)\n    json.dump(res, open(out, 'w'), indent=1)\n    print(json.dumps({k: v for k, v in res.items() if k != 'findings'}, indent=1))\n    for r in sorted(rows, key=lambda r: r['name'].split(':')[0].split('[')[0]):\n        print('%-44s n=%8d mae=%.3f(%.3f) bias=%+.3f rmse=%.3f bsd=%.3f out=%.4f(%.4f) wid=%.2f mid=%.3f skill=%s nxt=%.3f/%.3f njrmse=%s psd=%s z2=%s edge=%.2f r=%.2f a=%.2f(%.2f) se=%.2f ab=%.2f aa=%.2f a/1k=%.2f' % (\n            r['name'], r['count'], r['mae_ticks'], r['mae_se'], r['bias_ticks'], r['rmse_ticks'], r['belief_sd_ticks'], r['outside_share'], r['outside_se'], r['width_ticks'],\n            r['mae_midpoint_ticks'], r['skill_vs_midpoint'], r['mae_next_vs_phat_ticks'], r['mae_next_vs_prev_truth_ticks'], r['nojump_rmse_next_vs_phat_ticks'], r['nojump_pred_sd_ticks'], r['nojump_mean_z2'],\n            r['edge_mean'], r['retail_mean'], r['arb_mean'], r['arb_se'], r['se'], r['arb_bid_mean'], r['arb_ask_mean'], r['arb_per_1000_steps']),\n              'cf: true=%.4f wid=%.2f mid=%.3f clip=%.3f out=%.4f' % (r['cf_crossing_true_share'], r['cf_width_ticks'], r['cf_mae_midpoint_ticks'], r['cf_mae_phat_clipped_ticks'], r['cf_outside_share']))\n\n\nif __name__ == '__main__':\n    a = sys.argv\n    if a[1] in ('plain', 'inst'):\n        main_run(a[1], a[2], a[3], int(a[4]), int(a[5]), a[6])\n    else:\n        i = a.index('--')\n        agg(a[2], a[3:i], a[i + 1:])\n","code_sha256":"f9e0f7fce696f8a3e553cc3e33609e5a8a01681c04bc556b0c69d0214716ade4","incumbent_code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","tuning":null,"seeds":"238000..238999","n":1000,"complete":true,"incumbent":{"mean":100.884795,"retail_mean":128.076243,"arb_mean":-27.191448,"se":5.388729},"findings":[{"name":"ALL","count":2000000,"edge_mean":100.8848,"retail_mean":128.0762,"arb_mean":-27.1914,"se":5.3887,"arb_se":1.7967,"arb_bid":-14.5948,"arb_ask":-12.5967,"mae":0.3029,"mae_se":0.0015,"bias":-0.0184,"out":0.00351,"out_se":8e-05,"width":1.2709,"mae_mid":0.3267,"next_phat":0.6334,"next_truth":0.5238,"cf_true":0.99662,"cf_width":1.143,"cf_mae_mid":0.3099,"cf_mae_clip":0.2698,"cf_out":0.00452,"z2_next_nojump":1.0513},{"name":"p_prev_ticks[50,80)","count":521181,"edge_mean":4.5524,"retail_mean":6.3643,"arb_mean":-1.812,"se":0.248,"arb_se":0.093,"arb_bid":-1.0396,"arb_ask":-0.7724,"mae":0.3418,"mae_se":0.0011,"bias":-0.0087,"out":0.00394,"out_se":0.00017,"width":1.3412,"mae_mid":0.3276,"next_phat":0.8314,"next_truth":0.7435},{"name":"p_prev_ticks[20,50)","count":551607,"edge_mean":9.6774,"retail_mean":12.8015,"arb_mean":-3.1241,"se":0.5134,"arb_se":0.1705,"arb_bid":-1.5028,"arb_ask":-1.6213,"mae":0.3416,"mae_se":0.0011,"bias":0.0095,"out":0.00368,"out_se":0.00017,"width":1.3415,"mae_mid":0.3269,"next_phat":0.8219,"next_truth":0.7334},{"name":"p_prev_ticks[80,90)","count":139683,"edge_mean":0.956,"retail_mean":1.3024,"arb_mean":-0.3465,"se":0.0765,"arb_se":0.0337,"arb_bid":-0.213,"arb_ask":-0.1334,"mae":0.3122,"mae_se":0.0019,"bias":-0.0307,"out":0.00347,"out_se":0.0002,"width":1.2832,"mae_mid":0.3094,"next_phat":0.6475,"next_truth":0.5545},{"name":"p_prev_ticks[90,95)","count":76270,"edge_mean":0.5763,"retail_mean":0.7073,"arb_mean":-0.131,"se":0.0487,"arb_se":0.0142,"arb_bid":-0.0796,"arb_ask":-0.0514,"mae":0.2638,"mae_se":0.002,"bias":-0.0368,"out":0.00498,"out_se":0.00034,"width":1.2166,"mae_mid":0.2927,"next_phat":0.4422,"next_truth":0.3438},{"name":"p_prev_ticks[95,98)","count":61552,"edge_mean":0.4958,"retail_mean":0.5871,"arb_mean":-0.0913,"se":0.044,"arb_se":0.0159,"arb_bid":-0.0581,"arb_ask":-0.0332,"mae":0.2196,"mae_se":0.0017,"bias":-0.0463,"out":0.00398,"out_se":0.00036,"width":1.1625,"mae_mid":0.2855,"next_phat":0.3049,"next_truth":0.1958},{"name":"p_prev_ticks[98,99)","count":35066,"edge_mean":0.3011,"retail_mean":0.3436,"arb_mean":-0.0425,"se":0.0285,"arb_se":0.0141,"arb_bid":-0.0285,"arb_ask":-0.014,"mae":0.198,"mae_se":0.0021,"bias":-0.0684,"out":0.0014,"out_se":0.00024,"width":1.1393,"mae_mid":0.2876,"next_phat":0.2272,"next_truth":0.095},{"name":"p_prev_ticks[99,99.5)","count":26882,"edge_mean":0.2149,"retail_mean":0.2382,"arb_mean":-0.0233,"se":0.0213,"arb_se":0.0087,"arb_bid":-0.0168,"arb_ask":-0.0066,"mae":0.1481,"mae_se":0.0024,"bias":0.1127,"out":0.00156,"out_se":0.00026,"width":1.205,"mae_mid":0.2757,"next_phat":0.1567,"next_truth":0.051},{"name":"p_prev_ticks[99.5,99.9)","count":41039,"edge_mean":0.4089,"retail_mean":0.4439,"arb_mean":-0.035,"se":0.0366,"arb_se":0.0165,"arb_bid":-0.0201,"arb_ask":-0.0149,"mae":0.2424,"mae_se":0.0035,"bias":-0.2424,"out":0.00061,"out_se":0.00013,"width":1.1782,"mae_mid":0.3195,"next_phat":0.2498,"next_truth":0.0237},{"name":"p_prev_ticks[99.9,100]","count":62292,"edge_mean":0.7401,"retail_mean":0.7636,"arb_mean":-0.0235,"se":0.0742,"arb_se":0.0045,"arb_bid":-0.0,"arb_ask":-0.0235,"mae":0.4901,"mae_se":0.001,"bias":-0.4901,"out":0.00136,"out_se":0.00016,"width":1.1987,"mae_mid":0.5811,"next_phat":0.4906,"next_truth":0.002},{"name":"p_prev_ticks[2,5)","count":70805,"edge_mean":4.8687,"retail_mean":13.4162,"arb_mean":-8.5475,"se":1.2257,"arb_se":1.0612,"arb_bid":-4.4678,"arb_ask":-4.0797,"mae":0.2193,"mae_se":0.0016,"bias":0.0485,"out":0.00417,"out_se":0.0003,"width":1.1521,"mae_mid":0.2874,"next_phat":0.3044,"next_truth":0.1968},{"name":"p_prev_ticks[1,2)","count":37145,"edge_mean":5.416,"retail_mean":10.7546,"arb_mean":-5.3386,"se":1.1321,"arb_se":0.796,"arb_bid":-3.7347,"arb_ask":-1.6039,"mae":0.2008,"mae_se":0.0022,"bias":0.0646,"out":0.00716,"out_se":0.00061,"width":1.165,"mae_mid":0.3092,"next_phat":0.2322,"next_truth":0.0974},{"name":"p_prev_ticks[0.5,1)","count":28267,"edge_mean":8.6049,"retail_mean":9.9174,"arb_mean":-1.3125,"se":0.8836,"arb_se":0.4433,"arb_bid":-0.3284,"arb_ask":-0.9841,"mae":0.2258,"mae_se":0.0051,"bias":-0.1967,"out":0.00124,"out_se":0.00025,"width":1.0202,"mae_mid":0.2303,"next_phat":0.2314,"next_truth":0.0534},{"name":"p_prev_ticks[0.25,0.5)","count":20257,"edge_mean":9.388,"retail_mean":9.6266,"arb_mean":-0.2386,"se":0.8597,"arb_se":0.0632,"arb_bid":-0.1948,"arb_ask":-0.0438,"mae":0.1472,"mae_se":0.0037,"bias":-0.0675,"out":0.0003,"out_se":0.00012,"width":1.0014,"mae_mid":0.1361,"next_phat":0.1473,"next_truth":0.0281},{"name":"p_prev_ticks[0.1,0.25)","count":19604,"edge_mean":9.4078,"retail_mean":9.7938,"arb_mean":-0.3859,"se":0.7848,"arb_se":0.1716,"arb_bid":-0.1169,"arb_ask":-0.2691,"mae":0.1114,"mae_se":0.0044,"bias":0.0301,"out":0.0002,"out_se":0.0001,"width":1.0003,"mae_mid":0.3331,"next_phat":0.1122,"next_truth":0.0155},{"name":"p_prev_ticks[0,0.1)","count":65495,"edge_mean":32.4707,"retail_mean":34.7601,"arb_mean":-2.2894,"se":2.752,"arb_se":0.8667,"arb_bid":-1.4273,"arb_ask":-0.8621,"mae":0.0813,"mae_se":0.0034,"bias":0.0784,"out":0.00072,"out_se":0.00012,"width":1.0003,"mae_mid":0.479,"next_phat":0.0823,"next_truth":0.0029},{"name":"p_prev_ticks[10,20)","count":156685,"edge_mean":6.6506,"retail_mean":8.3942,"arb_mean":-1.7437,"se":0.519,"arb_se":0.1794,"arb_bid":-0.6464,"arb_ask":-1.0973,"mae":0.3063,"mae_se":0.0017,"bias":0.028,"out":0.00331,"out_se":0.00019,"width":1.2813,"mae_mid":0.3077,"next_phat":0.6274,"next_truth":0.5346},{"name":"p_prev_ticks[5,10)","count":86170,"edge_mean":6.1553,"retail_mean":7.8614,"arb_mean":-1.7061,"se":0.5691,"arb_se":0.2253,"arb_bid":-0.7201,"arb_ask":-0.986,"mae":0.2628,"mae_se":0.002,"bias":0.0391,"out":0.00525,"out_se":0.00032,"width":1.2078,"mae_mid":0.2926,"next_phat":0.4466,"next_truth":0.3492},{"name":"since_jump:none_yet","count":544203,"edge_mean":12.3201,"retail_mean":15.2091,"arb_mean":-2.8889,"se":1.177,"arb_se":0.1755,"arb_bid":-1.6917,"arb_ask":-1.1972,"mae":0.3201,"mae_se":0.0015,"bias":-0.0035,"out":0.00414,"out_se":0.00014,"width":1.307,"mae_mid":0.3181,"next_phat":0.6559,"next_truth":0.5588},{"name":"since_jump:0","count":3903,"edge_mean":-0.1252,"retail_mean":0.2837,"arb_mean":-0.4088,"se":0.088,"arb_se":0.0719,"arb_bid":-0.3256,"arb_ask":-0.0832,"mae":0.3665,"mae_se":0.0076,"bias":-0.0168,"out":0.01435,"out_se":0.00189,"width":1.1694,"mae_mid":0.3359,"next_phat":0.6763,"next_truth":0.4852,"z2_next_nojump":4.414},{"name":"since_jump:1","count":3894,"edge_mean":0.0685,"retail_mean":0.1499,"arb_mean":-0.0813,"se":0.0366,"arb_se":0.0317,"arb_bid":-0.0679,"arb_ask":-0.0134,"mae":0.3338,"mae_se":0.0053,"bias":-0.0063,"out":0.00462,"out_se":0.00108,"width":1.3297,"mae_mid":0.3424,"next_phat":0.6402,"next_truth":0.4959},{"name":"since_jump:2","count":3883,"edge_mean":0.2764,"retail_mean":0.3377,"arb_mean":-0.0613,"se":0.0712,"arb_se":0.0291,"arb_bid":-0.0306,"arb_ask":-0.0307,"mae":0.3125,"mae_se":0.0046,"bias":-0.0033,"out":0.00155,"out_se":0.00063,"width":1.2908,"mae_mid":0.3309,"next_phat":0.6299,"next_truth":0.5001},{"name":"since_jump:3-5","count":11583,"edge_mean":0.6027,"retail_mean":0.6732,"arb_mean":-0.0705,"se":0.0748,"arb_se":0.0183,"arb_bid":-0.0384,"arb_ask":-0.0321,"mae":0.3045,"mae_se":0.0031,"bias":-0.024,"out":0.00268,"out_se":0.00047,"width":1.2767,"mae_mid":0.3316,"next_phat":0.6222,"next_truth":0.5025},{"name":"since_jump:6-10","count":19073,"edge_mean":0.9946,"retail_mean":1.2258,"arb_mean":-0.2312,"se":0.1299,"arb_se":0.0527,"arb_bid":-0.1358,"arb_ask":-0.0954,"mae":0.2967,"mae_se":0.0028,"bias":-0.0159,"out":0.00241,"out_se":0.00036,"width":1.2585,"mae_mid":0.3247,"next_phat":0.613,"next_truth":0.5011},{"name":"since_jump:11-30","count":73672,"edge_mean":4.1776,"retail_mean":4.8301,"arb_mean":-0.6525,"se":0.3087,"arb_se":0.0654,"arb_bid":-0.4723,"arb_ask":-0.1802,"mae":0.2986,"mae_se":0.0023,"bias":-0.0185,"out":0.00328,"out_se":0.00025,"width":1.2563,"mae_mid":0.3265,"next_phat":0.6253,"next_truth":0.5099},{"name":"since_jump:31-100","count":228053,"edge_mean":12.5752,"retail_mean":15.9802,"arb_mean":-3.4049,"se":1.0128,"arb_se":0.4703,"arb_bid":-1.8279,"arb_ask":-1.5771,"mae":0.2984,"mae_se":0.0021,"bias":-0.0206,"out":0.00351,"out_se":0.00016,"width":1.2618,"mae_mid":0.3288,"next_phat":0.6189,"next_truth":0.5047},{"name":"since_jump:101-300","count":462687,"edge_mean":27.2713,"retail_mean":33.8133,"arb_mean":-6.5419,"se":1.8626,"arb_se":0.6927,"arb_bid":-3.9222,"arb_ask":-2.6198,"mae":0.297,"mae_se":0.0021,"bias":-0.023,"out":0.00338,"out_se":0.00012,"width":1.2589,"mae_mid":0.3288,"next_phat":0.61,"next_truth":0.4957},{"name":"since_jump:301-inf","count":649049,"edge_mean":42.7235,"retail_mean":55.5735,"arb_mean":-12.85,"se":3.361,"arb_se":1.4806,"arb_bid":-6.0825,"arb_ask":-6.7675,"mae":0.2942,"mae_se":0.0026,"bias":-0.0269,"out":0.00309,"out_se":0.00011,"width":1.2546,"mae_mid":0.3315,"next_phat":0.6376,"next_truth":0.5243},{"name":"next_step:no_jump","count":1996095,"edge_mean":114.3422,"retail_mean":127.7889,"arb_mean":-13.4467,"se":5.3156,"arb_se":0.5864,"arb_bid":-10.1226,"arb_ask":-3.3241,"mae":0.3028,"mae_se":0.0015,"bias":-0.0184,"out":0.00351,"out_se":8e-05,"width":1.2709,"mae_mid":0.3267,"next_phat":0.6162,"next_truth":0.5065},{"name":"next_step:jump>=1tick","count":3106,"edge_mean":-13.0095,"retail_mean":0.1918,"arb_mean":-13.2013,"se":1.6029,"arb_se":1.6042,"arb_bid":-3.939,"arb_ask":-9.2623,"mae":0.3217,"mae_se":0.0051,"bias":-0.0033,"out":0.00515,"out_se":0.00127,"width":1.3039,"mae_mid":0.3245,"next_phat":11.6839,"next_truth":11.6767},{"name":"next_step:jump<1tick","count":799,"edge_mean":-0.448,"retail_mean":0.0955,"arb_mean":-0.5434,"se":0.3136,"arb_se":0.3127,"arb_bid":-0.5332,"arb_ask":-0.0103,"mae":0.2594,"mae_se":0.0087,"bias":-0.108,"out":0.00501,"out_se":0.00249,"width":1.1439,"mae_mid":0.3681,"next_phat":0.4228,"next_truth":0.2913},{"name":"zone_x_next:p[20,80),no_jump","count":1070683,"edge_mean":16.5921,"retail_mean":19.0983,"arb_mean":-2.5062,"se":0.6221,"arb_se":0.0918,"arb_bid":-1.2535,"arb_ask":-1.2527,"mae":0.3417,"mae_se":0.0009,"bias":0.0006,"out":0.0038,"out_se":0.00012,"width":1.3413,"mae_mid":0.3272,"next_phat":0.8036,"next_truth":0.7152},{"name":"zone_x_next:p[20,80),jump","count":2105,"edge_mean":-2.3624,"retail_mean":0.0676,"arb_mean":-2.43,"se":0.1622,"arb_se":0.163,"arb_bid":-1.2889,"arb_ask":-1.141,"mae":0.3493,"mae_se":0.0068,"bias":-0.0002,"out":0.00618,"out_se":0.00169,"width":1.361,"mae_mid":0.3374,"next_phat":12.5164,"next_truth":12.498},{"name":"zone_x_next:p[80,95),no_jump","count":215539,"edge_mean":1.7481,"retail_mean":1.9923,"arb_mean":-0.2441,"se":0.1106,"arb_se":0.0136,"arb_bid":-0.1147,"arb_ask":-0.1294,"mae":0.2951,"mae_se":0.0019,"bias":-0.0329,"out":0.00401,"out_se":0.0002,"width":1.2598,"mae_mid":0.3035,"next_phat":0.5594,"next_truth":0.4643},{"name":"zone_x_next:p[95,100],no_jump","count":226355,"edge_mean":2.2688,"retail_mean":2.372,"arb_mean":-0.1032,"se":0.1497,"arb_se":0.0078,"arb_bid":-0.0168,"arb_ask":-0.0863,"mae":0.2862,"mae_se":0.0042,"bias":-0.1882,"out":0.00196,"out_se":0.00014,"width":1.1767,"mae_mid":0.372,"next_phat":0.3112,"next_truth":0.0733},{"name":"zone_x_next:p[95,100],jump","count":476,"edge_mean":-0.108,"retail_mean":0.0044,"arb_mean":-0.1124,"se":0.0276,"arb_se":0.0276,"arb_bid":-0.1066,"arb_ask":-0.0058,"mae":0.3025,"mae_se":0.0088,"bias":-0.2191,"out":0.0042,"out_se":0.00296,"width":1.1828,"mae_mid":0.3764,"next_phat":2.7949,"next_truth":2.6597},{"name":"zone_x_next:p[80,95),jump","count":414,"edge_mean":-0.2159,"retail_mean":0.0175,"arb_mean":-0.2333,"se":0.0341,"arb_se":0.0335,"arb_bid":-0.1779,"arb_ask":-0.0554,"mae":0.2943,"mae_se":0.0124,"bias":-0.0222,"out":0.00242,"out_se":0.00241,"width":1.2126,"mae_mid":0.2988,"next_phat":8.7078,"next_truth":8.7052},{"name":"zone_x_next:p[1,5),no_jump","count":107722,"edge_mean":17.2493,"retail_mean":24.0935,"arb_mean":-6.8442,"se":1.5015,"arb_se":0.3732,"arb_bid":-5.773,"arb_ask":-1.0712,"mae":0.2129,"mae_se":0.0015,"bias":0.054,"out":0.0052,"out_se":0.00031,"width":1.1565,"mae_mid":0.2949,"next_phat":0.2687,"next_truth":0.1515},{"name":"zone_x_next:p<1,no_jump","count":133370,"edge_mean":61.8368,"retail_mean":64.0217,"arb_mean":-2.1849,"se":3.9495,"arb_se":0.3195,"arb_bid":-2.0667,"arb_ask":-0.1182,"mae":0.1263,"mae_se":0.0027,"bias":-0.009,"out":0.00069,"out_se":8e-05,"width":1.0047,"mae_mid":0.353,"next_phat":0.1265,"next_truth":0.0175},{"name":"zone_x_next:p[5,20),no_jump","count":242426,"edge_mean":14.6471,"retail_mean":16.2112,"arb_mean":-1.5641,"se":0.9576,"arb_se":0.0873,"arb_bid":-0.8978,"arb_ask":-0.6663,"mae":0.2909,"mae_se":0.0018,"bias":0.0319,"out":0.00399,"out_se":0.00018,"width":1.2553,"mae_mid":0.3023,"next_phat":0.5483,"next_truth":0.4537},{"name":"zone_x_next:p[5,20),jump","count":429,"edge_mean":-1.8412,"retail_mean":0.0444,"arb_mean":-1.8856,"se":0.2679,"arb_se":0.2696,"arb_bid":-0.4686,"arb_ask":-1.417,"mae":0.2933,"mae_se":0.0099,"bias":0.0255,"out":0.00699,"out_se":0.00397,"width":1.2028,"mae_mid":0.3061,"next_phat":9.007,"next_truth":8.993},{"name":"zone_x_next:p<1,jump","count":253,"edge_mean":-1.9654,"retail_mean":0.0761,"arb_mean":-2.0415,"se":0.9471,"arb_se":0.9466,"arb_bid":-0.0006,"arb_ask":-2.0409,"mae":0.1175,"mae_se":0.0083,"bias":-0.0147,"out":0.0,"out_se":0.0,"width":1.0,"mae_mid":0.3487,"next_phat":0.9712,"next_truth":0.9345},{"name":"zone_x_next:p[1,5),jump","count":228,"edge_mean":-6.9646,"retail_mean":0.0773,"arb_mean":-7.0419,"se":1.2693,"arb_se":1.2693,"arb_bid":-2.4295,"arb_ask":-4.6125,"mae":0.2182,"mae_se":0.011,"bias":0.0447,"out":0.00439,"out_se":0.00438,"width":1.1623,"mae_mid":0.3044,"next_phat":5.4203,"next_truth":5.3859},{"name":"abs_err_ticks[0,0.1)","count":434472,"edge_mean":48.1555,"retail_mean":53.5188,"arb_mean":-5.3634,"se":3.0385,"arb_se":1.0146,"arb_bid":-2.3875,"arb_ask":-2.9759,"mae":0.0494,"mae_se":0.0001,"bias":0.0037,"out":0.00014,"out_se":2e-05,"width":1.0649,"mae_mid":0.1702,"next_phat":0.4383,"next_truth":0.4276},{"name":"abs_err_ticks[0.25,0.5)","count":737536,"edge_mean":20.4827,"retail_mean":30.5581,"arb_mean":-10.0754,"se":1.58,"arb_se":1.0631,"arb_bid":-5.1018,"arb_ask":-4.9737,"mae":0.3661,"mae_se":0.0005,"bias":-0.036,"out":0.00075,"out_se":4e-05,"width":1.1736,"mae_mid":0.3639,"next_phat":0.6777,"next_truth":0.5514},{"name":"abs_err_ticks[0.1,0.25)","count":556774,"edge_mean":31.3813,"retail_mean":37.2035,"arb_mean":-5.8223,"se":1.7726,"arb_se":0.6439,"arb_bid":-3.0868,"arb_ask":-2.7355,"mae":0.1737,"mae_se":0.0001,"bias":-0.0022,"out":0.00017,"out_se":2e-05,"width":1.0902,"mae_mid":0.2191,"next_phat":0.5491,"next_truth":0.5087},{"name":"abs_err_ticks[0.5,1)","count":215410,"edge_mean":1.6238,"retail_mean":5.5409,"arb_mean":-3.9171,"se":0.4712,"arb_se":0.4454,"arb_bid":-2.657,"arb_ask":-1.2601,"mae":0.6716,"mae_se":0.0019,"bias":-0.0492,"out":0.01218,"out_se":0.00041,"width":2.0789,"mae_mid":0.5746,"next_phat":0.8825,"next_truth":0.6019},{"name":"abs_err_ticks[1,2)","count":52759,"edge_mean":-0.0351,"retail_mean":1.1812,"arb_mean":-1.2163,"se":0.1063,"arb_se":0.0939,"arb_bid":-0.8301,"arb_ask":-0.3863,"mae":1.2338,"mae_se":0.0026,"bias":-0.0069,"out":0.0475,"out_se":0.00143,"width":2.821,"mae_mid":1.104,"next_phat":1.3724,"next_truth":0.7469},{"name":"abs_err_ticks[2,inf)","count":3049,"edge_mean":-0.7234,"retail_mean":0.0736,"arb_mean":-0.7969,"se":0.0972,"arb_se":0.0981,"arb_bid":-0.5316,"arb_ask":-0.2653,"mae":2.5623,"mae_se":0.0238,"bias":0.128,"out":0.38865,"out_se":0.01395,"width":3.2709,"mae_mid":2.3021,"next_phat":2.6861,"next_truth":0.9158},{"name":"truth:inside","count":1992979,"edge_mean":101.4018,"retail_mean":127.7717,"arb_mean":-26.3699,"se":5.4037,"arb_se":1.7831,"arb_bid":-14.0678,"arb_ask":-12.3021,"mae":0.2994,"mae_se":0.0015,"bias":-0.0184,"out":0.0,"out_se":0.0,"width":1.2712,"mae_mid":0.3227,"next_phat":0.6306,"next_truth":0.5236},{"name":"truth:below_lo","count":3435,"edge_mean":-0.3903,"retail_mean":0.1386,"arb_mean":-0.5289,"se":0.0861,"arb_se":0.0866,"arb_bid":-0.5258,"arb_ask":-0.0031,"mae":1.3293,"mae_se":0.0241,"bias":1.3269,"out":1.0,"out_se":0.0,"width":1.193,"mae_mid":1.4819,"next_phat":1.4272,"next_truth":0.5867},{"name":"truth:above_hi","count":3586,"edge_mean":-0.1267,"retail_mean":0.166,"arb_mean":-0.2926,"se":0.0525,"arb_se":0.043,"arb_bid":-0.0012,"arb_ask":-0.2914,"mae":1.2627,"mae_se":0.0215,"bias":-1.2627,"out":1.0,"out_se":0.0,"width":1.2114,"mae_mid":1.4174,"next_phat":1.388,"next_truth":0.5658},{"name":"outside_cause:new_after_own_retail_fill","count":4451,"edge_mean":-0.4441,"retail_mean":0.2375,"arb_mean":-0.6816,"se":0.1009,"arb_se":0.0969,"arb_bid":-0.4587,"arb_ask":-0.2228,"mae":1.1899,"mae_se":0.0225,"bias":-0.0337,"out":1.0,"out_se":0.0,"width":1.3179,"mae_mid":1.3804,"next_phat":1.2539,"next_truth":0.4497},{"name":"outside_cause:new_no_own_retail_fill","count":2340,"edge_mean":-0.0533,"retail_mean":0.0622,"arb_mean":-0.1155,"se":0.0259,"arb_se":0.0249,"arb_bid":-0.056,"arb_ask":-0.0595,"mae":1.5228,"mae_se":0.027,"bias":0.0872,"out":1.0,"out_se":0.0,"width":0.9996,"mae_mid":1.6121,"next_phat":1.7257,"next_truth":0.8259},{"name":"outside_cause:still_outside_from_prev_step","count":230,"edge_mean":-0.0196,"retail_mean":0.0048,"arb_mean":-0.0245,"se":0.0075,"arb_se":0.0074,"arb_bid":-0.0123,"arb_ask":-0.0122,"mae":1.0205,"mae_se":0.061,"bias":-0.1056,"out":1.0,"out_se":0.0,"width":1.0304,"mae_mid":1.1158,"next_phat":1.1327,"next_truth":0.4799},{"name":"width_ticks:(2,4]","count":86179,"edge_mean":1.5427,"retail_mean":3.2675,"arb_mean":-1.7248,"se":0.2255,"arb_se":0.1788,"arb_bid":-1.0295,"arb_ask":-0.6953,"mae":0.7192,"mae_se":0.0061,"bias":-0.0275,"out":0.00436,"out_se":0.00028,"width":3.4212,"mae_mid":1.0118,"next_phat":0.9165,"next_truth":0.5706},{"name":"width_ticks:<=1","count":1631709,"edge_mean":97.4874,"retail_mean":119.1879,"arb_mean":-21.7004,"se":5.3107,"arb_se":1.6975,"arb_bid":-10.6943,"arb_ask":-11.0061,"mae":0.2302,"mae_se":0.001,"bias":-0.0208,"out":0.00364,"out_se":9e-05,"width":0.9998,"mae_mid":0.2677,"next_phat":0.5724,"next_truth":0.4943},{"name":"width_ticks:(1,2]","count":265657,"edge_mean":1.2109,"retail_mean":4.592,"arb_mean":-3.381,"se":0.3063,"arb_se":0.2752,"arb_bid":-2.594,"arb_ask":-0.787,"mae":0.5775,"mae_se":0.0018,"bias":-0.0022,"out":0.00249,"out_se":0.00016,"width":2.0,"mae_mid":0.3899,"next_phat":0.8875,"next_truth":0.6815},{"name":"width_ticks:>4","count":16455,"edge_mean":0.6437,"retail_mean":1.0289,"arb_mean":-0.3852,"se":0.0895,"arb_se":0.0447,"arb_bid":-0.2769,"arb_ask":-0.1083,"mae":0.8913,"mae_se":0.0142,"bias":0.0056,"out":0.00286,"out_se":0.00045,"width":5.1234,"mae_mid":1.5631,"next_phat":1.0926,"next_truth":0.6502},{"name":"interior_nojump_width_ticks:(2,4]","count":71756,"edge_mean":1.2924,"retail_mean":1.9013,"arb_mean":-0.6088,"se":0.0847,"arb_se":0.0269,"arb_bid":-0.3045,"arb_ask":-0.3044,"mae":0.7891,"mae_se":0.0044,"bias":0.0014,"out":0.00426,"out_se":0.00029,"width":3.4136,"mae_mid":0.9523,"next_phat":0.9993,"next_truth":0.6453},{"name":"interior_nojump_width_ticks:<=1","count":1192614,"edge_mean":27.9514,"retail_mean":31.0053,"arb_mean":-3.0539,"se":1.1271,"arb_se":0.0957,"arb_bid":-1.65,"arb_ask":-1.4039,"mae":0.237,"mae_se":0.0003,"bias":0.0004,"out":0.00422,"out_se":0.00011,"width":0.9999,"mae_mid":0.2529,"next_phat":0.673,"next_truth":0.6261},{"name":"interior_nojump_width_ticks:(1,2]","count":249610,"edge_mean":3.2134,"retail_mean":3.6963,"arb_mean":-0.4829,"se":0.1288,"arb_se":0.0262,"arb_bid":-0.2271,"arb_ask":-0.2558,"mae":0.5878,"mae_se":0.0017,"bias":0.0022,"out":0.00212,"out_se":0.00015,"width":2.0,"mae_mid":0.3878,"next_phat":0.8921,"next_truth":0.6918},{"name":"interior_nojump_width_ticks:>4","count":14668,"edge_mean":0.53,"retail_mean":0.6988,"arb_mean":-0.1688,"se":0.0508,"arb_se":0.0151,"arb_bid":-0.0844,"arb_ask":-0.0843,"mae":0.9511,"mae_se":0.0122,"bias":0.0108,"out":0.00232,"out_se":0.00043,"width":5.1379,"mae_mid":1.5181,"next_phat":1.1502,"next_truth":0.6894},{"name":"comp_quote:no_retreat","count":1715754,"edge_mean":100.2169,"retail_mean":122.8159,"arb_mean":-22.599,"se":5.4224,"arb_se":1.7119,"arb_bid":-11.2791,"arb_ask":-11.3199,"mae":0.2545,"mae_se":0.0012,"bias":-0.0219,"out":0.00169,"out_se":5e-05,"width":1.1669,"mae_mid":0.312,"next_phat":0.5605,"next_truth":0.4686,"cf_true":1.0,"cf_width":1.1669,"cf_mae_mid":0.312,"cf_mae_clip":0.2545,"cf_out":0.00169},{"name":"comp_quote:bid_down_1tick","count":113444,"edge_mean":-0.1868,"retail_mean":2.608,"arb_mean":-2.7948,"se":0.2437,"arb_se":0.2256,"arb_bid":-2.5813,"arb_ask":-0.2135,"mae":0.6675,"mae_se":0.0023,"bias":0.6526,"out":0.00414,"out_se":0.00026,"width":2.131,"mae_mid":0.4326,"next_phat":0.9733,"next_truth":0.7209,"cf_true":0.98515,"cf_width":1.0,"cf_mae_mid":0.2828,"cf_mae_clip":0.372,"cf_out":0.01217},{"name":"comp_quote:ask_up_1tick","count":112699,"edge_mean":1.0493,"retail_mean":1.8243,"arb_mean":-0.775,"se":0.1182,"arb_se":0.0981,"arb_bid":-0.1624,"arb_ask":-0.6126,"mae":0.6653,"mae_se":0.0023,"bias":-0.6509,"out":0.00417,"out_se":0.00026,"width":2.127,"mae_mid":0.432,"next_phat":0.9773,"next_truth":0.7294,"cf_true":0.98307,"cf_width":0.9997,"cf_mae_mid":0.2835,"cf_mae_clip":0.3731,"cf_out":0.01399},{"name":"comp_quote:bid_down_>1tick","count":29087,"edge_mean":0.0009,"retail_mean":0.4777,"arb_mean":-0.4769,"se":0.0765,"arb_se":0.0696,"arb_bid":-0.0416,"arb_ask":-0.4353,"mae":0.3112,"mae_se":0.0041,"bias":-0.1103,"out":0.05267,"out_se":0.00251,"width":1.004,"mae_mid":0.3463,"next_phat":1.4604,"next_truth":1.3772,"cf_true":0.94754,"cf_width":0.9974,"cf_mae_mid":0.3491,"cf_mae_clip":0.3155,"cf_out":0.05267},{"name":"comp_quote:ask_up_>1tick","count":29012,"edge_mean":-0.1955,"retail_mean":0.3502,"arb_mean":-0.5457,"se":0.0848,"arb_se":0.0836,"arb_bid":-0.5304,"arb_ask":-0.0154,"mae":0.3183,"mae_se":0.0047,"bias":0.1167,"out":0.05687,"out_se":0.00265,"width":1.0045,"mae_mid":0.3528,"next_phat":1.4493,"next_truth":1.3613,"cf_true":0.94344,"cf_width":0.9969,"cf_mae_mid":0.3557,"cf_mae_clip":0.3223,"cf_out":0.05687},{"name":"regime:interior","count":1749375,"edge_mean":38.8688,"retail_mean":62.8099,"arb_mean":-23.9411,"se":2.5871,"arb_se":1.456,"arb_bid":-13.5732,"arb_ask":-10.3679,"mae":0.3143,"mae_se":0.0012,"bias":-0.0013,"out":0.00385,"out_se":9e-05,"width":1.3098,"mae_mid":0.3232,"next_phat":0.6917,"next_truth":0.5961,"z2_next_nojump":1.0237},{"name":"regime:lo>=99","count":117375,"edge_mean":1.2164,"retail_mean":1.2765,"arb_mean":-0.0601,"se":0.0965,"arb_se":0.0184,"arb_bid":-0.0359,"arb_ask":-0.0242,"mae":0.3353,"mae_se":0.0056,"bias":-0.2797,"out":4e-05,"out_se":2e-05,"width":1.0,"mae_mid":0.3482,"next_phat":0.3396,"next_truth":0.0188,"z2_next_nojump":1.9595},{"name":"regime:tb>0 (hi<=1, decay)","count":133250,"edge_mean":60.7996,"retail_mean":63.9898,"arb_mean":-3.1903,"se":4.1056,"arb_se":0.9659,"arb_bid":-0.9857,"arb_ask":-2.2046,"mae":0.1244,"mae_se":0.0027,"bias":-0.0125,"out":0.00212,"out_se":0.00019,"width":0.9992,"mae_mid":0.3533,"next_phat":0.1261,"next_truth":0.0191,"z2_next_nojump":0.6149},{"name":"below_tick1_for_steps:1-10","count":10806,"edge_mean":3.1581,"retail_mean":3.493,"arb_mean":-0.3349,"se":0.3364,"arb_se":0.2158,"arb_bid":-0.0272,"arb_ask":-0.3077,"mae":0.1677,"mae_se":0.0048,"bias":-0.0922,"out":0.01879,"out_se":0.00166,"width":0.9939,"mae_mid":0.3268,"next_phat":0.1775,"next_truth":0.0634},{"name":"below_tick1_for_steps:11-50","count":22539,"edge_mean":8.4997,"retail_mean":8.8462,"arb_mean":-0.3465,"se":0.5767,"arb_se":0.1463,"arb_bid":-0.0541,"arb_ask":-0.2924,"mae":0.1911,"mae_se":0.0043,"bias":-0.0736,"out":0.00173,"out_se":0.00035,"width":0.9998,"mae_mid":0.2197,"next_phat":0.1924,"next_truth":0.0357},{"name":"below_tick1_for_steps:51-200","count":45085,"edge_mean":21.7666,"retail_mean":22.2671,"arb_mean":-0.5005,"se":1.4133,"arb_se":0.1752,"arb_bid":-0.1673,"arb_ask":-0.3332,"mae":0.1421,"mae_se":0.0043,"bias":-0.0059,"out":0.00022,"out_se":7e-05,"width":0.9998,"mae_mid":0.3143,"next_phat":0.1426,"next_truth":0.0166},{"name":"below_tick1_for_steps:201-inf","count":54820,"edge_mean":27.3752,"retail_mean":29.3836,"arb_mean":-2.0084,"se":2.6785,"arb_se":0.9101,"arb_bid":-0.7371,"arb_ask":-1.2713,"mae":0.0739,"mae_se":0.0035,"bias":0.0229,"out":0.00055,"out_se":0.00011,"width":0.9995,"mae_mid":0.4455,"next_phat":0.0752,"next_truth":0.0056},{"name":"steps_remaining:501-2000","count":1500000,"edge_mean":44.0296,"retail_mean":57.8919,"arb_mean":-13.8622,"se":2.5357,"arb_se":0.8115,"arb_bid":-8.5958,"arb_ask":-5.2665,"mae":0.3102,"mae_se":0.0014,"bias":-0.0019,"out":0.00376,"out_se":9e-05,"width":1.2912,"mae_mid":0.3153,"next_phat":0.6246,"next_truth":0.5266},{"name":"steps_remaining:51-500","count":450000,"edge_mean":48.1672,"retail_mean":59.7775,"arb_mean":-11.6104,"se":3.1438,"arb_se":1.4321,"arb_bid":-5.3084,"arb_ask":-6.3019,"mae":0.2818,"mae_se":0.0033,"bias":-0.0564,"out":0.00276,"out_se":0.00012,"width":1.2171,"mae_mid":0.3527,"next_phat":0.6483,"next_truth":0.5117},{"name":"steps_remaining:1-50","count":50000,"edge_mean":8.688,"retail_mean":10.4069,"arb_mean":-1.7189,"se":0.7165,"arb_se":0.5236,"arb_bid":-0.6906,"arb_ask":-1.0283,"mae":0.2729,"mae_se":0.0055,"bias":-0.1692,"out":0.00264,"out_se":0.00026,"width":1.148,"mae_mid":0.4359,"next_phat":0.76,"next_truth":0.5479,"z2_next_nojump":0.8895}],"paired":null,"failures":0,"seconds_per_simulation":0.794,"seconds_per_simulation_instrumented":0.8513,"identity_check":{"seeds_compared":1000,"mismatches":0,"compared":"total_edge, retail_edge, arb_edge, failed; exact float equality, plain run_batch vs instrumented run_batch","first_20_seeds":"238000..238019, 0 mismatches, run before the full block","max_abs_per_step_sum_minus_reported_edge":5.43149525356057e-09},"steps":2000000,"columns":{"row":"one class of callbacks; a callback at step t is classed by the state B sees at t and credited with the edge of the fills in step t","count":"callbacks in the class over the 1000 simulations","edge_mean":"per-simulation mean of the edge summed over the class's callbacks (retail_mean + arb_mean; a simulation with no such callback counts 0)","se":"standard error of edge_mean across the 1000 simulations; arb_se likewise for arb_mean","arb_bid_arb_ask":"arb_mean split into arbitrageur fills of B's bids and of B's asks","mae":"mean |phat - true previous-step probability| in ticks; mae_se is clustered by simulation; bias is mean(phat - truth)","out":"share of callbacks with the truth outside [lo,hi] (tolerance 1e-7 tick); out_se clustered by simulation","width":"mean hi-lo in ticks","mae_mid":"MAE of (lo+hi)/2 against the same truth","next_phat_next_truth":"mean |p_t - phat| and mean |p_t - p_(t-1)| in ticks, p_t being the probability the arbitrageur uses in this step","cf":"counterfactual bounds on recorded states: lo>=ca-1 if the competitor best ask rose, hi<=cb+1 if its best bid fell. cf_true share of callbacks where every such reading is true; cf_width, cf_mae_mid, cf_mae_clip (phat clipped into the bounds), cf_out as above","z2_next_nojump":"mean of ((p_t - phat)/s)^2 over no-jump steps, s being B's own predictive sd","classes":"p_prev_ticks: true previous-step probability in ticks. since_jump: callbacks since the last process step with at least one jump (0 = first callback after it; none_yet = before the first jump). next_step: whether this callback's own step has a jump and whether it moves p by a tick. zone_x_next: zone of the previous-step truth by jump or not. abs_err_ticks: |phat - truth|. outside_cause: outside callbacks split by whether the previous callback was outside and whether B had a retail fill in the previous step. interior_nojump_width_ticks: width classes for truth in [5,95) ticks on no-jump steps. comp_quote: change of the competitor's best quotes since the previous callback. regime: B's hi<=1 decay branch, lo>=99, or neither. below_tick1_for_steps: B's counter tb. steps_remaining: 2000 - step."},"notes":["The harness is the code field; its collection half (modes plain and inst) is what produced the data, and re-running inst with the final file on seeds 238000..238009 reproduced the per-step record file byte for byte. The aggregation half (mode agg) was extended after collection.","Simulator checkout: git HEAD b244530ee2a6247b5f930830eeca9dd950da0e7e with a clean working tree; Python 3.12.3; serial in-process, no --workers, no --sandbox. Seeds 900000..903999 were not run."]}