{"abstract":"High mortality produces negative numbers at age.","category":"Ecological population dynamics","checks":7,"contract":"Z_a = F_a + M; catch_a = F_a/Z_a*N_a*(1-exp(-Z_a)) (0 when Z=0); survivors N_a*exp(-Z_a) age one year; the last class is a plus group; next year starts with recruits at age 0; return [catch rounded 3, next vector rounded 3, total catch rounded 3]; at least two age classes.","evaluation_group":"w2-ecopop-baranov-cohort","failed_approach":"Survival ignores fishing mortality.","family":"w2-ecopop-baranov-cohort-survival","id":"FA-65616","implementations":{"attempt":{"sha256":"bca1500108db71d7a3aaf040bc9bcb5bfb713aed4a7d4fb13e9e582315b1a4d5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(numbers, f_by_age, m, recruits):\n    z = [f + m for f in f_by_age]\n    catch = [f / z_a * n * (1 - math.exp(-z_a)) if z_a > 0 else 0.0 for f, z_a, n in zip(f_by_age, z, numbers)]\n    surv = [n * math.exp(-m) for n, z_a in zip(numbers, z)]\n    nxt = [float(recruits)] + surv[:-2] + [surv[-2] + surv[-1]]\n    return [[round(c, 3) for c in catch], [round(x, 3) for x in nxt], round(sum(catch), 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])]]\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":"1f7ac9b56bf3bea4eba790d826038d982b4f484a5a1efc86b0d560df4035d066","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(numbers, f_by_age, m, recruits):\n    z = [f + m for f in f_by_age]\n    catch = [f / z_a * n * (1 - math.exp(-z_a)) if z_a > 0 else 0.0 for f, z_a, n in zip(f_by_age, z, numbers)]\n    surv = [n * (1 - z_a) for n, z_a in zip(numbers, z)]\n    nxt = [float(recruits)] + surv[:-2] + [surv[-2] + surv[-1]]\n    return [[round(c, 3) for c in catch], [round(x, 3) for x in nxt], round(sum(catch), 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])]]\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":"727ed7da95d3fe138770c84d2d78caeb3bb03b14eb1eccaaec3ab2c636fe4c01","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(numbers, f_by_age, m, recruits):\n    z = [f + m for f in f_by_age]\n    catch = [f / z_a * n * (1 - math.exp(-z_a)) if z_a > 0 else 0.0 for f, z_a, n in zip(f_by_age, z, numbers)]\n    surv = [n * math.exp(-z_a) for n, z_a in zip(numbers, z)]\n    nxt = [float(recruits)] + surv[:-2] + [surv[-2] + surv[-1]]\n    return [[round(c, 3) for c in catch], [round(x, 3) for x in nxt], round(sum(catch), 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])],\n [('regression: haddock four ages',\n   ([1000, 600, 300, 150], [0.1, 0.3, 0.5, 0.5], 0.2, 900),\n   [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855]),\n  ('regression: two ages', ([500, 200], [0.2, 0.4], 0.3, 400), [[78.694, 57.533], [400.0, 402.582], 136.227]),\n  ('regression: unfished',\n   ([800, 400, 200], [0.0, 0.0, 0.0], 0.2, 700),\n   [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0]),\n  ('regression: no natural mortality',\n   ([100, 80, 60], [0.3, 0.3, 0.3], 0.0, 100),\n   [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204]),\n  ('control: no mortality at all', ([50, 40], [0.0, 0.0], 0.0, 50), [[0.0, 0.0], [50.0, 90.0], 0.0]),\n  ('regression: heavy fishing',\n   ([400, 300, 200, 100, 50], [0.5, 1.0, 1.2, 1.2, 1.2], 0.25, 350),\n   [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652]),\n  ('regression: recruitment failure',\n   ([300, 250, 100], [0.2, 0.4, 0.4], 0.15, 0),\n   [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31])]]\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":"Deterministic bounded teaching model with a stipulated contract; not a validated scientific or public-health modelling library. 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-ecopop-baranov-cohort-survival","generated_at":"2026-09-29T14:47:35.706668+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Population projections set harvest quotas, conservation status and pest-control timing; a wrong update order, boundary or rate conversion silently changes management advice.","repair":"Restore the survival rule: `surv = [n * math.exp(-z_a)`.","root_cause":"Survival uses the linear 1-Z approximation.","sha256":"50e53154b65fc453bf1cdcaa38deed825e29cd4eeef0e22351d858a2c31781cc","title":"Baranov catch and age-structured survival: survival · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.543,"exit_code":1,"observations":[{"actual":[[86.394,141.649,107.875,53.937],[900.0,818.731,491.238,368.429],389.855],"check":"regression: haddock four ages","expected":[[86.394,141.649,107.875,53.937],[900.0,740.818,363.918,223.463],389.855],"passed":false},{"actual":[[78.694,57.533],[400.0,518.573],136.227],"check":"regression: two ages","expected":[[78.694,57.533],[400.0,402.582],136.227],"passed":false},{"actual":[[0.0,0.0,0.0],[700.0,654.985,491.238],0.0],"check":"regression: unfished","expected":[[0.0,0.0,0.0],[700.0,654.985,491.238],0.0],"passed":true},{"actual":[[25.918,20.735,15.551],[100.0,100.0,140.0],62.204],"check":"regression: no natural mortality","expected":[[25.918,20.735,15.551],[100.0,74.082,103.715],62.204],"passed":false},{"actual":[[0.0,0.0],[50.0,90.0],0.0],"check":"control: no mortality at all","expected":[[0.0,0.0],[50.0,90.0],0.0],"passed":true},{"actual":[[140.702,171.239,126.692,63.346,31.673],[350.0,311.52,233.64,155.76,116.82],533.652],"check":"regression: heavy fishing","expected":[[140.702,171.239,126.692,63.346,31.673],[350.0,188.947,85.951,46.914,35.186],533.652],"passed":false},{"actual":[[50.625,76.918,30.767],[0.0,258.212,301.248],158.31],"check":"regression: recruitment failure","expected":[[50.625,76.918,30.767],[0.0,211.406,201.932],158.31],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: haddock four ages\", \"actual\": [[86.394, 141.649, 107.875, 53.937], [900.0, 818.731, 491.238, 368.429], 389.855], \"expected\": [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855], \"passed\": false}, {\"check\": \"regression: two ages\", \"actual\": [[78.694, 57.533], [400.0, 518.573], 136.227], \"expected\": [[78.694, 57.533], [400.0, 402.582], 136.227], \"passed\": false}, {\"check\": \"regression: unfished\", \"actual\": [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0], \"expected\": [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0], \"passed\": true}, {\"check\": \"regression: no natural mortality\", \"actual\": [[25.918, 20.735, 15.551], [100.0, 100.0, 140.0], 62.204], \"expected\": [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204], \"passed\": false}, {\"check\": \"control: no mortality at all\", \"actual\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"expected\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"passed\": true}, {\"check\": \"regression: heavy fishing\", \"actual\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 311.52, 233.64, 155.76, 116.82], 533.652], \"expected\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652], \"passed\": false}, {\"check\": \"regression: recruitment failure\", \"actual\": [[50.625, 76.918, 30.767], [0.0, 258.212, 301.248], 158.31], \"expected\": [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.561,"exit_code":1,"observations":[{"actual":[[86.394,141.649,107.875,53.937],[900.0,700.0,300.0,135.0],389.855],"check":"regression: haddock four ages","expected":[[86.394,141.649,107.875,53.937],[900.0,740.818,363.918,223.463],389.855],"passed":false},{"actual":[[78.694,57.533],[400.0,310.0],136.227],"check":"regression: two ages","expected":[[78.694,57.533],[400.0,402.582],136.227],"passed":false},{"actual":[[0.0,0.0,0.0],[700.0,640.0,480.0],0.0],"check":"regression: unfished","expected":[[0.0,0.0,0.0],[700.0,654.985,491.238],0.0],"passed":false},{"actual":[[25.918,20.735,15.551],[100.0,70.0,98.0],62.204],"check":"regression: no natural mortality","expected":[[25.918,20.735,15.551],[100.0,74.082,103.715],62.204],"passed":false},{"actual":[[0.0,0.0],[50.0,90.0],0.0],"check":"control: no mortality at all","expected":[[0.0,0.0],[50.0,90.0],0.0],"passed":true},{"actual":[[140.702,171.239,126.692,63.346,31.673],[350.0,100.0,-75.0,-90.0,-67.5],533.652],"check":"regression: heavy fishing","expected":[[140.702,171.239,126.692,63.346,31.673],[350.0,188.947,85.951,46.914,35.186],533.652],"passed":false},{"actual":[[50.625,76.918,30.767],[0.0,195.0,157.5],158.31],"check":"regression: recruitment failure","expected":[[50.625,76.918,30.767],[0.0,211.406,201.932],158.31],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: haddock four ages\", \"actual\": [[86.394, 141.649, 107.875, 53.937], [900.0, 700.0, 300.0, 135.0], 389.855], \"expected\": [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855], \"passed\": false}, {\"check\": \"regression: two ages\", \"actual\": [[78.694, 57.533], [400.0, 310.0], 136.227], \"expected\": [[78.694, 57.533], [400.0, 402.582], 136.227], \"passed\": false}, {\"check\": \"regression: unfished\", \"actual\": [[0.0, 0.0, 0.0], [700.0, 640.0, 480.0], 0.0], \"expected\": [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0], \"passed\": false}, {\"check\": \"regression: no natural mortality\", \"actual\": [[25.918, 20.735, 15.551], [100.0, 70.0, 98.0], 62.204], \"expected\": [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204], \"passed\": false}, {\"check\": \"control: no mortality at all\", \"actual\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"expected\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"passed\": true}, {\"check\": \"regression: heavy fishing\", \"actual\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 100.0, -75.0, -90.0, -67.5], 533.652], \"expected\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652], \"passed\": false}, {\"check\": \"regression: recruitment failure\", \"actual\": [[50.625, 76.918, 30.767], [0.0, 195.0, 157.5], 158.31], \"expected\": [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.469,"exit_code":0,"observations":[{"actual":[[86.394,141.649,107.875,53.937],[900.0,740.818,363.918,223.463],389.855],"check":"regression: haddock four ages","expected":[[86.394,141.649,107.875,53.937],[900.0,740.818,363.918,223.463],389.855],"passed":true},{"actual":[[78.694,57.533],[400.0,402.582],136.227],"check":"regression: two ages","expected":[[78.694,57.533],[400.0,402.582],136.227],"passed":true},{"actual":[[0.0,0.0,0.0],[700.0,654.985,491.238],0.0],"check":"regression: unfished","expected":[[0.0,0.0,0.0],[700.0,654.985,491.238],0.0],"passed":true},{"actual":[[25.918,20.735,15.551],[100.0,74.082,103.715],62.204],"check":"regression: no natural mortality","expected":[[25.918,20.735,15.551],[100.0,74.082,103.715],62.204],"passed":true},{"actual":[[0.0,0.0],[50.0,90.0],0.0],"check":"control: no mortality at all","expected":[[0.0,0.0],[50.0,90.0],0.0],"passed":true},{"actual":[[140.702,171.239,126.692,63.346,31.673],[350.0,188.947,85.951,46.914,35.186],533.652],"check":"regression: heavy fishing","expected":[[140.702,171.239,126.692,63.346,31.673],[350.0,188.947,85.951,46.914,35.186],533.652],"passed":true},{"actual":[[50.625,76.918,30.767],[0.0,211.406,201.932],158.31],"check":"regression: recruitment failure","expected":[[50.625,76.918,30.767],[0.0,211.406,201.932],158.31],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: haddock four ages\", \"actual\": [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855], \"expected\": [[86.394, 141.649, 107.875, 53.937], [900.0, 740.818, 363.918, 223.463], 389.855], \"passed\": true}, {\"check\": \"regression: two ages\", \"actual\": [[78.694, 57.533], [400.0, 402.582], 136.227], \"expected\": [[78.694, 57.533], [400.0, 402.582], 136.227], \"passed\": true}, {\"check\": \"regression: unfished\", \"actual\": [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0], \"expected\": [[0.0, 0.0, 0.0], [700.0, 654.985, 491.238], 0.0], \"passed\": true}, {\"check\": \"regression: no natural mortality\", \"actual\": [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204], \"expected\": [[25.918, 20.735, 15.551], [100.0, 74.082, 103.715], 62.204], \"passed\": true}, {\"check\": \"control: no mortality at all\", \"actual\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"expected\": [[0.0, 0.0], [50.0, 90.0], 0.0], \"passed\": true}, {\"check\": \"regression: heavy fishing\", \"actual\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652], \"expected\": [[140.702, 171.239, 126.692, 63.346, 31.673], [350.0, 188.947, 85.951, 46.914, 35.186], 533.652], \"passed\": true}, {\"check\": \"regression: recruitment failure\", \"actual\": [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31], \"expected\": [[50.625, 76.918, 30.767], [0.0, 211.406, 201.932], 158.31], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}