{"abstract":"The ITT estimate mixes a per-protocol treatment mean with an intent-to-treat control mean.","category":"Experiment statistics","checks":8,"contract":"Outcome sums cover every assigned user. ITT = outcome_sum_t / assigned_t - outcome_sum_c / assigned_c. Compliance difference = took_t / assigned_t - took_c / assigned_c (control users can cross over). CACE = ITT / compliance difference when that difference is positive, else None. Nonpositive assignment counts -> None. Return [ITT, compliance difference, CACE] rounded to 6.","evaluation_group":"w2-experiment-statistics-complier-effect","failed_approach":"Dividing the combined difference by all assigned users only works for equal arms.","family":"w2-experiment-statistics-complier-effect-itt-denominator","id":"FA-74691","implementations":{"attempt":{"sha256":"54a448cb794c99da43704c9a6e6b91f447fe6b9a777550c01c9d039281d1cb87","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assigned_c, took_c, outcome_sum_c, assigned_t, took_t, outcome_sum_t):\n    if assigned_c <= 0 or assigned_t <= 0:\n        return None\n    itt = (outcome_sum_t - outcome_sum_c) * 2 / (assigned_t + assigned_c)\n    comp = took_t / assigned_t - took_c / assigned_c\n    cace = round(itt / comp, 6) if comp > 0 else None\n    return [round(itt, 6), round(comp, 6), cace]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 1', [200, 22, 428, 400, 23, 389], [-1.1675, -0.0525, None]),\n  ('uptake sample 2', [100, 22, 279, 400, 165, 505], [-1.5275, 0.1925, -7.935065]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633]),\n  ('uptake sample 6', [400, 10, 585, 300, 223, 613], [0.580833, 0.718333, 0.808585]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 10', [100, 28, 259, 100, 20, 38], [-2.21, -0.08, None]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459]),\n  ('uptake sample 18', [200, 43, 285, 300, 21, 666], [0.795, -0.145, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 16', [100, 6, 298, 300, 104, 511], [-1.276667, 0.286667, -4.453488]),\n  ('uptake sample 17', [200, 26, 414, 400, 300, 725], [-0.2575, 0.62, -0.415323]),\n  ('uptake sample 28', [200, 65, 83, 400, 91, 261], [0.2375, -0.0975, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 21', [100, 18, 78, 100, 98, 114], [0.36, 0.8, 0.45]),\n  ('uptake sample 24', [100, 19, 81, 100, 65, 80], [-0.01, 0.46, -0.021739]),\n  ('uptake sample 38', [400, 93, 478, 100, 63, 16], [-1.035, 0.3975, -2.603774])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"bbdb17541d43b5eb66fe64d45462ed239a6a5da5171911ea70c69c50d62c1c32","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assigned_c, took_c, outcome_sum_c, assigned_t, took_t, outcome_sum_t):\n    if assigned_c <= 0 or assigned_t <= 0:\n        return None\n    itt = outcome_sum_t / max(took_t, 1) - outcome_sum_c / assigned_c\n    comp = took_t / assigned_t - took_c / assigned_c\n    cace = round(itt / comp, 6) if comp > 0 else None\n    return [round(itt, 6), round(comp, 6), cace]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 1', [200, 22, 428, 400, 23, 389], [-1.1675, -0.0525, None]),\n  ('uptake sample 2', [100, 22, 279, 400, 165, 505], [-1.5275, 0.1925, -7.935065]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633]),\n  ('uptake sample 6', [400, 10, 585, 300, 223, 613], [0.580833, 0.718333, 0.808585]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 10', [100, 28, 259, 100, 20, 38], [-2.21, -0.08, None]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459]),\n  ('uptake sample 18', [200, 43, 285, 300, 21, 666], [0.795, -0.145, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 16', [100, 6, 298, 300, 104, 511], [-1.276667, 0.286667, -4.453488]),\n  ('uptake sample 17', [200, 26, 414, 400, 300, 725], [-0.2575, 0.62, -0.415323]),\n  ('uptake sample 28', [200, 65, 83, 400, 91, 261], [0.2375, -0.0975, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 21', [100, 18, 78, 100, 98, 114], [0.36, 0.8, 0.45]),\n  ('uptake sample 24', [100, 19, 81, 100, 65, 80], [-0.01, 0.46, -0.021739]),\n  ('uptake sample 38', [400, 93, 478, 100, 63, 16], [-1.035, 0.3975, -2.603774])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"187442bb5def74b8ab2033a09ef77236c52399704355e79781f224a94db96cfd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assigned_c, took_c, outcome_sum_c, assigned_t, took_t, outcome_sum_t):\n    if assigned_c <= 0 or assigned_t <= 0:\n        return None\n    itt = outcome_sum_t / assigned_t - outcome_sum_c / assigned_c\n    comp = took_t / assigned_t - took_c / assigned_c\n    cace = round(itt / comp, 6) if comp > 0 else None\n    return [round(itt, 6), round(comp, 6), cace]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 1', [200, 22, 428, 400, 23, 389], [-1.1675, -0.0525, None]),\n  ('uptake sample 2', [100, 22, 279, 400, 165, 505], [-1.5275, 0.1925, -7.935065]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 3', [100, 11, 241, 400, 240, 17], [-2.3675, 0.49, -4.831633]),\n  ('uptake sample 6', [400, 10, 585, 300, 223, 613], [0.580833, 0.718333, 0.808585]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 10', [100, 28, 259, 100, 20, 38], [-2.21, -0.08, None]),\n  ('uptake sample 11', [400, 10, 635, 100, 93, 173], [0.1425, 0.905, 0.157459]),\n  ('uptake sample 18', [200, 43, 285, 300, 21, 666], [0.795, -0.145, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 16', [100, 6, 298, 300, 104, 511], [-1.276667, 0.286667, -4.453488]),\n  ('uptake sample 17', [200, 26, 414, 400, 300, 725], [-0.2575, 0.62, -0.415323]),\n  ('uptake sample 28', [200, 65, 83, 400, 91, 261], [0.2375, -0.0975, None])],\n [('crossover in control reduces compliance difference', [200, 20, 300, 200, 120, 420], [0.6, 0.5, 1.2]),\n  ('unequal arm sizes', [100, 0, 150, 400, 200, 800], [0.5, 0.5, 1.0]),\n  ('no uptake difference has no CACE', [100, 50, 100, 100, 50, 120], [0.2, 0.0, None]),\n  ('low but positive compliance still yields CACE', [100, 0, 100, 100, 30, 130], [0.3, 0.3, 1.0]),\n  ('negative compliance difference', [100, 60, 100, 100, 40, 90], [-0.1, -0.2, None]),\n  ('uptake sample 21', [100, 18, 78, 100, 98, 114], [0.36, 0.8, 0.45]),\n  ('uptake sample 24', [100, 19, 81, 100, 65, 80], [-0.01, 0.46, -0.021739]),\n  ('uptake sample 38', [400, 93, 478, 100, 63, 16], [-1.035, 0.3975, -2.603774])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic toy experiment-analysis model with a stipulated contract; results are rounded and are not a substitute for a validated statistics package. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-experiment-statistics-complier-effect-itt-denominator","generated_at":"2026-09-29T14:48:59.114158+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Opt-in features have partial uptake; the effect on adopters needs an instrumental-variable estimate.","repair":"Divide each arm's outcome sum by its assigned count.","root_cause":"The treatment mean divides by took_t instead of assigned_t.","sha256":"d7cf678b2160b76fb7943b6dd2d6e9c7319aee84e5af5c7bf90f925faa0e490a","title":"Complier average causal effect: Treatment outcomes are averaged over adopters · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.795,"exit_code":1,"observations":[{"actual":[0.6,0.5,1.2],"check":"crossover in control reduces compliance difference","expected":[0.6,0.5,1.2],"passed":true},{"actual":[2.6,0.5,5.2],"check":"unequal arm sizes","expected":[0.5,0.5,1.0],"passed":false},{"actual":[0.2,0.0,null],"check":"no uptake difference has no CACE","expected":[0.2,0.0,null],"passed":true},{"actual":[0.3,0.3,1.0],"check":"low but positive compliance still yields CACE","expected":[0.3,0.3,1.0],"passed":true},{"actual":[-0.1,-0.2,null],"check":"negative compliance difference","expected":[-0.1,-0.2,null],"passed":true},{"actual":[-0.13,-0.0525,null],"check":"uptake sample 1","expected":[-1.1675,-0.0525,null],"passed":false},{"actual":[0.904,0.1925,4.696104],"check":"uptake sample 2","expected":[-1.5275,0.1925,-7.935065],"passed":false},{"actual":[-0.896,0.49,-1.828571],"check":"uptake sample 3","expected":[-2.3675,0.49,-4.831633],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossover in control reduces compliance difference\", \"actual\": [0.6, 0.5, 1.2], \"expected\": [0.6, 0.5, 1.2], \"passed\": true}, {\"check\": \"unequal arm sizes\", \"actual\": [2.6, 0.5, 5.2], \"expected\": [0.5, 0.5, 1.0], \"passed\": false}, {\"check\": \"no uptake difference has no CACE\", \"actual\": [0.2, 0.0, null], \"expected\": [0.2, 0.0, null], \"passed\": true}, {\"check\": \"low but positive compliance still yields CACE\", \"actual\": [0.3, 0.3, 1.0], \"expected\": [0.3, 0.3, 1.0], \"passed\": true}, {\"check\": \"negative compliance difference\", \"actual\": [-0.1, -0.2, null], \"expected\": [-0.1, -0.2, null], \"passed\": true}, {\"check\": \"uptake sample 1\", \"actual\": [-0.13, -0.0525, null], \"expected\": [-1.1675, -0.0525, null], \"passed\": false}, {\"check\": \"uptake sample 2\", \"actual\": [0.904, 0.1925, 4.696104], \"expected\": [-1.5275, 0.1925, -7.935065], \"passed\": false}, {\"check\": \"uptake sample 3\", \"actual\": [-0.896, 0.49, -1.828571], \"expected\": [-2.3675, 0.49, -4.831633], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.421,"exit_code":1,"observations":[{"actual":[2.0,0.5,4.0],"check":"crossover in control reduces compliance difference","expected":[0.6,0.5,1.2],"passed":false},{"actual":[2.5,0.5,5.0],"check":"unequal arm sizes","expected":[0.5,0.5,1.0],"passed":false},{"actual":[1.4,0.0,null],"check":"no uptake difference has no CACE","expected":[0.2,0.0,null],"passed":false},{"actual":[3.333333,0.3,11.111111],"check":"low but positive compliance still yields CACE","expected":[0.3,0.3,1.0],"passed":false},{"actual":[1.25,-0.2,null],"check":"negative compliance difference","expected":[-0.1,-0.2,null],"passed":false},{"actual":[14.773043,-0.0525,null],"check":"uptake sample 1","expected":[-1.1675,-0.0525,null],"passed":false},{"actual":[0.270606,0.1925,1.405746],"check":"uptake sample 2","expected":[-1.5275,0.1925,-7.935065],"passed":false},{"actual":[-2.339167,0.49,-4.77381],"check":"uptake sample 3","expected":[-2.3675,0.49,-4.831633],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossover in control reduces compliance difference\", \"actual\": [2.0, 0.5, 4.0], \"expected\": [0.6, 0.5, 1.2], \"passed\": false}, {\"check\": \"unequal arm sizes\", \"actual\": [2.5, 0.5, 5.0], \"expected\": [0.5, 0.5, 1.0], \"passed\": false}, {\"check\": \"no uptake difference has no CACE\", \"actual\": [1.4, 0.0, null], \"expected\": [0.2, 0.0, null], \"passed\": false}, {\"check\": \"low but positive compliance still yields CACE\", \"actual\": [3.333333, 0.3, 11.111111], \"expected\": [0.3, 0.3, 1.0], \"passed\": false}, {\"check\": \"negative compliance difference\", \"actual\": [1.25, -0.2, null], \"expected\": [-0.1, -0.2, null], \"passed\": false}, {\"check\": \"uptake sample 1\", \"actual\": [14.773043, -0.0525, null], \"expected\": [-1.1675, -0.0525, null], \"passed\": false}, {\"check\": \"uptake sample 2\", \"actual\": [0.270606, 0.1925, 1.405746], \"expected\": [-1.5275, 0.1925, -7.935065], \"passed\": false}, {\"check\": \"uptake sample 3\", \"actual\": [-2.339167, 0.49, -4.77381], \"expected\": [-2.3675, 0.49, -4.831633], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":36.019,"exit_code":0,"observations":[{"actual":[0.6,0.5,1.2],"check":"crossover in control reduces compliance difference","expected":[0.6,0.5,1.2],"passed":true},{"actual":[0.5,0.5,1.0],"check":"unequal arm sizes","expected":[0.5,0.5,1.0],"passed":true},{"actual":[0.2,0.0,null],"check":"no uptake difference has no CACE","expected":[0.2,0.0,null],"passed":true},{"actual":[0.3,0.3,1.0],"check":"low but positive compliance still yields CACE","expected":[0.3,0.3,1.0],"passed":true},{"actual":[-0.1,-0.2,null],"check":"negative compliance difference","expected":[-0.1,-0.2,null],"passed":true},{"actual":[-1.1675,-0.0525,null],"check":"uptake sample 1","expected":[-1.1675,-0.0525,null],"passed":true},{"actual":[-1.5275,0.1925,-7.935065],"check":"uptake sample 2","expected":[-1.5275,0.1925,-7.935065],"passed":true},{"actual":[-2.3675,0.49,-4.831633],"check":"uptake sample 3","expected":[-2.3675,0.49,-4.831633],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossover in control reduces compliance difference\", \"actual\": [0.6, 0.5, 1.2], \"expected\": [0.6, 0.5, 1.2], \"passed\": true}, {\"check\": \"unequal arm sizes\", \"actual\": [0.5, 0.5, 1.0], \"expected\": [0.5, 0.5, 1.0], \"passed\": true}, {\"check\": \"no uptake difference has no CACE\", \"actual\": [0.2, 0.0, null], \"expected\": [0.2, 0.0, null], \"passed\": true}, {\"check\": \"low but positive compliance still yields CACE\", \"actual\": [0.3, 0.3, 1.0], \"expected\": [0.3, 0.3, 1.0], \"passed\": true}, {\"check\": \"negative compliance difference\", \"actual\": [-0.1, -0.2, null], \"expected\": [-0.1, -0.2, null], \"passed\": true}, {\"check\": \"uptake sample 1\", \"actual\": [-1.1675, -0.0525, null], \"expected\": [-1.1675, -0.0525, null], \"passed\": true}, {\"check\": \"uptake sample 2\", \"actual\": [-1.5275, 0.1925, -7.935065], \"expected\": [-1.5275, 0.1925, -7.935065], \"passed\": true}, {\"check\": \"uptake sample 3\", \"actual\": [-2.3675, 0.49, -4.831633], \"expected\": [-2.3675, 0.49, -4.831633], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}