{
 "bundle_of": "C26",
 "schema_version": "0.40",
 "paper": {
  "id": "entrylib:2026.000002",
  "version": 3,
  "title": "Admissibility of lagged state space models through the ARIMA form of the whole model",
  "licence": "CC-BY-4.0",
  "status": "corrected",
  "date": "2026-11-10",
  "status_notice": {
   "date": "2026-11-10",
   "reason_code": "correction",
   "statement": "Limitations L2 and L4 are answered by a planned independent check (new evidence E25): an exact oracle in rational arithmetic with certified root enclosures, written by a new contributor (P5) without the prototype, compared on the models of the planned tests; it agrees with the PBH reference, the cyclotomic cancellation, the step-down test and the bisection on every model it decides, and its four hypotheses are reported as claims C29-C32, one of them inconclusive by its rule. The assumptions C14 (reworded to the band the tests leave out) and C19 are tested by it; claims C1-C5, C10, C11 and C16 carry its checks; claims C3, C4, C16 and C24-C26 relate to the earlier work they extend, supersede or contradict. The lab record (A9) and the results file (A18) are updated to the record's current version. No earlier claim's conclusion or ID changed.",
   "issued_by": "Ivan Svetunkov (ORCID 0000-0001-7826-0281)"
  }
 },
 "claims": [
  {
   "id": "C26",
   "statement": "On [[D22:1,000 further random ETS+ARIMA models]], [[D14:the bounds checker of adam() in R and of ADAM in Python]] with bounds=\"admissible\", which run smoothEigensCpp() on the whole model, gave the same [[D29:admissibility decision]] as [[D10:the prototype check of the whole model]] on every model, and a penalty slope ([[D30:the largest root modulus]]) within the bisection tolerance of it in both families.",
   "about": {
    "subject": "D14",
    "relation": "gives the same admissibility decision and largest mode modulus as",
    "object": [
     "D29",
     "D30"
    ],
    "comparator": "D10",
    "conditions": [
     "D22"
    ]
   },
   "type": "methodological",
   "role": "principal",
   "novelty": "no_prior_found",
   "support": [
    {
     "kind": "simulation",
     "evidence": "E22",
     "results": [
      "E22.T3.r1",
      "E22.T3.r2",
      "E22.T3.r3",
      "E22.T3.r4"
     ],
     "artefacts": [
      "A10",
      "A1",
      "A12",
      "A13",
      "A14"
     ]
    }
   ],
   "provenance": "author_stated",
   "hypothesis": {
    "lab_event": "H9",
    "outcome": "supported"
   },
   "planning": "confirmatory",
   "planned_at": "2026-10-22T17:19:52Z",
   "planned_at_anchor": "git_remote",
   "test": {
    "framework": "deterministic",
    "parameters": {
     "sample": "500 models per family, one run, no stopping rule",
     "threshold": 1.1e-06
    },
    "quantities": {
     "r1": {
      "variable": "admissibility decisions of the package's bounds checker that differ from the prototype check of the whole model",
      "conditions": {
       "family": "ETS+ARIMA",
       "language": "R"
      }
     },
     "r2": {
      "variable": "admissibility decisions of the package's bounds checker that differ from the prototype check of the whole model",
      "conditions": {
       "family": "ETS+SARIMA",
       "language": "R"
      }
     },
     "p1": {
      "variable": "admissibility decisions of the package's bounds checker that differ from the prototype check of the whole model",
      "conditions": {
       "family": "ETS+ARIMA",
       "language": "Python"
      }
     },
     "p2": {
      "variable": "admissibility decisions of the package's bounds checker that differ from the prototype check of the whole model",
      "conditions": {
       "family": "ETS+SARIMA",
       "language": "Python"
      }
     },
     "dr1": {
      "variable": "max abs difference of the largest modulus, package's bounds checker against the prototype, on models both find inadmissible",
      "conditions": {
       "family": "ETS+ARIMA",
       "language": "R"
      }
     },
     "dr2": {
      "variable": "max abs difference of the largest modulus, package's bounds checker against the prototype, on models both find inadmissible",
      "conditions": {
       "family": "ETS+SARIMA",
       "language": "R"
      }
     },
     "dp1": {
      "variable": "max abs difference of the largest modulus, package's bounds checker against the prototype, on models both find inadmissible",
      "conditions": {
       "family": "ETS+ARIMA",
       "language": "Python"
      }
     },
     "dp2": {
      "variable": "max abs difference of the largest modulus, package's bounds checker against the prototype, on models both find inadmissible",
      "conditions": {
       "family": "ETS+SARIMA",
       "language": "Python"
      }
     }
    },
    "supported": "r1 + r2 + p1 + p2 == 0 and dr1 <= threshold and dr2 <= threshold and dp1 <= threshold and dp2 <= threshold",
    "not_supported": "r1 + r2 + p1 + p2 > 0 or dr1 > threshold or dr2 > threshold or dp1 > threshold or dp2 > threshold",
    "verdict": "computed",
    "runs": 1,
    "lab_plan": "PL9",
    "flags": [
     "code_changed_after_plan"
    ]
   },
   "scope": {
    "population": "random ADAM models that combine additive ETS with ARIMA",
    "conditions": [
     "ETS: level; no, additive or damped trend; no or one seasonal lag m in {4, 12}; smoothing parameters drawn from wide ranges, some fixed at 0",
     "ARIMA: AR stationary, differences and MA up to order 2 at lag 1 and 1 at lag m, 15% over-differenced (an MA root at one on the unit circle of a differenced lag)",
     "ADAM's state space form of ARIMA (one state per lag of the ARI and MA polynomials), checked against the matrices of adam() on 20 of the models",
     "the checkers called on the matrices of each model, R through pkgload::load_all of the repository"
    ],
    "excludes": [
     "regressors",
     "constant",
     "multiplicative models",
     "several seasonal lags",
     "CES",
     "GUM"
    ]
   },
   "assumptions": [
    "C28"
   ],
   "assessments": [
    {
     "by": "author",
     "strength": "high",
     "rationale": "Planned test of the code in the package on new models; the decisions are exact and the moduli agree within the bisection tolerance. The shortcut for pure ARIMA, added after this run, was tested only by the checker P4. Two later changes of the checkers (decision DC8) are not covered by the run: the margin of 1e-10 below one, and the penalty of a rejected pure ARIMA, which stays that of its MA factors."
    }
   ],
   "limitations": [
    "L11"
   ],
   "checks": [
    {
     "by": "P4",
     "outcome": "confirmed",
     "extent": "full",
     "notes": "Reran the implementation test with another seed: seed 12 n=200 --impl in the project venv (AC3.RN2): R adam_bounds_checker() and Python adam_bounds_checker() both 0 differing decisions against the prototype in 200 ETS+ARIMA and 200 ETS+SARIMA models; max abs difference between penalty/1e100 and the prototype modulus 9.35e-7 (ETS+ARIMA, 118 inadmissible) and 9.53e-7 (ETS+SARIMA, 167 inadmissible), R and Python equal to 8 digits; author's RN53 0 differences and 9.5e-7; all within the 1.1e-6 threshold (the C++ bisection returns the upper end, tolerance 1e-6). Script review: R positional call of adam_bounds_checker() matches its signature, Python dict arguments match, AR reflection computed as in C++; matrices are the author's builder verified against adam() on 30 models (AC3.RN1, gap 4.9e-15), not matrices from adam() fits. Limitations to state with the claim: (1) the prototype decides with a 1e-6 margin (modulus < 1 - 1e-6) and the package with modulus > 1 + 1e-50, so for a root exactly on the unit circle that does not cancel the package's answer is set by roundoff: simple cases (MA(1) theta=+-1, 1 - B + B^2, 1 + B^2) are rejected with modulus 1.00000095 (AC3.RN13), but in 3 of 1750 models of the wider generator the package accepted a model whose theta* keeps a cyclotomic factor, with moduli 0.9999999999999969 (AC3.RN4), 0.9999999999999993 (AC3.RN9) and 0.9999999999970864 (AC3.RN10; the specs are printed in their stdout), while the cancelled-polynomial prototype and the exact oracle reject them. The generator of RN53 has no such models (the only unit-circle MA roots are over-differenced and cancel), so the confirmed statement holds for what it says, random ETS+ARIMA models away from the boundary. (2) RN53 ran at commit 7cf64144, before the shortcut of DC6 (b4a10cc6), and always with ets_model=True, so the pure-ARIMA shortcut branch is not covered by it (see my check of DC6). The compiled _eigenCalc in the venv (built 16:49) is newer than the header's last change (16:48), so RN53 and my AC3.RN2 ran the current C++."
    }
   ],
   "relations": [
    {
     "type": "supersedes",
     "reference": "B3",
     "locator": "adam(), bounds = \"admissible\", smooth 4.6.0",
     "self": true,
     "note": "The bounds checker of adam() in smooth 4.6.0 checks the ETS part and the ARIMA polynomials of an ETS+ARIMA model apart."
    }
   ],
   "verifiability": "open",
   "verifiability_flags": []
  },
  {
   "id": "C28",
   "statement": "For ETS+ARIMA models with a stationary AR polynomial, $\\theta(B)$ and $\\phi(B)$ of the whole model share no factor with a root in $|B| \\le 1$ that is not cyclotomic, so the [[D5:PBH reference]] and the cancelled MA polynomial decide the same admissibility.",
   "type": "methodological",
   "role": "supporting",
   "support": [
    {
     "kind": "assumption"
    }
   ],
   "assumption_category": "theorem_condition",
   "check": "tested",
   "provenance": "author_stated",
   "check_evidence": "E24",
   "verifiability": "not_applicable",
   "verifiability_flags": []
  }
 ],
 "definitions": [
  {
   "id": "D2",
   "term": "expanded discount matrix",
   "definition": "The transition matrix $\\tilde D$ of size $\\sum_j l_j$ of the lag-1 system equivalent to $v_t = D v_{t-l}$, in which component $j$ carries itself and its $l_j - 1$ lagged copies; $\\tilde F$, $\\tilde g$ and $\\tilde w$ are expanded in the same way, so that $\\tilde D = \\tilde F - \\tilde g \\tilde w'$.",
   "kind": "concept"
  },
  {
   "id": "D3",
   "term": "decaying weights",
   "definition": "A lagged SSOE model has decaying weights when the weights $\\tilde w' \\tilde D^j \\tilde g$ of the past observations in its fitted values tend to zero, that is, when every eigenvalue $\\lambda$ of its expanded discount matrix that is reachable from $\\tilde g$ and observable through $\\tilde w$ has $|\\lambda| < 1$; the largest such $|\\lambda|$ is its largest mode modulus. A mode that $\\tilde g$ does not reach but $\\tilde w$ sees carries an initial state whose effect is not covered: with $|\\lambda| > 1$ it grows.",
   "kind": "concept"
  },
  {
   "id": "D5",
   "term": "PBH reference",
   "definition": "The largest modulus among the eigenvalues $\\lambda$ of the expanded discount matrix for which the smallest singular values of $[\\lambda I - \\tilde D;\\ \\tilde w']$ and of $[\\lambda I - \\tilde D,\\ \\tilde g]$ both exceed $10^{-7}(\\|\\tilde D\\|_2 + \\|\\tilde g\\| + \\|\\tilde w\\|)$ (Popov-Belevitch-Hautus rank tests), computed with numpy as pbh_max().",
   "kind": "method"
  },
  {
   "id": "D6",
   "term": "cyclotomic cancellation",
   "definition": "The procedure that computes the coefficients of $$\\begin{aligned} \\theta(B) &= \\det(I - D L(B)) \\\\ \\phi(B) &= \\det(I - F L(B)) \\end{aligned}$$ by an inverse discrete Fourier transform of their values at the $N$-th roots of unity ($N$ the smallest power of 2 above $\\sum_j l_j$), and divides both by every cyclotomic polynomial $\\Phi_n(B)$, $n$ dividing one of the lags, for as long as it divides both with a remainder at most $10^{-9}$ times the sum of absolute coefficients; the quotient of $\\theta$ is the cancelled MA polynomial $\\theta^*(B)$.",
   "kind": "method"
  },
  {
   "id": "D7",
   "term": "step-down test",
   "definition": "The Levinson-Durbin step-down (Schur-Cohn) recursion on $1 + c_1 B + \\dots + c_n B^n$: for $j = n, \\dots, 1$, $$\\kappa_j = c_j, \\qquad c_i \\leftarrow \\frac{c_i - \\kappa_j c_{j-i}}{1 - \\kappa_j^2};$$ the test passes when every $|\\kappa_j| < 1$, which holds if and only if all roots lie outside the unit circle (the $\\kappa_j$ are the partial autocorrelations of the autoregression with this polynomial).",
   "source": "B2",
   "kind": "method"
  },
  {
   "id": "D10",
   "term": "check of the whole model",
   "kind": "method",
   "definition": "Admissibility of a lagged SSOE model from the MA polynomial $$\\theta(B) = \\det(I - D L(B))$$ of its ARIMA form: $\\theta$ is divided by its common factors with $\\phi(B) = \\det(I - F L(B))$ by [[D6:cyclotomic cancellation]], and the model is accepted when the cancelled polynomial $\\theta^*$ has no root in $|B| \\le 1$ and, for a model with ARIMA components, the AR polynomial of its ARIMA part is stationary; its largest mode modulus is $1/\\min|B|$ over the roots of $\\theta^*$. In the numpy prototype (admissibility.py, confirm.py, ets_arima.py) the roots come from numpy; in smooth the [[D7:step-down test]] decides and bisection gives the modulus."
  },
  {
   "id": "D14",
   "term": "bounds checker of adam()",
   "kind": "method",
   "definition": "adam_bounds_checker() of adam(), om() and omg() in R (R/utils-adam.R) and of ADAM, OM and OMG in Python, with bounds=\"admissible\" after this study: smoothEigensCpp() on the whole model, with a shortcut that accepts a pure ARIMA model (without ETS and adaptive regressors) whose MA factors are invertible without running it; the penalty is zero, or 1e100 times the largest root modulus.",
   "broader": [
    "D10"
   ]
  },
  {
   "id": "D22",
   "term": "random ETS+ARIMA models",
   "kind": "data",
   "definition": "Random ADAM models combining additive ETS with ARIMA (ets_arima.py), 500 with ARIMA at lag 1 and 500 with seasonal ARIMA per seed (seed 2 for plans PL7 and PL8, seed 3 for plan PL9): ETS with a level; no, additive or damped trend; no or one seasonal lag $m$ in {4, 12}; smoothing parameters drawn from wide ranges, some fixed at 0; ARIMA with a stationary AR polynomial, differences and MA up to order 2 at lag 1 and 1 at lag $m$, 15% over-differenced (an MA root at one on the unit circle of a differenced lag); built in ADAM's state space form (one state per lag of the ARI and MA polynomials)."
  },
  {
   "id": "D23",
   "term": "ETS+ARIMA models of the checker's generator",
   "kind": "data",
   "definition": "Random ADAM ETS+ARIMA models from the generator of the checker P4 (code/checker/exact_oracle.py with lib.py), wider than the [[D22:random ETS+ARIMA models]]: 250 models for each of seeds 21-23 and 31-34."
  },
  {
   "id": "D26",
   "term": "comparison with a reference",
   "kind": "design",
   "definition": "Each model's admissibility decision, and its largest mode modulus where both find it inadmissible, computed by the method studied and by a reference on the same model (the [[D5:PBH reference]], the roots by numpy, the numpy prototype of the check of the whole model or an exact oracle); the result is the number of models whose decisions differ and the largest absolute difference of the modulus. In the planned tests, models whose reference modulus lies within 1e-8 of 1 are left out and counted."
  },
  {
   "id": "D29",
   "term": "admissibility decision",
   "kind": "variable",
   "definition": "Whether a method accepts a model as admissible ([[D3:decaying weights]]); compared between a method and a reference as the number of models on which the two differ."
  },
  {
   "id": "D30",
   "term": "largest mode modulus",
   "kind": "variable",
   "definition": "The largest modulus of the modes that decide admissibility: for the [[D5:PBH reference]] the largest $|\\lambda|$ of the reachable and observable eigenvalues of the [[D2:expanded discount matrix]], for the check of the whole model $1/\\min|B|$ over the roots $B$ of the cancelled MA polynomial, for the per-lag check the largest $|\\lambda|$ of its blocks; a model is admissible when it is below 1."
  },
  {
   "id": "D39",
   "term": "exact gcd oracle",
   "kind": "method",
   "definition": "Admissibility by rational determinants and the exact greatest common divisor of $\\theta$ and $\\phi$, which cancels any shared factor (code/checker/exact_oracle.py of the checker P4)."
  }
 ],
 "evidence": [
  {
   "id": "E22",
   "profile": "simulation",
   "design": "other",
   "description": "Planned test (lab plan PL9, run RN53): ets_arima.py --seed 3 --n 500 --impl generated 500 ETS+ARIMA and 500 ETS+SARIMA models (seed 3) and passed the matrices of each to adam_bounds_checker() of R (through pkgload::load_all of the repository) and of Python, with the AR reflection of its factors, comparing the penalty (zero, or 1e100 times the largest root modulus) with the prototype check of the whole model.",
   "setup": {
    "studied": [
     "D14"
    ],
    "cases": [
     "D22"
    ],
    "procedure": [
     "D26",
     "D10"
    ],
    "lens": [
     "D29",
     "D30"
    ]
   },
   "availability": {
    "level": "public"
   },
   "lab_runs": [
    "RN53"
   ],
   "results": [
    {
     "id": "R17",
     "variable": "max abs difference between the ARIMA form of the ARIMA part and its ARI and MA polynomials",
     "value": 2.69229e-15,
     "conditions": {
      "models": 1000
     }
    }
   ],
   "execution": {
    "code_version": "7cf641447804173fe3c014451e4311970cb65748",
    "software": {
     "python": "3.13.16",
     "platform": "Linux-6.18.44-fc-v140-x86_64-with-glibc2.39"
    }
   },
   "artefacts": [
    "A10",
    "A1"
   ],
   "tables": [
    {
     "id": "T1",
     "description": "Admissibility decisions of the check of the parts apart ('split') and of the check of the whole model ('joint') against the PBH reference on 500 models of each family: models whose decision differs, models accepted by the check and rejected by the reference, and models rejected by the check and accepted by the reference",
     "conditions": {
      "models": 500
     },
     "row_labels": [
      "family",
      "check"
     ],
     "columns": [
      "models whose admissibility decision differs from the PBH reference",
      "models accepted by the check and rejected by the PBH reference",
      "models rejected by the check and accepted by the PBH reference"
     ],
     "rows": [
      {
       "id": "r1",
       "label": [
        "ETS+ARIMA",
        "split"
       ],
       "values": [
        171,
        115,
        56
       ]
      },
      {
       "id": "r2",
       "label": [
        "ETS+ARIMA",
        "joint"
       ],
       "values": [
        0,
        0,
        0
       ]
      },
      {
       "id": "r3",
       "label": [
        "ETS+SARIMA",
        "split"
       ],
       "values": [
        150,
        129,
        21
       ]
      },
      {
       "id": "r4",
       "label": [
        "ETS+SARIMA",
        "joint"
       ],
       "values": [
        0,
        0,
        0
       ]
      }
     ],
     "artefact": "A18"
    },
    {
     "id": "T2",
     "description": "Per family of 500 models: models found admissible by the PBH reference, and the largest absolute difference of the largest modulus between the check of the whole model and the PBH reference on the models both find inadmissible, with their number",
     "row_labels": [
      "family"
     ],
     "columns": [
      "max abs difference of the largest modulus, check of the whole model against the PBH reference, on models both find inadmissible",
      {
       "variable": "models found admissible by the PBH reference",
       "conditions": {
        "models": 500
       }
      },
      "inadmissible"
     ],
     "rows": [
      {
       "id": "r1",
       "label": [
        "ETS+ARIMA"
       ],
       "values": [
        1.36557e-13,
        159,
        341
       ]
      },
      {
       "id": "r2",
       "label": [
        "ETS+SARIMA"
       ],
       "values": [
        6.72602e-11,
        76,
        424
       ]
      }
     ],
     "artefact": "A18"
    },
    {
     "id": "T3",
     "description": "The bounds checker of adam() in R and of ADAM in Python against the prototype check of the whole model on 500 models of each family: admissibility decisions that differ, and the largest absolute difference of the largest root modulus on the models found inadmissible, with their number",
     "conditions": {
      "models": 500
     },
     "row_labels": [
      "family",
      "language"
     ],
     "columns": [
      "admissibility decisions of the package's bounds checker that differ from the prototype check of the whole model",
      "max abs difference of the largest modulus, package's bounds checker against the prototype, on models both find inadmissible",
      "inadmissible"
     ],
     "rows": [
      {
       "id": "r1",
       "label": [
        "ETS+ARIMA",
        "R"
       ],
       "values": [
        0,
        9.53674e-07,
        341
       ]
      },
      {
       "id": "r2",
       "label": [
        "ETS+ARIMA",
        "Python"
       ],
       "values": [
        0,
        9.53674e-07,
        341
       ]
      },
      {
       "id": "r3",
       "label": [
        "ETS+SARIMA",
        "R"
       ],
       "values": [
        0,
        9.4849e-07,
        424
       ]
      },
      {
       "id": "r4",
       "label": [
        "ETS+SARIMA",
        "Python"
       ],
       "values": [
        0,
        9.4849e-07,
        424
       ]
      }
     ],
     "artefact": "A18"
    }
   ]
  },
  {
   "id": "E24",
   "profile": "simulation",
   "lab_runs": [
    "AC3.RN4",
    "AC3.RN5",
    "AC3.RN6",
    "AC3.RN7",
    "AC3.RN8",
    "AC3.RN9",
    "AC3.RN10"
   ],
   "artefacts": [
    "A15"
   ],
   "parameters": "A15",
   "model": "random ADAM ETS+ARIMA models of a wider generator",
   "runs": 7,
   "availability": {
    "level": "public"
   },
   "description": "Exploratory runs of the checker P4 (exact_oracle.py, seeds 21-23 and 31-34, 250 models each): admissibility by an exact oracle (rational determinants and the exact greatest common divisor of theta and phi, which cancels any shared factor) against the cancellation of cyclotomic factors ('author'), the PBH reference ('pbh') and the package ('pkg'); the number of models whose decision differs from the oracle.",
   "setup": {
    "studied": [
     "D10",
     "D5",
     "D14"
    ],
    "cases": [
     "D23"
    ],
    "procedure": [
     "D26",
     "D39"
    ],
    "lens": [
     "D29"
    ]
   },
   "tables": [
    {
     "id": "T1",
     "description": "Models, of 250 per seed, whose admissibility decision differs from the exact gcd oracle, for the cancellation of cyclotomic factors ('author'), the PBH reference ('pbh') and the package ('pkg'), seeds 21 to 23 and 31 to 34",
     "conditions": {
      "models": 250
     },
     "row_labels": [
      "seed"
     ],
     "columns": [
      {
       "variable": "models whose admissibility decision differs from the exact gcd oracle",
       "conditions": {
        "check": "author"
       }
      },
      {
       "variable": "models whose admissibility decision differs from the exact gcd oracle",
       "conditions": {
        "check": "pbh"
       }
      },
      {
       "variable": "models whose admissibility decision differs from the exact gcd oracle",
       "conditions": {
        "check": "pkg"
       }
      }
     ],
     "rows": [
      {
       "id": "r1",
       "label": [
        21
       ],
       "values": [
        0.0,
        0.0,
        1.0
       ]
      },
      {
       "id": "r2",
       "label": [
        22
       ],
       "values": [
        0.0,
        0.0,
        0.0
       ]
      },
      {
       "id": "r3",
       "label": [
        23
       ],
       "values": [
        0.0,
        0.0,
        0.0
       ]
      },
      {
       "id": "r4",
       "label": [
        31
       ],
       "values": [
        0.0,
        0.0,
        0.0
       ]
      },
      {
       "id": "r5",
       "label": [
        32
       ],
       "values": [
        0.0,
        0.0,
        0.0
       ]
      },
      {
       "id": "r6",
       "label": [
        33
       ],
       "values": [
        0.0,
        1.0,
        1.0
       ]
      },
      {
       "id": "r7",
       "label": [
        34
       ],
       "values": [
        0.0,
        0.0,
        1.0
       ]
      }
     ],
     "artefact": "A18"
    }
   ]
  }
 ],
 "limitations": [
  {
   "id": "L11",
   "category": "computational",
   "statement": "For an MA root exactly on the unit circle that does not cancel, the decision of the check is set by rounding: the checker P4 found three models of a wider generator, with values of the check between 0.99999999999 and 1, that the package accepted and the prototype rejected. Since this finding the bounds checkers admit a model only when the value is at most 1 - 1e-10 (decision DC8 of the lab record), which rejects these three; the planned tests ran before the margin, and their random models have no such root.",
   "affects": [
    "C16",
    "C26"
   ],
   "impact": "reduces_transferability",
   "mitigation": "addressed",
   "mitigation_evidence": "E24"
  }
 ],
 "artefacts": [
  {
   "id": "A1",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/fe3ecfad42341fb0d2b81d02a7919b43baa5f695/.claude/research/eigenChecker/admissibility.py",
   "availability": {
    "level": "public"
   },
   "version": "sha256:f966bd9f065ee5453a2f809cb4e0f3aee938068589540b45ddf36eaa225c8b04",
   "licence": "LGPL-2.1-only",
   "description": "numpy prototype of the admissibility check of pure additive lagged SSOE models: lag-1 expansion, the per-lag check of smoothEigens(), the PBH reference, ARIMA-form polynomials by inverse DFT, cyclotomic cancellation, step-down test and bisection; ETS and GUM model builders"
  },
  {
   "id": "A10",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/604dbcac0e3ca9cb0e8c7c228cb11b1d6161594c/claimset/adam-admissible-bounds/code/ets_arima.py",
   "availability": {
    "level": "public"
   },
   "version": "sha256:f3e394d5f6563d9f9218c7519977a0227761bcdbf8428c8decd83811fa80f712",
   "licence": "LGPL-2.1-only",
   "description": "test script of Q2: random ETS+ARIMA models, the check of the parts apart and of the whole model against the PBH reference, the structure against adam(), and the bounds checkers of the package in R and Python against the prototype"
  },
  {
   "id": "A12",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/604dbcac0e3ca9cb0e8c7c228cb11b1d6161594c/R/utils-adam.R",
   "availability": {
    "level": "public"
   },
   "version": "sha256:ca4bd6b7b946ca1b5445aa1d8603aa21649bf908ad27950e44a9022052a5d9bc",
   "licence": "LGPL-2.1-only",
   "description": "the bounds checker of adam(), om() and omg() in R (adam_bounds_checker())"
  },
  {
   "id": "A13",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/604dbcac0e3ca9cb0e8c7c228cb11b1d6161594c/python/src/smooth/adam_general/core/utils/cost_functions.py",
   "availability": {
    "level": "public"
   },
   "version": "sha256:5008ff203b1360619fc081fd152a4b586d6218a5ac43d76dbd9089a251103a91",
   "licence": "LGPL-2.1-only",
   "description": "the bounds checker of ADAM, OM and OMG in Python (adam_bounds_checker())"
  },
  {
   "id": "A15",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/604dbcac0e3ca9cb0e8c7c228cb11b1d6161594c/claimset/adam-admissible-bounds/code/checker/exact_oracle.py",
   "availability": {
    "level": "public"
   },
   "version": "sha256:f07dd7d664eac2995262cbca9170f347dae9ef9c401645ab7a6259fb35730d75",
   "licence": "LGPL-2.1-only",
   "description": "the exact oracle of the checker P4 (with lib.py in the same folder): rational determinants and the exact gcd of theta and phi against the cancellation, the PBH reference and the package"
  },
  {
   "id": "A14",
   "kind": "code",
   "uri": "https://github.com/openforecast-org/smooth/blob/604dbcac0e3ca9cb0e8c7c228cb11b1d6161594c/src/headers/eigenCalc.h",
   "availability": {
    "level": "public"
   },
   "version": "sha256:0f5604775db84b6739363561e87a908fb76c683ffcce3e3771a86227ed88f5d4",
   "licence": "LGPL-2.1-only",
   "description": "the C++ check shared by R and Python (smoothEigensCpp()), at the version tested by C26"
  },
  {
   "id": "A18",
   "kind": "data",
   "uri": "https://entrylib.org/p/2026.000002/v3/files/files/adam-admissible-bounds.results.csv",
   "version": "sha256:96615c120ab55a010bb7fb0343bd8200729319db710c0e8a329209e385f674ac",
   "availability": {
    "level": "public"
   },
   "licence": "CC-BY-4.0",
   "description": "Every result of the lab record at full precision, one row per result: the lab result, the run that produced it, the quantity, its conditions (JSON) and the value.",
   "columns": [
    {
     "name": "lab_result",
     "dimension": "lab record result"
    },
    {
     "name": "run",
     "dimension": "lab record run"
    },
    {
     "name": "quantity",
     "dimension": "quantity"
    },
    {
     "name": "conditions",
     "dimension": "conditions of the result"
    },
    {
     "name": "value",
     "variable": "value of the quantity"
    }
   ]
  }
 ],
 "references": [
  {
   "id": "B2",
   "target": "10.1016/0047-259X(73)90030-4",
   "id_type": "doi"
  }
 ]
}
