{
  "schemaVersion": 1,
  "appVersion": "1.2.0-beta.87",
  "engineVersion": "1.20.0",
  "build": "c7af80dbc035efdeb10bc9a3b186a2f7b1197257",
  "suites": [
    {
      "schemaVersion": 1,
      "suite": "import-fidelity",
      "part": "roundtrip",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:03:26.195Z",
      "cases": [
        {
          "id": "import-fidelity.prism-251219-cd7-invivo-molt4-usethis-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/251219_CD7_inVivo_MOLT4_usethis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1163 cells, 4 tables, 37 graphs compared"
        },
        {
          "id": "import-fidelity.prism-251219-cd7-invivo-molt4-usethis-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/251219_CD7_inVivo_MOLT4_usethis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1163 cells, 4 tables compared"
        },
        {
          "id": "import-fidelity.prism-251219-cd7-invivo-molt4-usethis-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/251219_CD7_inVivo_MOLT4_usethis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1163 cells, 4 tables compared"
        },
        {
          "id": "import-fidelity.prism-251219-cd7-invivo-molt4-usethis-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/251219_CD7_inVivo_MOLT4_usethis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "932 cells compared; 3 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/biomiha-demo-dataset.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "648 cells, 14 tables, 13 graphs compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/biomiha-demo-dataset.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "648 cells, 14 tables compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/biomiha-demo-dataset.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "648 cells, 14 tables compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/biomiha-demo-dataset.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "638 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-pzfx.plotvera",
          "method": "Prism .pzfx -> .plotvera -> re-import",
          "dataset": "prism/biomiha-demo-dataset.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "648 cells, 14 tables, 14 graphs compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-pzfx.pzfx",
          "method": "Prism .pzfx -> .pzfx -> re-import",
          "dataset": "prism/biomiha-demo-dataset.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "648 cells, 14 tables compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-pzfx.prism",
          "method": "Prism .pzfx -> .prism -> re-import",
          "dataset": "prism/biomiha-demo-dataset.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "534 cells, 11 tables compared; 3 table(s) refused by the exporter with a stated reason, not written: Y CVN, Y CV, Y high low"
        },
        {
          "id": "import-fidelity.prism-biomiha-demo-dataset-pzfx.csv-per-table",
          "method": "Prism .pzfx -> CSV per table -> re-import",
          "dataset": "prism/biomiha-demo-dataset.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "638 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-biomiha-no-analysis-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/biomiha-no-analysis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "2000 cells, 2 tables, 2 graphs compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-no-analysis-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/biomiha-no-analysis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "2000 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-no-analysis-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/biomiha-no-analysis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "2000 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-biomiha-no-analysis-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/biomiha-no-analysis.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "2000 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-datagrok-dose-response-4pl-pzfx.plotvera",
          "method": "Prism .pzfx -> .plotvera -> re-import",
          "dataset": "prism/datagrok-dose-response-4pl.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "120 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.prism-datagrok-dose-response-4pl-pzfx.pzfx",
          "method": "Prism .pzfx -> .pzfx -> re-import",
          "dataset": "prism/datagrok-dose-response-4pl.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "120 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-datagrok-dose-response-4pl-pzfx.prism",
          "method": "Prism .pzfx -> .prism -> re-import",
          "dataset": "prism/datagrok-dose-response-4pl.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "120 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-datagrok-dose-response-4pl-pzfx.csv-per-table",
          "method": "Prism .pzfx -> CSV per table -> re-import",
          "dataset": "prism/datagrok-dose-response-4pl.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "120 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-deleted-column-orphan-titles-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/deleted-column-orphan-titles.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables, 5 graphs compared"
        },
        {
          "id": "import-fidelity.prism-deleted-column-orphan-titles-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/deleted-column-orphan-titles.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables compared"
        },
        {
          "id": "import-fidelity.prism-deleted-column-orphan-titles-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/deleted-column-orphan-titles.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables compared"
        },
        {
          "id": "import-fidelity.prism-deleted-column-orphan-titles-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/deleted-column-orphan-titles.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "362 cells compared; 5 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-jax-survival-analysis-graph-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/jax-survival-analysis-graph.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1987 cells, 2 tables, 4 graphs compared"
        },
        {
          "id": "import-fidelity.prism-jax-survival-analysis-graph-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/jax-survival-analysis-graph.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1987 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-jax-survival-analysis-graph-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/jax-survival-analysis-graph.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1987 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-jax-survival-analysis-graph-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/jax-survival-analysis-graph.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1987 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-jax-timecourse-row-title-days-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/jax-timecourse-row-title-days.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1010 cells, 2 tables, 4 graphs compared"
        },
        {
          "id": "import-fidelity.prism-jax-timecourse-row-title-days-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/jax-timecourse-row-title-days.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1010 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-jax-timecourse-row-title-days-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/jax-timecourse-row-title-days.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1010 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.prism-jax-timecourse-row-title-days-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/jax-timecourse-row-title-days.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "1020 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-ole-embedded-trailing-slack-prism.plotvera",
          "method": "Prism .prism -> .plotvera -> re-import",
          "dataset": "prism/ole-embedded-trailing-slack.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables, 5 graphs compared"
        },
        {
          "id": "import-fidelity.prism-ole-embedded-trailing-slack-prism.pzfx",
          "method": "Prism .prism -> .pzfx -> re-import",
          "dataset": "prism/ole-embedded-trailing-slack.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables compared"
        },
        {
          "id": "import-fidelity.prism-ole-embedded-trailing-slack-prism.prism",
          "method": "Prism .prism -> .prism -> re-import",
          "dataset": "prism/ole-embedded-trailing-slack.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "373 cells, 5 tables compared"
        },
        {
          "id": "import-fidelity.prism-ole-embedded-trailing-slack-prism.csv-per-table",
          "method": "Prism .prism -> CSV per table -> re-import",
          "dataset": "prism/ole-embedded-trailing-slack.prism",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "362 cells compared; 5 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-yue-survival-pzfx.plotvera",
          "method": "Prism .pzfx -> .plotvera -> re-import",
          "dataset": "prism/yue-survival.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "81 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.prism-yue-survival-pzfx.pzfx",
          "method": "Prism .pzfx -> .pzfx -> re-import",
          "dataset": "prism/yue-survival.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "81 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-yue-survival-pzfx.prism",
          "method": "Prism .pzfx -> .prism -> re-import",
          "dataset": "prism/yue-survival.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "81 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-yue-survival-pzfx.csv-per-table",
          "method": "Prism .pzfx -> CSV per table -> re-import",
          "dataset": "prism/yue-survival.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "108 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.prism-yue-x-y-rep-pzfx.plotvera",
          "method": "Prism .pzfx -> .plotvera -> re-import",
          "dataset": "prism/yue-x-y-rep.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.prism-yue-x-y-rep-pzfx.pzfx",
          "method": "Prism .pzfx -> .pzfx -> re-import",
          "dataset": "prism/yue-x-y-rep.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-yue-x-y-rep-pzfx.prism",
          "method": "Prism .pzfx -> .prism -> re-import",
          "dataset": "prism/yue-x-y-rep.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.prism-yue-x-y-rep-pzfx.csv-per-table",
          "method": "Prism .pzfx -> CSV per table -> re-import",
          "dataset": "prism/yue-x-y-rep.pzfx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "24 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.pptx-20260918-nsg-mice-pptx.plotvera",
          "method": "PowerPoint .pptx (embedded Prism) -> .plotvera -> re-import",
          "dataset": "pptx/20260918-nsg-mice.pptx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "389 cells, 7 tables, 7 graphs compared"
        },
        {
          "id": "import-fidelity.pptx-20260918-nsg-mice-pptx.pzfx",
          "method": "PowerPoint .pptx (embedded Prism) -> .pzfx -> re-import",
          "dataset": "pptx/20260918-nsg-mice.pptx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "389 cells, 7 tables compared"
        },
        {
          "id": "import-fidelity.pptx-20260918-nsg-mice-pptx.prism",
          "method": "PowerPoint .pptx (embedded Prism) -> .prism -> re-import",
          "dataset": "pptx/20260918-nsg-mice.pptx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "389 cells, 7 tables compared"
        },
        {
          "id": "import-fidelity.pptx-20260918-nsg-mice-pptx.csv-per-table",
          "method": "PowerPoint .pptx (embedded Prism) -> CSV per table -> re-import",
          "dataset": "pptx/20260918-nsg-mice.pptx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "377 cells compared; 7 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/colony_counts.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "96 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/colony_counts.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "96 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/colony_counts.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "96 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/colony_counts.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "96 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv.plotvera",
          "method": "CSV -> .plotvera -> re-import",
          "dataset": "smart-import/column_groups_simple.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv.pzfx",
          "method": "CSV -> .pzfx -> re-import",
          "dataset": "smart-import/column_groups_simple.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv.prism",
          "method": "CSV -> .prism -> re-import",
          "dataset": "smart-import/column_groups_simple.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv.csv-per-table",
          "method": "CSV -> CSV per table -> re-import",
          "dataset": "smart-import/column_groups_simple.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "80 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "80 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "80 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "80 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "494 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "494 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "494 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "494 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv.plotvera",
          "method": "CSV -> .plotvera -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "170 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv.pzfx",
          "method": "CSV -> .pzfx -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv.prism",
          "method": "CSV -> .prism -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv.csv-per-table",
          "method": "CSV -> CSV per table -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "204 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "728 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "728 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "728 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "728 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "295 cells, 2 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "7 cells, 1 tables compared; 1 table(s) refused by the exporter with a stated reason, not written: Tumour volume"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "7 cells, 1 tables compared; 1 table(s) refused by the exporter with a stated reason, not written: Tumour volume"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "294 cells compared; 1 one-column table(s) had blank rows, which a CSV line cannot hold; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "57 cells, 2 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "57 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "57 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "57 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv.plotvera",
          "method": "CSV -> .plotvera -> re-import",
          "dataset": "smart-import/plate_384_reader.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "600 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv.pzfx",
          "method": "CSV -> .pzfx -> re-import",
          "dataset": "smart-import/plate_384_reader.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv.prism",
          "method": "CSV -> .prism -> re-import",
          "dataset": "smart-import/plate_384_reader.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv.csv-per-table",
          "method": "CSV -> CSV per table -> re-import",
          "dataset": "smart-import/plate_384_reader.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "600 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "730 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "730 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "730 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "730 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx.plotvera",
          "method": "Excel .xlsx -> .plotvera -> re-import",
          "dataset": "smart-import/survival_mice.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "144 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx.pzfx",
          "method": "Excel .xlsx -> .pzfx -> re-import",
          "dataset": "smart-import/survival_mice.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "144 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx.prism",
          "method": "Excel .xlsx -> .prism -> re-import",
          "dataset": "smart-import/survival_mice.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "144 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx.csv-per-table",
          "method": "Excel .xlsx -> CSV per table -> re-import",
          "dataset": "smart-import/survival_mice.xlsx",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "144 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv.plotvera",
          "method": "CSV -> .plotvera -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "535 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv.pzfx",
          "method": "CSV -> .pzfx -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "535 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv.prism",
          "method": "CSV -> .prism -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "535 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv.csv-per-table",
          "method": "CSV -> CSV per table -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "535 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.labformats-flowjo-table-csv.plotvera",
          "method": "Lab-format CSV -> .plotvera -> re-import",
          "dataset": "labformats/flowjo_table.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.labformats-flowjo-table-csv.pzfx",
          "method": "Lab-format CSV -> .pzfx -> re-import",
          "dataset": "labformats/flowjo_table.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.labformats-flowjo-table-csv.prism",
          "method": "Lab-format CSV -> .prism -> re-import",
          "dataset": "labformats/flowjo_table.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.labformats-flowjo-table-csv.csv-per-table",
          "method": "Lab-format CSV -> CSV per table -> re-import",
          "dataset": "labformats/flowjo_table.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "24 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.labformats-imagej-results-csv.plotvera",
          "method": "Lab-format CSV -> .plotvera -> re-import",
          "dataset": "labformats/imagej_results.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.labformats-imagej-results-csv.pzfx",
          "method": "Lab-format CSV -> .pzfx -> re-import",
          "dataset": "labformats/imagej_results.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.labformats-imagej-results-csv.prism",
          "method": "Lab-format CSV -> .prism -> re-import",
          "dataset": "labformats/imagej_results.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.labformats-imagej-results-csv.csv-per-table",
          "method": "Lab-format CSV -> CSV per table -> re-import",
          "dataset": "labformats/imagej_results.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.labformats-plain-csv.plotvera",
          "method": "Lab-format CSV -> .plotvera -> re-import",
          "dataset": "labformats/plain.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.labformats-plain-csv.pzfx",
          "method": "Lab-format CSV -> .pzfx -> re-import",
          "dataset": "labformats/plain.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.labformats-plain-csv.prism",
          "method": "Lab-format CSV -> .prism -> re-import",
          "dataset": "labformats/plain.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.labformats-plain-csv.csv-per-table",
          "method": "Lab-format CSV -> CSV per table -> re-import",
          "dataset": "labformats/plain.csv",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.json-minimal-project-plotvera-json.plotvera",
          "method": "JSON project -> .plotvera -> re-import",
          "dataset": "json/minimal-project.plotvera.json",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.json-minimal-project-plotvera-json.pzfx",
          "method": "JSON project -> .pzfx -> re-import",
          "dataset": "json/minimal-project.plotvera.json",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.json-minimal-project-plotvera-json.prism",
          "method": "JSON project -> .prism -> re-import",
          "dataset": "json/minimal-project.plotvera.json",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.json-minimal-project-plotvera-json.csv-per-table",
          "method": "JSON project -> CSV per table -> re-import",
          "dataset": "json/minimal-project.plotvera.json",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-column-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-column-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-column-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-column-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-grouped-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-grouped-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-grouped-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-grouped-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-mpl-lines-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-mpl-lines.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "9 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-mpl-lines-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-mpl-lines.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "9 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-mpl-lines-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-mpl-lines.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "9 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-mpl-lines-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-mpl-lines.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "9 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-seaborn-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-seaborn.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "23 cells, 2 tables, 2 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-seaborn-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-seaborn.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "23 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-seaborn-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-seaborn.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "23 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-seaborn-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-seaborn.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "23 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-survival-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-survival-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-survival-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-survival-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-py-xy-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/py-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-py-xy-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/py-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-xy-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/py-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-py-xy-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/py-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-column-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-column-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-column-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-column-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-column.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "6 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-gg-box-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-gg-box.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-box-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-gg-box.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-box-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-gg-box.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-box-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-gg-box.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-gg-facets-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-gg-facets.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 2 tables, 2 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-facets-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-gg-facets.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-facets-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-gg-facets.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-facets-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-gg-facets.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells compared; 2 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-gg-grouped-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-gg-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-grouped-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-gg-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-grouped-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-gg-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-grouped-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-gg-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "14 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-gg-xy-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-gg-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "28 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-xy-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-gg-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "28 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-xy-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-gg-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "28 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-gg-xy-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-gg-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "28 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-grouped-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-grouped-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-grouped-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-grouped-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-grouped.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "10 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-survival-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-survival-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-survival-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-survival-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-survival.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "18 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.integrations-r-xy-plotvera.plotvera",
          "method": ".plotvera (R/Python integration) -> .plotvera -> re-import",
          "dataset": "integrations/r-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables, 1 graphs compared"
        },
        {
          "id": "import-fidelity.integrations-r-xy-plotvera.pzfx",
          "method": ".plotvera (R/Python integration) -> .pzfx -> re-import",
          "dataset": "integrations/r-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-xy-plotvera.prism",
          "method": ".plotvera (R/Python integration) -> .prism -> re-import",
          "dataset": "integrations/r-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.integrations-r-xy-plotvera.csv-per-table",
          "method": ".plotvera (R/Python integration) -> CSV per table -> re-import",
          "dataset": "integrations/r-xy.plotvera",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "21 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-sav.plotvera",
          "method": "Stats file .sav -> .plotvera -> re-import",
          "dataset": "statfiles/tumour.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-sav.pzfx",
          "method": "Stats file .sav -> .pzfx -> re-import",
          "dataset": "statfiles/tumour.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-sav.prism",
          "method": "Stats file .sav -> .prism -> re-import",
          "dataset": "statfiles/tumour.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-sav.csv-per-table",
          "method": "Stats file .sav -> CSV per table -> re-import",
          "dataset": "statfiles/tumour.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-114-dta.plotvera",
          "method": "Stats file .dta -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_114.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-114-dta.pzfx",
          "method": "Stats file .dta -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_114.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-114-dta.prism",
          "method": "Stats file .dta -> .prism -> re-import",
          "dataset": "statfiles/tumour_114.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-114-dta.csv-per-table",
          "method": "Stats file .dta -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_114.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-117-dta.plotvera",
          "method": "Stats file .dta -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_117.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-117-dta.pzfx",
          "method": "Stats file .dta -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_117.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-117-dta.prism",
          "method": "Stats file .dta -> .prism -> re-import",
          "dataset": "statfiles/tumour_117.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-117-dta.csv-per-table",
          "method": "Stats file .dta -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_117.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-dta.plotvera",
          "method": "Stats file .dta -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_118.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-dta.pzfx",
          "method": "Stats file .dta -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_118.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-dta.prism",
          "method": "Stats file .dta -> .prism -> re-import",
          "dataset": "statfiles/tumour_118.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-dta.csv-per-table",
          "method": "Stats file .dta -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_118.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-strl-dta.plotvera",
          "method": "Stats file .dta -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_118_strl.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-strl-dta.pzfx",
          "method": "Stats file .dta -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_118_strl.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-strl-dta.prism",
          "method": "Stats file .dta -> .prism -> re-import",
          "dataset": "statfiles/tumour_118_strl.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-118-strl-dta.csv-per-table",
          "method": "Stats file .dta -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_118_strl.dta",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-compressed-sav.plotvera",
          "method": "Stats file .sav -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_compressed.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-compressed-sav.pzfx",
          "method": "Stats file .sav -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_compressed.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-compressed-sav.prism",
          "method": "Stats file .sav -> .prism -> re-import",
          "dataset": "statfiles/tumour_compressed.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-compressed-sav.csv-per-table",
          "method": "Stats file .sav -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_compressed.sav",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v5-xpt.plotvera",
          "method": "Stats file .xpt -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_v5.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v5-xpt.pzfx",
          "method": "Stats file .xpt -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_v5.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v5-xpt.prism",
          "method": "Stats file .xpt -> .prism -> re-import",
          "dataset": "statfiles/tumour_v5.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v5-xpt.csv-per-table",
          "method": "Stats file .xpt -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_v5.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v8-xpt.plotvera",
          "method": "Stats file .xpt -> .plotvera -> re-import",
          "dataset": "statfiles/tumour_v8.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v8-xpt.pzfx",
          "method": "Stats file .xpt -> .pzfx -> re-import",
          "dataset": "statfiles/tumour_v8.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v8-xpt.prism",
          "method": "Stats file .xpt -> .prism -> re-import",
          "dataset": "statfiles/tumour_v8.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.statfiles-tumour-v8-xpt.csv-per-table",
          "method": "Stats file .xpt -> CSV per table -> re-import",
          "dataset": "statfiles/tumour_v8.xpt",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "30 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/colony_counts.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/colony_counts.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/colony_counts.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "32 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-colony-counts-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/colony_counts.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "22 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv-smart-import.plotvera",
          "method": "CSV via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/column_groups_simple.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv-smart-import.pzfx",
          "method": "CSV via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/column_groups_simple.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv-smart-import.prism",
          "method": "CSV via smart import -> .prism -> re-import",
          "dataset": "smart-import/column_groups_simple.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-column-groups-simple-csv-smart-import.csv-per-table",
          "method": "CSV via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/column_groups_simple.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "27 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "48 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "48 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "48 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-cytokine-grouped-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/cytokine_grouped.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "28 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "84 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "84 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "84 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-elisa-plate-reader-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/elisa_plate_reader.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "62 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv-smart-import.plotvera",
          "method": "CSV via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "117 cells, 3 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv-smart-import.pzfx",
          "method": "CSV via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "117 cells, 3 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv-smart-import.prism",
          "method": "CSV via smart import -> .prism -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "117 cells, 3 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-flowjo-table-export-csv-smart-import.csv-per-table",
          "method": "CSV via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/flowjo_table_export.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "111 cells compared; 3 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "210 cells, 2 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "210 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "210 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-ivis-bli-export-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/ivis_bli_export.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "183 cells compared; 2 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "192 cells, 2 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "192 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "192 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-lab-notebook-wide-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/lab_notebook_wide.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "187 cells compared; 2 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-multi-sheet-workbook-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/multi_sheet_workbook.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "12 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv-smart-import.plotvera",
          "method": "CSV via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/plate_384_reader.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "384 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv-smart-import.pzfx",
          "method": "CSV via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/plate_384_reader.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified PZFX mapping; exporter refuses with a stated reason (nothing written, no silent loss)"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv-smart-import.prism",
          "method": "CSV via smart import -> .prism -> re-import",
          "dataset": "smart-import/plate_384_reader.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "no table has a verified .prism package mapping; exporter refuses with a stated reason (nothing written)"
        },
        {
          "id": "import-fidelity.smart-import-plate-384-reader-csv-smart-import.csv-per-table",
          "method": "CSV via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/plate_384_reader.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "400 cells compared; 1 table(s) needed the first row confirmed as a header in the import preview (numeric titles are not auto-detected); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "60 cells, 2 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "60 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "60 cells, 2 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-qpcr-ct-table-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/qpcr_ct_table.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "48 cells compared; 2 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx-smart-import.plotvera",
          "method": "Excel .xlsx via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/survival_mice.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "72 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx-smart-import.pzfx",
          "method": "Excel .xlsx via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/survival_mice.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "72 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx-smart-import.prism",
          "method": "Excel .xlsx via smart import -> .prism -> re-import",
          "dataset": "smart-import/survival_mice.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "72 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-survival-mice-xlsx-smart-import.csv-per-table",
          "method": "Excel .xlsx via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/survival_mice.xlsx [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "72 cells compared; CSV cannot carry table type, table name or design"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv-smart-import.plotvera",
          "method": "CSV via smart import -> .plotvera -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "114 cells, 1 tables, 0 graphs compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv-smart-import.pzfx",
          "method": "CSV via smart import -> .pzfx -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "114 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv-smart-import.prism",
          "method": "CSV via smart import -> .prism -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "114 cells, 1 tables compared"
        },
        {
          "id": "import-fidelity.smart-import-tidy-long-tumour-csv-smart-import.csv-per-table",
          "method": "CSV via smart import -> CSV per table -> re-import",
          "dataset": "smart-import/tidy_long_tumour.csv [smart import]",
          "reference": "original import",
          "maxRelError": 0,
          "pass": true,
          "detail": "109 cells compared; 1 table(s) with subject/replicate structure written in the two-tier expanded layout (every value checked, layout not); CSV cannot carry table type, table name or design"
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "anova",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:05:00.918Z",
      "cases": [
        {
          "id": "anova1.log10-PlantGrowth",
          "method": "anova1 (log10 test scale)",
          "dataset": "PlantGrowth, log10-transformed before testing (Plotvera test-scale option)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(log10(y) ~ g) [validation/r/anova.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 8.76e-13 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 8.755778915510856e-13,
          "pass": true
        },
        {
          "id": "rmanova1.log10-RoundingTimes",
          "method": "rmanova1 (log10 test scale)",
          "dataset": "RoundingTimes, log10-transformed before testing (Plotvera test-scale option)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(log10(y) ~ cond + Error(subj/cond)) [validation/r/anova.R]",
          "source": "validation/reference/data/RoundingTimes.csv",
          "tolerance": 1e-9,
          "detail": "4 quantities compared; worst relative error 1.08e-12 on P (sphericity assumed). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.0787578695366854e-12,
          "pass": true
        },
        {
          "id": "anova1.PlantGrowth",
          "method": "anova1",
          "dataset": "PlantGrowth (Dobson 1983): ctrl, trt1, trt2 (n = 10 each)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov; Holm-Šídák step-down on pooled-SD t tests computed in anova.R [validation/r/anova.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "18 quantities compared; worst relative error 1.12e-8 on ctrl-trt1 Holm-Šídák P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.1208956514181963e-8,
          "pass": true
        },
        {
          "id": "anova1.tukey.PlantGrowth",
          "method": "anova1 (Tukey HSD)",
          "dataset": "PlantGrowth (Dobson 1983): ctrl, trt1, trt2 (n = 10 each)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::TukeyHSD (ptukey/qtukey) [validation/r/anova.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "12 quantities compared; worst relative error 8.74e-12 on ctrl-trt1 CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tukey-Kramer for unequal n. Mean differences 1e-9; CI bounds 0.000001 of the half-width; adjusted P values 1e-10 absolute because R's ptukey and Plotvera's (jStat port of it) are both 16-point Gauss-Legendre integrals with the upper tail formed as 1 - CDF (see numerical.distributions ptukeyUpper).",
          "maxRelError": 8.737342249260949e-12,
          "pass": true
        },
        {
          "id": "anova1.dunnett.PlantGrowth",
          "method": "anova1 (Dunnett vs first column)",
          "dataset": "PlantGrowth (Dobson 1983): ctrl, trt1, trt2 (n = 10 each)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): multcomp::glht(mcp(g = \"Dunnett\")) + mvtnorm::qmvt, mvtnorm::GenzBretz(maxpts = 5e5, abseps = 1e-5), seed 20261001 [validation/r/anova.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 5.44e-5 on trt2-ctrl CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The R reference is a randomised quasi-Monte-Carlo integral (reported abs. error 1.0e-15), so adjusted P values are compared absolutely at 0.00005 and simultaneous CI bounds at 1e-4 relative to the half-width; mean differences at 1e-9.",
          "maxRelError": 0.00005438173867407095,
          "pass": true
        },
        {
          "id": "anova1.chickwts",
          "method": "anova1",
          "dataset": "chickwts: 6 feeds, unequal n (10-14), casein = control/first column",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov; Holm-Šídák step-down on pooled-SD t tests computed in anova.R [validation/r/anova.R]",
          "source": "validation/reference/data/chickwts_wide.csv",
          "tolerance": 1e-9,
          "detail": "54 quantities compared; worst relative error 3.52e-8 on casein-sunflower Holm-Šídák P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 3.515526168471824e-8,
          "pass": true
        },
        {
          "id": "anova1.tukey.chickwts",
          "method": "anova1 (Tukey HSD)",
          "dataset": "chickwts: 6 feeds, unequal n (10-14), casein = control/first column",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::TukeyHSD (ptukey/qtukey) [validation/r/anova.R]",
          "source": "validation/reference/data/chickwts_wide.csv",
          "tolerance": 1e-9,
          "detail": "60 quantities compared; worst relative error 7.82e-11 on casein-sunflower CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tukey-Kramer for unequal n. Mean differences 1e-9; CI bounds 0.000001 of the half-width; adjusted P values 1e-10 absolute because R's ptukey and Plotvera's (jStat port of it) are both 16-point Gauss-Legendre integrals with the upper tail formed as 1 - CDF (see numerical.distributions ptukeyUpper).",
          "maxRelError": 7.819528097308217e-11,
          "pass": true
        },
        {
          "id": "anova1.dunnett.chickwts",
          "method": "anova1 (Dunnett vs first column)",
          "dataset": "chickwts: 6 feeds, unequal n (10-14), casein = control/first column",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): multcomp::glht(mcp(g = \"Dunnett\")) + mvtnorm::qmvt, mvtnorm::GenzBretz(maxpts = 5e5, abseps = 1e-5), seed 20261001 [validation/r/anova.R]",
          "source": "validation/reference/data/chickwts_wide.csv",
          "tolerance": 1e-9,
          "detail": "20 quantities compared; worst relative error 1.88e-5 on sunflower-casein CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The R reference is a randomised quasi-Monte-Carlo integral (reported abs. error 9.6e-6), so adjusted P values are compared absolutely at 0.00005 and simultaneous CI bounds at 1e-4 relative to the half-width; mean differences at 1e-9.",
          "maxRelError": 0.000018848189600508857,
          "pass": true
        },
        {
          "id": "anova1.InsectSprays",
          "method": "anova1",
          "dataset": "InsectSprays (Beall 1942): 6 sprays, counts with many ties",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov; Holm-Šídák step-down on pooled-SD t tests computed in anova.R [validation/r/anova.R]",
          "source": "validation/reference/data/InsectSprays_wide.csv",
          "tolerance": 1e-9,
          "detail": "54 quantities compared; worst relative error 1.99e-8 on C-D Holm-Šídák P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.994555679517288e-8,
          "pass": true
        },
        {
          "id": "anova1.tukey.InsectSprays",
          "method": "anova1 (Tukey HSD)",
          "dataset": "InsectSprays (Beall 1942): 6 sprays, counts with many ties",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::TukeyHSD (ptukey/qtukey) [validation/r/anova.R]",
          "source": "validation/reference/data/InsectSprays_wide.csv",
          "tolerance": 1e-9,
          "detail": "60 quantities compared; worst relative error 8.03e-11 on C-D CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tukey-Kramer for unequal n. Mean differences 1e-9; CI bounds 0.000001 of the half-width; adjusted P values 1e-10 absolute because R's ptukey and Plotvera's (jStat port of it) are both 16-point Gauss-Legendre integrals with the upper tail formed as 1 - CDF (see numerical.distributions ptukeyUpper).",
          "maxRelError": 8.031447577972577e-11,
          "pass": true
        },
        {
          "id": "anova1.dunnett.InsectSprays",
          "method": "anova1 (Dunnett vs first column)",
          "dataset": "InsectSprays (Beall 1942): 6 sprays, counts with many ties",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): multcomp::glht(mcp(g = \"Dunnett\")) + mvtnorm::qmvt, mvtnorm::GenzBretz(maxpts = 5e5, abseps = 1e-5), seed 20261001 [validation/r/anova.R]",
          "source": "validation/reference/data/InsectSprays_wide.csv",
          "tolerance": 1e-9,
          "detail": "20 quantities compared; worst relative error 3.70e-5 on F-A CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The R reference is a randomised quasi-Monte-Carlo integral (reported abs. error 9.6e-6), so adjusted P values are compared absolutely at 0.00005 and simultaneous CI bounds at 1e-4 relative to the half-width; mean differences at 1e-9.",
          "maxRelError": 0.000036970242589155104,
          "pass": true
        },
        {
          "id": "kruskal.PlantGrowth",
          "method": "kruskal (+ Dunn)",
          "dataset": "PlantGrowth (Dobson 1983): ctrl, trt1, trt2 (n = 10 each)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::kruskal.test; Dunn (1964) z with tie correction computed in the script, Bonferroni [validation/r/anova.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 6.24e-15 on trt1-trt2 P raw. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. H is tie-corrected (R kruskal.test); Dunn z uses the tie-corrected variance. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 6.2446418618631704e-15,
          "pass": true
        },
        {
          "id": "kruskal.chickwts",
          "method": "kruskal (+ Dunn)",
          "dataset": "chickwts: 6 feeds, unequal n (10-14), casein = control/first column",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::kruskal.test; Dunn (1964) z with tie correction computed in the script, Bonferroni [validation/r/anova.R]",
          "source": "validation/reference/data/chickwts_wide.csv",
          "tolerance": 1e-9,
          "detail": "63 quantities compared; worst relative error 1.04e-10 on casein-horsebean P raw. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. H is tie-corrected (R kruskal.test); Dunn z uses the tie-corrected variance. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.0377722377051706e-10,
          "pass": true
        },
        {
          "id": "kruskal.InsectSprays",
          "method": "kruskal (+ Dunn)",
          "dataset": "InsectSprays (Beall 1942): 6 sprays, counts with many ties",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::kruskal.test; Dunn (1964) z with tie correction computed in the script, Bonferroni [validation/r/anova.R]",
          "source": "validation/reference/data/InsectSprays_wide.csv",
          "tolerance": 1e-9,
          "detail": "63 quantities compared; worst relative error 6.50e-10 on C-F P Bonferroni. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. H is tie-corrected (R kruskal.test); Dunn z uses the tie-corrected variance. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 6.498553234600806e-10,
          "pass": true
        },
        {
          "id": "friedman.RoundingTimes",
          "method": "friedman (+ Dunn)",
          "dataset": "RoundingTimes (Hollander & Wolfe 1973, p. 140; R ?friedman.test example): 22 players x 3 methods, ties within rows",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::friedman.test(matrix); Dunn z on within-subject mean ranks, SE sqrt(k(k+1)/(6n)), Bonferroni [validation/r/anova.R]",
          "source": "validation/reference/data/RoundingTimes.csv",
          "tolerance": 1e-9,
          "detail": "16 quantities compared; worst relative error 3.10e-14 on Round Out-Wide Angle P Bonferroni. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Friedman statistic with within-row tie correction (R friedman.test). Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 3.103990961092989e-14,
          "pass": true
        },
        {
          "id": "rmanova1.RoundingTimes",
          "method": "rmanova1",
          "dataset": "RoundingTimes (Hollander & Wolfe 1973): 22 subjects x 3 conditions",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(y ~ cond + Error(subj/cond)); Greenhouse-Geisser from the double-centred covariance (also car::Anova); Huynh-Feldt (1976) formula, capped at 1 [validation/r/anova.R]",
          "source": "validation/reference/data/RoundingTimes.csv",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 3.40e-8 on P (GG). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. GG epsilon also equals car::Anova (0.7735014632705628). Huynh-Feldt is the original 1976 formula (as SPSS); car reports the Lecoutre (1991) variant, which is a different estimator. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 3.3973837149459474e-8,
          "pass": true
        },
        {
          "id": "anova2.ToothGrowth_grouped",
          "method": "anova2",
          "dataset": "ToothGrowth (Crampton 1947): rows supp (OJ, VC) x columns dose (0.5, 1, 2), n = 10 per cell",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): car::Anova(lm(y ~ A * B, contrasts = contr.sum), type = 3) [validation/r/anova.R]",
          "source": "validation/reference/data/ToothGrowth_grouped.csv",
          "tolerance": 1e-9,
          "detail": "14 quantities compared; worst relative error 8.62e-9 on P A. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Type III sums of squares (sum-to-zero contrasts); balanced, so equal to sequential SS. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 8.623662740272681e-9,
          "pass": true
        },
        {
          "id": "anova2.warpbreaks_grouped",
          "method": "anova2",
          "dataset": "warpbreaks (Tippett 1950): rows tension (L, M, H) x columns wool (A, B), n = 9 per cell",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): car::Anova(lm(y ~ A * B, contrasts = contr.sum), type = 3) [validation/r/anova.R]",
          "source": "validation/reference/data/warpbreaks_grouped.csv",
          "tolerance": 1e-9,
          "detail": "14 quantities compared; worst relative error 1.34e-7 on P B. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Type III sums of squares (sum-to-zero contrasts); balanced, so equal to sequential SS. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.3372626501405328e-7,
          "pass": true
        },
        {
          "id": "anova2.warpbreaks_unbalanced_grouped",
          "method": "anova2",
          "dataset": "warpbreaks with rows 1, 2, 3, 20, 47 removed (unbalanced: Type III SS)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): car::Anova(lm(y ~ A * B, contrasts = contr.sum), type = 3) [validation/r/anova.R]",
          "source": "validation/reference/data/warpbreaks_unbalanced_grouped.csv",
          "tolerance": 1e-9,
          "detail": "14 quantities compared; worst relative error 2.21e-8 on P B. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Type III sums of squares (sum-to-zero contrasts); unbalanced design. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 2.2058506888824127e-8,
          "pass": true
        },
        {
          "id": "anova2rm.CO2-colWithin",
          "method": "anova2rm (columns repeated)",
          "dataset": "CO2 uptake (Potvin et al. 1990): rows Type (between, 6 plants each) x columns conc (7 levels, repeated within plant)",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(y ~ A * B + Error(S/B)) (split-plot); car::Anova(mlm, idata, idesign = ~B, type = 3) for Greenhouse-Geisser [validation/r/anova.R]",
          "source": "validation/reference/data/CO2_rm_grouped.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 9.31e-10 on P AB (GG). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Huynh-Feldt compared with the Huynh & Feldt (1976) split-plot formula (N subjects, g groups); car's Lecoutre variant is 0.38584374200433724. Fixed in this release: Plotvera previously used N - 1 instead of N - g (see regression test below). Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 9.308485572790445e-10,
          "pass": true
        },
        {
          "id": "nestedt.Pastes_AB",
          "method": "nestedt",
          "dataset": "lme4::Pastes paste strength, batches A vs B, 3 casks (subjects) x 2 replicate tests",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(y ~ group + Error(subject)); equivalently t.test on subject means (balanced) [validation/r/anova.R]",
          "source": "validation/reference/data/Pastes_AB.csv",
          "tolerance": 1e-9,
          "detail": "4 quantities compared; worst relative error 1.05e-13 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.0517280472398497e-13,
          "pass": true
        },
        {
          "id": "nestedanova.Pastes_AtoE",
          "method": "nestedanova",
          "dataset": "lme4::Pastes paste strength, batches A-E, 3 casks (subjects) x 2 replicate tests",
          "reference": "R 4.3.3 (car 3.1.5, multcomp 1.4.32, mvtnorm 1.4.2, lme4 2.0.6): stats::aov(y ~ group + Error(subject)) [validation/r/anova.R]",
          "source": "validation/reference/data/Pastes_AtoE.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.35e-14 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: SS/MS/F/df/means 1e-9 relative; P values and CI bounds 0.000001 (distribution-function precision).",
          "maxRelError": 1.349690081925104e-14,
          "pass": true
        },
        {
          "id": "nist.anova.SiRstv",
          "method": "anova1",
          "dataset": "NIST StRD SiRstv (25 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SiRstv.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 8.73e-14 on F. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 13.1. Raw file validation/reference/nist/anova/SiRstv.dat.",
          "maxRelError": 8.727825546947985e-14,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs01",
          "method": "anova1",
          "dataset": "NIST StRD SmLs01 (189 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs01.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 7.40e-16 on SS within. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 15.0. Raw file validation/reference/nist/anova/SmLs01.dat.",
          "maxRelError": 7.401486830834376e-16,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs02",
          "method": "anova1",
          "dataset": "NIST StRD SmLs02 (1809 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs02.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 1.04e-15 on MS within. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 15.0. Raw file validation/reference/nist/anova/SmLs02.dat.",
          "maxRelError": 1.0408340855860843e-15,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs03",
          "method": "anova1",
          "dataset": "NIST StRD SmLs03 (18009 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs03.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 1.85e-14 on SS within. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 13.7. Raw file validation/reference/nist/anova/SmLs03.dat.",
          "maxRelError": 1.8474111129762605e-14,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs04",
          "method": "anova1",
          "dataset": "NIST StRD SmLs04 (189 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs04.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 8.87e-11 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 10.1. Raw file validation/reference/nist/anova/SmLs04.dat.",
          "maxRelError": 8.869730347019609e-11,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs05",
          "method": "anova1",
          "dataset": "NIST StRD SmLs05 (1809 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs05.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 1.14e-10 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 9.9. Raw file validation/reference/nist/anova/SmLs05.dat.",
          "maxRelError": 1.1351958621322972e-10,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs06",
          "method": "anova1",
          "dataset": "NIST StRD SmLs06 (18009 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs06.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 1.16e-10 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 9.9. Raw file validation/reference/nist/anova/SmLs06.dat.",
          "maxRelError": 1.1612437925566161e-10,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs07",
          "method": "anova1",
          "dataset": "NIST StRD SmLs07 (189 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs07.dat",
          "tolerance": 0.001,
          "detail": "11 quantities compared; worst relative error 9.30e-5 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 4.0. Raw file validation/reference/nist/anova/SmLs07.dat. Data have 13 significant digits at 0.1 resolution, below binary64 resolution at 1e12 (ulp 1.2e-4); certified values compared at 1e-3, and the sums of squares compared at 1e-12 with exact rational arithmetic on the binary64 inputs Plotvera receives.",
          "maxRelError": 0.000093017500874775,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs08",
          "method": "anova1",
          "dataset": "NIST StRD SmLs08 (1809 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs08.dat",
          "tolerance": 0.001,
          "detail": "11 quantities compared; worst relative error 1.19e-4 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 3.9. Raw file validation/reference/nist/anova/SmLs08.dat. Data have 13 significant digits at 0.1 resolution, below binary64 resolution at 1e12 (ulp 1.2e-4); certified values compared at 1e-3, and the sums of squares compared at 1e-12 with exact rational arithmetic on the binary64 inputs Plotvera receives.",
          "maxRelError": 0.00011904752513929673,
          "pass": true
        },
        {
          "id": "nist.anova.SmLs09",
          "method": "anova1",
          "dataset": "NIST StRD SmLs09 (18009 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/SmLs09.dat",
          "tolerance": 0.001,
          "detail": "11 quantities compared; worst relative error 1.22e-4 on SS between. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 3.9. Raw file validation/reference/nist/anova/SmLs09.dat. Data have 13 significant digits at 0.1 resolution, below binary64 resolution at 1e12 (ulp 1.2e-4); certified values compared at 1e-3, and the sums of squares compared at 1e-12 with exact rational arithmetic on the binary64 inputs Plotvera receives.",
          "maxRelError": 0.000121779333615114,
          "pass": true
        },
        {
          "id": "nist.anova.AtmWtAg",
          "method": "anova1",
          "dataset": "NIST StRD AtmWtAg (48 observations)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/anova/AtmWtAg.dat",
          "tolerance": 1e-9,
          "detail": "9 quantities compared; worst relative error 7.00e-11 on F. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum log relative error (LRE, digits of agreement with the certified values) 10.2. Raw file validation/reference/nist/anova/AtmWtAg.dat.",
          "maxRelError": 6.998775740914592e-11,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "describe",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:06:08.504Z",
      "cases": [
        {
          "id": "descriptive.precip",
          "method": "descriptive",
          "dataset": "precip: annual precipitation, 70 US cities",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_precip.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 1.30e-9 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.2964954448422892e-9,
          "pass": true
        },
        {
          "id": "descriptive.rivers",
          "method": "descriptive",
          "dataset": "rivers: lengths of 141 North American rivers (skewed)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_rivers.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.47e-9 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.4730071284395806e-9,
          "pass": true
        },
        {
          "id": "descriptive.mtcars_mpg",
          "method": "descriptive",
          "dataset": "mtcars mpg (n = 32)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_mtcars_mpg.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.35e-9 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.3518869036748496e-9,
          "pass": true
        },
        {
          "id": "descriptive.PlantGrowth_weight",
          "method": "descriptive",
          "dataset": "PlantGrowth weight (n = 30)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_PlantGrowth_weight.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 8.25e-10 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 8.246856694629506e-10,
          "pass": true
        },
        {
          "id": "descriptive.women_weight",
          "method": "descriptive",
          "dataset": "women weight (n = 15)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_women_weight.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.06e-10 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.0605257880399428e-10,
          "pass": true
        },
        {
          "id": "descriptive.faithful_eruptions",
          "method": "descriptive",
          "dataset": "faithful eruption durations (n = 272, bimodal)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_faithful_eruptions.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 1.23e-9 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.2316679318866487e-9,
          "pass": true
        },
        {
          "id": "descriptive.morley_speed",
          "method": "descriptive",
          "dataset": "morley: Michelson speed-of-light runs (n = 100)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_morley_speed.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 4.85e-10 on 95% CI of mean lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 4.847294069270033e-10,
          "pass": true
        },
        {
          "id": "descriptive.sleep_extra_n3",
          "method": "descriptive",
          "dataset": "sleep extra, first 3 values (Shapiro-Wilk exact n = 3 branch)",
          "reference": "R 4.3.3: mean, var, sd, qt; quantile(type = 6); adjusted skewness G1 and excess kurtosis G2 (Joanes & Gill 1998 b/G) from moments [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_sleep_extra_n3.csv",
          "tolerance": 1e-9,
          "detail": "14 quantities compared; worst relative error 1.57e-10 on 95% CI of mean upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Quartiles by Hyndman & Fan definition 6 (R quantile type = 6, Prism's method). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.5736956850552378e-10,
          "pass": true
        },
        {
          "id": "normality.precip",
          "method": "normality",
          "dataset": "precip: annual precipitation, 70 US cities",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_precip.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 9.63e-10 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 9.625532985709969e-10,
          "pass": true
        },
        {
          "id": "normality.rivers",
          "method": "normality",
          "dataset": "rivers: lengths of 141 North American rivers (skewed)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_rivers.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 1.40e-10 on Shapiro-Wilk W. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 1.3997645527054464e-10,
          "pass": true
        },
        {
          "id": "normality.mtcars_mpg",
          "method": "normality",
          "dataset": "mtcars mpg (n = 32)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_mtcars_mpg.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 5.11e-10 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 5.11121699245512e-10,
          "pass": true
        },
        {
          "id": "normality.PlantGrowth_weight",
          "method": "normality",
          "dataset": "PlantGrowth weight (n = 30)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_PlantGrowth_weight.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 1.23e-9 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 1.228688299048398e-9,
          "pass": true
        },
        {
          "id": "normality.women_weight",
          "method": "normality",
          "dataset": "women weight (n = 15)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_women_weight.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 4.31e-9 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 4.314897402494108e-9,
          "pass": true
        },
        {
          "id": "normality.faithful_eruptions",
          "method": "normality",
          "dataset": "faithful eruption durations (n = 272, bimodal)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_faithful_eruptions.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 1.54e-11 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 1.543348018536269e-11,
          "pass": true
        },
        {
          "id": "normality.morley_speed",
          "method": "normality",
          "dataset": "morley: Michelson speed-of-light runs (n = 100)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_morley_speed.csv",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 1.42e-9 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 1.4181344977846829e-9,
          "pass": true
        },
        {
          "id": "normality.sleep_extra_n3",
          "method": "normality",
          "dataset": "sleep extra, first 3 values (Shapiro-Wilk exact n = 3 branch)",
          "reference": "R 4.3.3: stats::shapiro.test (Royston 1995 AS R94); KS-Lilliefors D and Anderson-Darling A2/A* from their definitions; AD P from the D'Agostino & Stephens (1986) piecewise formula [validation/r/normality.R]",
          "source": "validation/reference/data/univariate_sleep_extra_n3.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.64e-15 on Shapiro-Wilk P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Shapiro-Wilk W at 1e-7 (both sides evaluate Royston's polynomial approximations to the coefficients) and P at 0.000001. KS-Lilliefors D and Anderson-Darling A* are compared with their definitions; the Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed. The AD P value is checked against the published D'Agostino & Stephens (1986) formula written out in normality.R, an independent transcription rather than an R package result.",
          "maxRelError": 3.644670274584799e-15,
          "pass": true
        },
        {
          "id": "nist.univ.PiDigits",
          "method": "descriptive",
          "dataset": "NIST StRD PiDigits (n = 5000)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/PiDigits.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 6.20e-16 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 15.0 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/PiDigits.dat.",
          "maxRelError": 6.195140518963916e-16,
          "pass": true
        },
        {
          "id": "nist.univ.Lottery",
          "method": "descriptive",
          "dataset": "NIST StRD Lottery (n = 218)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/Lottery.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 6.57e-16 on mean. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 15.0 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/Lottery.dat.",
          "maxRelError": 6.572016287903347e-16,
          "pass": true
        },
        {
          "id": "nist.univ.Lew",
          "method": "descriptive",
          "dataset": "NIST StRD Lew (n = 200)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/Lew.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.10e-16 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 15.0 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/Lew.dat.",
          "maxRelError": 4.0993022382982113e-16,
          "pass": true
        },
        {
          "id": "nist.univ.Mavro",
          "method": "descriptive",
          "dataset": "NIST StRD Mavro (n = 50)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/Mavro.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 7.57e-14 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 13.1 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/Mavro.dat.",
          "maxRelError": 7.567019412019795e-14,
          "pass": true
        },
        {
          "id": "nist.univ.Michelso",
          "method": "descriptive",
          "dataset": "NIST StRD Michelso (n = 100)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/Michelso.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.42e-14 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 13.8 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/Michelso.dat.",
          "maxRelError": 1.4227224635973437e-14,
          "pass": true
        },
        {
          "id": "nist.univ.NumAcc1",
          "method": "descriptive",
          "dataset": "NIST StRD NumAcc1 (n = 3)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc1.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 15.0 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/NumAcc1.dat.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "nist.univ.NumAcc2",
          "method": "descriptive",
          "dataset": "NIST StRD NumAcc2 (n = 1001)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc2.dat",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.78e-16 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 15.0 (NIST certifies 15 digits). Mean held to 1e-14. SD held to 1e-9. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/NumAcc2.dat.",
          "maxRelError": 2.7755575615628914e-16,
          "pass": true
        },
        {
          "id": "nist.univ.NumAcc3",
          "method": "descriptive",
          "dataset": "NIST StRD NumAcc3 (n = 1001)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc3.dat",
          "tolerance": 1e-7,
          "detail": "3 quantities compared; worst relative error 3.49e-10 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 9.5 (NIST certifies 15 digits). Mean held to 1e-14. Inputs not exactly representable in binary64 (8 constant leading digits); SD held to 1e-7 vs certified and 1e-12 vs exact arithmetic on the binary64 inputs. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/NumAcc3.dat.",
          "maxRelError": 3.492460487475313e-10,
          "pass": true
        },
        {
          "id": "nist.univ.NumAcc4",
          "method": "descriptive",
          "dataset": "NIST StRD NumAcc4 (n = 1001)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/univ/data/NumAcc4.dat",
          "tolerance": 1e-7,
          "detail": "3 quantities compared; worst relative error 5.59e-9 on SD. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. LRE mean 15.0, SD 8.3 (NIST certifies 15 digits). Mean held to 1e-14. Inputs not exactly representable in binary64 (8 constant leading digits); SD held to 1e-7 vs certified and 1e-12 vs exact arithmetic on the binary64 inputs. The certified lag-1 autocorrelation is not checked: Plotvera does not offer autocorrelation. Raw file validation/reference/nist/univ/NumAcc4.dat.",
          "maxRelError": 5.58793539218172e-9,
          "pass": true
        },
        {
          "id": "chisq.fisher-TeaTasting",
          "method": "chisq",
          "dataset": "Fisher's Lady Tasting Tea (Fisher 1935; R ?fisher.test): 3, 1 / 1, 3",
          "reference": "R 4.3.3: stats::fisher.test (two-sided); stats::chisq.test(correct = TRUE); sample odds ratio ad/bc [validation/r/contingency.R]",
          "source": "validation/reference/data/TeaTasting.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 4.65e-14 on Yates P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera reports the sample odds ratio (ad/bc = 9); R's fisher.test estimate is the conditional MLE (6.408308867005788), a different estimator, so the sample OR is compared with its definition. The Baptista-Pike OR CI has no independent reference here (exact2x2 not installed). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 4.653905549217985e-14,
          "pass": true
        },
        {
          "id": "chisq.fisher-Convictions",
          "method": "chisq",
          "dataset": "Convictions of like-sex twins of criminals (Fisher 1962; R ?fisher.test): 2, 10 / 15, 3",
          "reference": "R 4.3.3: stats::fisher.test (two-sided); stats::chisq.test(correct = TRUE); sample odds ratio ad/bc [validation/r/contingency.R]",
          "source": "validation/reference/data/Convictions.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 3.21e-14 on Yates P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera reports the sample odds ratio (ad/bc = 0.04); R's fisher.test estimate is the conditional MLE (0.04693660882769891), a different estimator, so the sample OR is compared with its definition. The Baptista-Pike OR CI has no independent reference here (exact2x2 not installed). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 3.214164796672544e-14,
          "pass": true
        },
        {
          "id": "chisq.HairEyeColor",
          "method": "chisq",
          "dataset": "HairEyeColor summed over sex: 4 hair x 4 eye colours (n = 592)",
          "reference": "R 4.3.3: stats::chisq.test(m) (Pearson, no continuity correction for r x c) [validation/r/contingency.R]",
          "source": "validation/reference/data/HairEyeColor_hair_by_eye.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.33e-19 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.3252867870988083e-19,
          "pass": true
        },
        {
          "id": "chisq.HairEyeColor-2x3",
          "method": "chisq",
          "dataset": "HairEyeColor black/brown hair x brown/blue/hazel eyes (2 x 3)",
          "reference": "R 4.3.3: stats::chisq.test(m) [validation/r/contingency.R]",
          "source": "validation/reference/data/HairEyeColor_2x3.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.06e-14 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.0626526653659253e-14,
          "pass": true
        },
        {
          "id": "diag2x2.mtcars-wt-auto",
          "method": "diag2x2",
          "dataset": "mtcars: test = weight > 3000 lb, condition = automatic transmission (TP 18, FP 2, FN 1, TN 11)",
          "reference": "R 4.3.3: proportions; Wilson score CI = stats::prop.test(x, n, correct = FALSE)$conf.int; LR+ = sens/(1-spec), LR- = (1-sens)/spec [validation/r/contingency.R]",
          "source": "validation/reference/data/mtcars_diagnostic_2x2.csv",
          "tolerance": 1e-9,
          "detail": "20 quantities compared; worst relative error 1.40e-14 on spec Wilson CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Percentages divided by 100 before comparison. Wilson score intervals match prop.test(correct = FALSE). Tolerances: closed-form values 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.4030254151924647e-14,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "distributions",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:05:58.630Z",
      "cases": [
        {
          "id": "distribution.pTwoT",
          "method": "Two-tailed t P value",
          "dataset": "99-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: 2 * pt(-|t|, df) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "99 quantities compared; worst relative error 3.66e-8 on pTwoT(0.1, 100). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 3.659699520660725e-8,
          "pass": true
        },
        {
          "id": "distribution.tInv",
          "method": "t quantile",
          "dataset": "72-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: qt(p, df) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "72 quantities compared; worst relative error 5.66e-8 on tInv(0.75, 1). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 5.6571711870567754e-8,
          "pass": true
        },
        {
          "id": "distribution.pF",
          "method": "F upper-tail P value",
          "dataset": "168-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: pf(F, d1, d2, lower.tail = FALSE) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "168 quantities compared; worst relative error 1.87e-7 on pF(3, 1, 46). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 1.8708164435998235e-7,
          "pass": true
        },
        {
          "id": "distribution.pChi",
          "method": "Chi-square upper-tail P value",
          "dataset": "54-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: pchisq(x, df, lower.tail = FALSE) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "54 quantities compared; worst relative error 4.13e-11 on pChi(40, 2). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 4.12931105366855e-11,
          "pass": true
        },
        {
          "id": "distribution.normCDF",
          "method": "Standard normal CDF",
          "dataset": "12-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: pnorm(z) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "12 quantities compared; worst relative error 1.24e-13 on normCDF(-6). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 1.2436991381979792e-13,
          "pass": true
        },
        {
          "id": "distribution.normInv",
          "method": "Standard normal quantile",
          "dataset": "9-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: qnorm(p) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "9 quantities compared; worst relative error 2.16e-15 on normInv(0.001). Tolerance 0.000001, relative; probabilities use |a - e| / max(e, 0.000001) so P values below 0.000001 are held to 1e-12 absolute (upper tails are 1 - CDF: values below ~1e-16 return 0, displayed \"< 0.0001\").",
          "maxRelError": 2.155610804551986e-15,
          "pass": true
        },
        {
          "id": "distribution.ptukeyUpper",
          "method": "Studentized range upper-tail P (Tukey)",
          "dataset": "81-point grid of arguments (validation/r/distributions.R)",
          "reference": "R 4.3.3: ptukey(q, k, df, lower.tail = FALSE) [validation/r/distributions.R]",
          "tolerance": 0.000001,
          "detail": "81 quantities compared. Absolute tolerance 1e-10: both R's ptukey and jStat.tukey (a port of it) integrate numerically (16-point Gauss-Legendre) and form the upper tail as 1 - CDF, so agreement is absolute, not relative.",
          "maxRelError": 0,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "misc",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:05:24.384Z",
      "cases": [
        {
          "id": "xy.Indometh1",
          "method": "auc / integral / derivative / smooth",
          "dataset": "Indometh subject 1: conc vs time (11 unequally spaced points)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): trapezoid sum(diff(x)*(y[-n]+y[-1])/2); cumsum; central differences (forward/backward at ends); zoo::rollapply(y, 5, mean, partial = TRUE) [validation/r/misc.R]",
          "source": "validation/reference/data/Indometh_subject1.csv",
          "tolerance": 1e-9,
          "detail": "35 quantities compared; worst relative error 2.19e-16 on moving average (window 5) at row 6. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Trapezoidal rule; central differences with one-sided ends; centred moving average whose window shrinks at the ends (zoo::rollapply partial = TRUE). Cumulative areas scaled by the total area.",
          "maxRelError": 2.1854783949314106e-16,
          "pass": true
        },
        {
          "id": "xy.nottem-anomaly",
          "method": "auc (signed areas) / smooth (Savitzky-Golay)",
          "dataset": "nottem 1920-1921 monthly temperature minus its mean (crosses zero)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): net trapezoid area; positive/negative areas split at linear zero crossings; Savitzky-Golay = local quadratic lm() fit over 7 points (interior points) [validation/r/misc.R]",
          "source": "validation/reference/data/nottem_anomaly.csv",
          "tolerance": 1e-9,
          "detail": "21 quantities compared; worst relative error 4.10e-14 on Savitzky-Golay(7) at month 16. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Positive/negative areas split segments at linear zero crossings. Savitzky-Golay (engine smoothXY, window 7, quadratic) compared at interior points only: Plotvera clamps the window at the ends (repeats the end value), a convention with no R equivalent; the R reference is an explicit local quadratic least-squares fit, independent of the tabulated coefficients. Smoothed values scaled by max(|value|, 1).",
          "maxRelError": 4.0956065845869496e-14,
          "pass": true
        },
        {
          "id": "roc.mtcars-wt-automatic",
          "method": "roc",
          "dataset": "mtcars: weight as a marker of automatic transmission (19 vs 13)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): AUC = Mann-Whitney U/(n1 n0) (stats::wilcox.test); Hanley-McNeil (1982) SE; Youden J over observed thresholds (positive if marker >= threshold) [validation/r/misc.R]",
          "source": "validation/reference/data/roc_mtcars.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 2.76e-15 on AUC 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Hanley-McNeil interval truncated to [0, 1] on both sides. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.75726930821322e-15,
          "pass": true
        },
        {
          "id": "roc.infert-spontaneous",
          "method": "roc",
          "dataset": "infert: number of prior spontaneous abortions as a marker of case status (83 cases, 165 controls; heavy ties)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): AUC = Mann-Whitney U/(n1 n0) (stats::wilcox.test); Hanley-McNeil (1982) SE; Youden J over observed thresholds (positive if marker >= threshold) [validation/r/misc.R]",
          "source": "validation/reference/data/roc_infert.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 3.21e-15 on AUC 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Hanley-McNeil interval truncated to [0, 1] on both sides. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 3.206993808858652e-15,
          "pass": true
        },
        {
          "id": "blandaltman.sleep",
          "method": "blandaltman",
          "dataset": "sleep: drug 1 vs drug 2 treated as two methods on 10 patients",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): bias = mean(d); LoA = bias +/- 1.96 SD (Bland & Altman 1986); CIs: bias +/- t SD/sqrt(n), LoA +/- t sqrt(3 SD^2/n) (Bland & Altman 1986) [validation/r/misc.R]",
          "source": "validation/reference/data/sleep_bland_altman.csv",
          "tolerance": 1e-9,
          "detail": "10 quantities compared; worst relative error 2.02e-9 on bias 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Limits of agreement use the conventional 1.96 multiplier, and their CIs the approximate SE sqrt(3 s²/n), both from Bland & Altman (1986); the R reference uses the same definitions (the 1999 paper's sqrt(1/n + 1.96²/(2(n-1))) gives slightly narrower intervals). Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.024394541733082e-9,
          "pass": true
        },
        {
          "id": "grubbs.mtcars-hp",
          "method": "grubbs",
          "dataset": "mtcars horsepower (n = 32; Maserati Bora 335 hp)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): G = max|x - mean|/sd; two-sided critical value (n-1)/sqrt(n) sqrt(t^2/(n-2+t^2)), t = qt(0.05/(2n), n-2) (Grubbs 1969) [validation/r/misc.R]",
          "source": "validation/reference/data/grubbs_mtcars-hp.csv",
          "tolerance": 1e-9,
          "detail": "4 quantities compared; worst relative error 1.34e-9 on critical value (alpha 0.05, two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The R package 'outliers' is not installed; the statistic and two-sided critical value are computed from Grubbs' (1969) formulas in misc.R. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.335302667661842e-9,
          "pass": true
        },
        {
          "id": "grubbs.precip",
          "method": "grubbs",
          "dataset": "precip (n = 70)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): G = max|x - mean|/sd; two-sided critical value (n-1)/sqrt(n) sqrt(t^2/(n-2+t^2)), t = qt(0.05/(2n), n-2) (Grubbs 1969) [validation/r/misc.R]",
          "source": "validation/reference/data/grubbs_precip.csv",
          "tolerance": 1e-9,
          "detail": "4 quantities compared; worst relative error 3.43e-10 on critical value (alpha 0.05, two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The R package 'outliers' is not installed; the statistic and two-sided critical value are computed from Grubbs' (1969) formulas in misc.R. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 3.4340875916177075e-10,
          "pass": true
        },
        {
          "id": "rout.mtcars-hp",
          "method": "rout (robust MAD + BH screening)",
          "dataset": "mtcars horsepower (n = 32; Maserati Bora 335 hp)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): robust z = |x - median|/(MAD/0.6745), two-sided normal P, stats::p.adjust(method = 'BH') (Plotvera's documented screening rule) [validation/r/misc.R]",
          "source": "validation/reference/data/grubbs_mtcars-hp.csv",
          "tolerance": 1e-9,
          "detail": "98 quantities compared; worst relative error 8.73e-15 on P row 31. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera's own documented screening rule (not GraphPad's ROUT): z = |x - median|/(MAD/0.6745) with the rounded constant 0.6745 as documented, two-sided normal P, Benjamini-Hochberg. Robust z scaled by max(|z|, 1). Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 8.729449018967109e-15,
          "pass": true
        },
        {
          "id": "rout.precip",
          "method": "rout (robust MAD + BH screening)",
          "dataset": "precip (n = 70)",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): robust z = |x - median|/(MAD/0.6745), two-sided normal P, stats::p.adjust(method = 'BH') (Plotvera's documented screening rule) [validation/r/misc.R]",
          "source": "validation/reference/data/grubbs_precip.csv",
          "tolerance": 1e-9,
          "detail": "212 quantities compared; worst relative error 5.76e-14 on BH row 1. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera's own documented screening rule (not GraphPad's ROUT): z = |x - median|/(MAD/0.6745) with the rounded constant 0.6745 as documented, two-sided normal P, Benjamini-Hochberg. Robust z scaled by max(|z|, 1). Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 5.76206294526378e-14,
          "pass": true
        },
        {
          "id": "multittest.CO2-nonchilled",
          "method": "multittest",
          "dataset": "CO2 uptake, nonchilled plants: Quebec (3) vs Mississippi (3) at each of 7 concentrations",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): stats::t.test(var.equal = FALSE) per row; stats::p.adjust('BH' / 'holm') [validation/r/misc.R]",
          "source": "validation/reference/data/CO2_multiple_t.csv",
          "tolerance": 0.000001,
          "detail": "21 quantities compared; worst relative error 1.46e-12 on conc500 P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Welch t test per row; adjusted with Benjamini-Hochberg and with Holm. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.4607334709481123e-12,
          "pass": true
        },
        {
          "id": "stdcurve.DNase-4PL",
          "method": "stdcurve",
          "dataset": "DNase ELISA: run 1 standards (16 points, 4PL on linear concentration), 4 run-2 readings as unknowns",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): stats::nls 4PL Bottom + (Top-Bottom)/(1+(conc/EC50)^(-Hill)); investr::invest(interval = 'inversion') (calibration interval for one new reading) [validation/r/misc.R]",
          "source": "validation/reference/data/DNase_run1_standards.csv",
          "tolerance": 0.0001,
          "detail": "20 quantities compared; worst relative error 2.14e-7 on Hill SE. Engine standardCurve (the analysis behind \"Standard curve: read unknowns\"). Both fits are iterative (Plotvera LM; R nls to relative offset 1e-7) and both inversion intervals are root searches, so parameters are held to 1e-4 of their SE and interpolated concentrations and calibration limits to 1e-4 relative.",
          "maxRelError": 2.1406396476811685e-7,
          "pass": true
        },
        {
          "id": "tcauc.ChickWeight",
          "method": "tcauc",
          "dataset": "ChickWeight: per-chick AUC over days 0-21 for the 45 chicks weighed at all 12 times, 4 diets",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): trapezoid AUC per chick; stats::aov(auc ~ diet) [validation/r/misc.R]",
          "source": "validation/reference/data/ChickWeight_long.csv",
          "tolerance": 1e-9,
          "detail": "49 quantities compared; worst relative error 1.61e-9 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Only chicks weighed at all 12 times are passed, so Plotvera's common window is the full day 0-21 range used in R. Tolerances: closed-form 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.6067562317404636e-9,
          "pass": true
        },
        {
          "id": "tcmixed.ChickWeight",
          "method": "tcmixed",
          "dataset": "ChickWeight: all 578 weights of 50 chicks (dropouts kept), diet x day, random intercept per chick",
          "reference": "R 4.3.3 (zoo 1.9.1, investr 1.4.2, lme4 2.0.6, lmerTest 3.2.1, emmeans 2.0.4): lmerTest::lmer(weight ~ Diet * factor(Time) + (1 | Chick), REML, sum-to-zero contrasts); anova(type = 3, ddf = 'Satterthwaite') [validation/r/misc.R]",
          "source": "validation/reference/data/ChickWeight_long.csv",
          "tolerance": 0.000001,
          "detail": "14 quantities compared; worst relative error 4.06e-6 on Arm P. Engine fitMixedTimeCourse (behind \"Mixed-effects model (arm × time)\"). REML is a one-dimensional numerical optimisation on both sides (Plotvera profiles the variance ratio; lme4 uses its own optimiser), so variance components and F are held to 1e-6 and Satterthwaite df and P values to 1e-5 relative.",
          "maxRelError": 0.000004061965621837094,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "nist",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:03:14.259Z",
      "cases": [
        {
          "id": "nist.lls.Norris",
          "method": "linreg",
          "dataset": "NIST StRD Norris (n = 36)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Norris.dat",
          "tolerance": 1e-9,
          "detail": "6 quantities compared; worst relative error 1.70e-13 on B0. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum LRE 12.8 (digits of agreement with 15-digit certified values). Raw file validation/reference/nist/lls/Norris.dat.",
          "maxRelError": 1.6950255841596375e-13,
          "pass": true
        },
        {
          "id": "nist.lls.Longley",
          "method": "mlregress",
          "dataset": "NIST StRD Longley (n = 16, 6 collinear predictors)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Longley.dat",
          "tolerance": 1e-9,
          "detail": "16 quantities compared; worst relative error 4.16e-12 on B1. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Minimum LRE 11.4. Longley's design is severely collinear (condition number ~1e7 after centring). Raw file validation/reference/nist/lls/Longley.dat.",
          "maxRelError": 4.164602619298563e-12,
          "pass": true
        },
        {
          "id": "nist.lls.Pontius",
          "method": "curvefit: poly2",
          "dataset": "NIST StRD Pontius (n = 40)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Pontius.dat",
          "tolerance": 1e-9,
          "detail": "14 quantities compared; worst relative error 3.48e-10 on B0 (curve fit, LM). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Closed-form polynomial (fitWizard polynomialFit) held to 1e-9; the built-in poly2 curve fit is solved iteratively by Levenberg-Marquardt, so its estimates are held to 1e-6, SDs 1e-4, residual SD 1e-8. Minimum LRE 9.5. Raw file validation/reference/nist/lls/Pontius.dat.",
          "maxRelError": 3.481674581979311e-10,
          "pass": true
        },
        {
          "id": "nist.lls.NoInt1",
          "method": "customfit",
          "dataset": "NIST StRD NoInt1 (n = 11)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/NoInt1.dat",
          "pass": false,
          "tolerance": 0.000001,
          "detail": "NOT MATCHED. KNOWN LIMITATION: Plotvera withholds a fit whose centred R² is negative (\"fits worse than the response mean\"). For this no-intercept model that R² is -0.157 while NIST certifies the uncentred R²; the estimate B1 = 2.074380165302 itself agrees with the certified value to 11 digits. Plotvera output: Fitted Custom fit. R² = -0.15702479338842767, Sy.x = 3.5675303400633758. B1 = 2.074380165302114. Note: the numerical candidate fits worse than the response mean and is unavailable for citation."
        },
        {
          "id": "nist.lls.NoInt2",
          "method": "customfit",
          "dataset": "NIST StRD NoInt2 (n = 3)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/NoInt2.dat",
          "tolerance": 0.000001,
          "detail": "3 quantities compared; worst relative error 2.15e-11 on B1. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Entered as a user equation and solved by Levenberg-Marquardt from Plotvera's automatic starting values: estimates 1e-6, SDs 1e-4, residual SD 1e-8. Minimum LRE 10.7. Raw file validation/reference/nist/lls/NoInt2.dat.",
          "maxRelError": 2.1491017299091207e-11,
          "pass": true
        },
        {
          "id": "nist.lls.Wampler1",
          "method": "customfit",
          "dataset": "NIST StRD Wampler1 (n = 21)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Wampler1.dat",
          "tolerance": 0.000001,
          "detail": "13 quantities compared. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Entered as a user equation and solved by Levenberg-Marquardt from Plotvera's automatic starting values: estimates 1e-6, SDs 1e-4, residual SD 1e-8 (exact-fit problem: certified residual SD and parameter SDs are 0, compared absolutely). Minimum LRE 15.0. Raw file validation/reference/nist/lls/Wampler1.dat.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "nist.lls.Wampler2",
          "method": "customfit",
          "dataset": "NIST StRD Wampler2 (n = 21)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Wampler2.dat",
          "tolerance": 0.000001,
          "pass": false,
          "maxRelError": 0.00036417415002305484,
          "detail": "KNOWN LIMITATION: Exact-fit data (certified residual ~0): the optimiser stops once SSR <= 1e-12 x total SS (\"Converged: residuals reached the error tolerance\"), which leaves the estimates correct to only 2-5 significant digits. Minimum LRE 3.4. NOT MATCHED: B0 0.9999912762242609 vs 1; B0 SD 0.000002507542892674518 vs 0; B1 0.10001029031708633 vs 0.1; B1 SD 0.000002753628714199255 vs 0."
        },
        {
          "id": "nist.lls.Wampler3",
          "method": "customfit",
          "dataset": "NIST StRD Wampler3 (n = 21)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Wampler3.dat",
          "pass": false,
          "tolerance": 0.000001,
          "detail": "NOT MATCHED. KNOWN LIMITATION: Reported \"did not fully converge\" (iteration limit) on this ill-conditioned degree-5 polynomial entered as a custom equation; Plotvera has no linear least-squares polynomial above degree 3. Plotvera output: Fitted Custom fit. R² = 0.9999955590258199, Sy.x = 2360.145023792655. B0 = 0.9999965053192701, B1 = 1.0000017078595758, B2 = 0.9999985973164451, B3 = 0.9999996408481227, B4 = 1.0000000476061588, B5 = 0.9999999987001327. Note: the fit did not fully converge."
        },
        {
          "id": "nist.lls.Wampler4",
          "method": "customfit",
          "dataset": "NIST StRD Wampler4 (n = 21)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Wampler4.dat",
          "pass": false,
          "tolerance": 0.000001,
          "detail": "NOT MATCHED. KNOWN LIMITATION: The automatic start (all parameters 1) is already the certified solution; a fit that cannot improve on its start is not labelled converged, so Plotvera withholds it. Plotvera output: Fitted Custom fit. R² = 0.9574784408256621, Sy.x = 236014.50237926765. B0 = 1, B1 = 1, B2 = 1, B3 = 1, B4 = 1, B5 = 1. Note: the fit did not fully converge."
        },
        {
          "id": "nist.lls.Wampler5",
          "method": "customfit",
          "dataset": "NIST StRD Wampler5 (n = 21)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Wampler5.dat",
          "pass": false,
          "tolerance": 0.000001,
          "detail": "NOT MATCHED. KNOWN LIMITATION: The automatic start (all parameters 1) is already the certified solution; a fit that cannot improve on its start is not labelled converged, so Plotvera withholds it. Plotvera output: Fitted Custom fit. R² = 0.0022466892157494422, Sy.x = 23601450.237926763. B0 = 1, B1 = 1, B2 = 1, B3 = 1, B4 = 1, B5 = 1. Note: the fit did not fully converge."
        },
        {
          "id": "nist.lls.Filip",
          "method": "customfit",
          "dataset": "NIST StRD Filip (n = 82)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/lls/data/LINKS/DATA/Filip.dat",
          "pass": false,
          "tolerance": 0.000001,
          "detail": "NOT MATCHED. KNOWN LIMITATION: Degree-10 polynomial: refused by the custom-fit work budget; Plotvera has no linear least-squares polynomial above degree 3. Plotvera output: Custom nonlinear fitting was not run because the combination of 82 points, 11 fitted parameters, and 29 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.Misra1a.start1",
          "method": "customfit",
          "dataset": "NIST StRD Misra1a (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1a.dat",
          "tolerance": 0.00001,
          "maxRelError": 5.524423096570758e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 500, 0.0001. Converged flag: yes (restart-stable). Minimum LRE 6.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.12455138894773993 (certified 0.12455138894)."
        },
        {
          "id": "nist.nls.Misra1a.start2",
          "method": "customfit",
          "dataset": "NIST StRD Misra1a (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1a.dat",
          "tolerance": 0.00001,
          "maxRelError": 5.41786199015757e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 250, 0.0005. Converged flag: yes (restart-stable). Minimum LRE 6.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.1245513889450045 (certified 0.12455138894)."
        },
        {
          "id": "nist.nls.Misra1a.auto",
          "method": "customfit",
          "dataset": "NIST StRD Misra1a (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1a.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 6761.787892857142 (certified 0.12455138894). NOT MATCHED: b1 43.34071428569311 vs 238.94212918; b2 1 vs 0.00055015643181; b1 SD NaN vs 2.7070075241; b2 SD NaN vs 0.0000072668688436; ...."
        },
        {
          "id": "nist.nls.Chwirut2.start1",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut2 (Lower difficulty, n = 54)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut2.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From this start Plotvera stops away from the minimum and now says so (\"not a least-squares minimum\"; before this release it was labelled converged); no estimates are offered as converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 0.1, 0.01, 0.02. Converged flag: no (not-stationary). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 14794.790154797307 (certified 513.04802941). NOT MATCHED: b1 0.1 vs 0.16657666537; b2 0.01 vs 0.0051653291286; b3 0.02 vs 0.012150007096; b1 SD NaN vs 0.03830328681; ...."
        },
        {
          "id": "nist.nls.Chwirut2.start2",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut2 (Lower difficulty, n = 54)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut2.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.4286155108117824e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.15, 0.008, 0.01. Converged flag: yes (restart-stable). Minimum LRE 7.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 513.0480294068652 (certified 513.04802941)."
        },
        {
          "id": "nist.nls.Chwirut2.auto",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut2 (Lower difficulty, n = 54)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut2.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 55588.217071901665 (certified 513.04802941). NOT MATCHED: b1 0.15759413995466143 vs 0.16657666537; b2 -0.10251876378311489 vs 0.0051653291286; b3 0.269945951850058 vs 0.012150007096; b1 SD NaN vs 0.03830328681; ...."
        },
        {
          "id": "nist.nls.Chwirut1.start1",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut1 (Lower difficulty, n = 214)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut1.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From this start Plotvera stops away from the minimum and now says so (\"not a least-squares minimum\"; before this release it was labelled converged); no estimates are offered as converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 0.1, 0.01, 0.02. Converged flag: no (not-stationary). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 50068.64891449799 (certified 2384.4771393). NOT MATCHED: b1 0.1 vs 0.1902781837; b2 0.01 vs 0.0061314004477; b3 0.02 vs 0.010530908399; b1 SD NaN vs 0.021938557035; ...."
        },
        {
          "id": "nist.nls.Chwirut1.start2",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut1 (Lower difficulty, n = 214)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut1.dat",
          "tolerance": 0.00001,
          "maxRelError": 3.3436607934001076e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.15, 0.008, 0.01. Converged flag: yes (restart-stable). Minimum LRE 7.5. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 2384.4771393093565 (certified 2384.4771393)."
        },
        {
          "id": "nist.nls.Chwirut1.auto",
          "method": "customfit",
          "dataset": "NIST StRD Chwirut1 (Lower difficulty, n = 214)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Chwirut1.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 198912.56601201804 (certified 2384.4771393). NOT MATCHED: b1 0.03658103328235077 vs 0.1902781837; b2 -0.07437481865803273 vs 0.0061314004477; b3 0.22337295448271693 vs 0.010530908399; b1 SD NaN vs 0.021938557035; ...."
        },
        {
          "id": "nist.nls.Lanczos3.start1",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos3 (Lower difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos3.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Iteration limit reached without a stable solution; reported as not converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1.2, 0.3, 5.6, 5.5, 6.5, 7.6. Converged flag: no (iteration-limit). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1.611719359360658e-8 (certified 1.6117193594e-8). NOT MATCHED: b1 SD NaN vs 0.017197908859; b2 SD NaN vs 0.097041624475; b3 SD NaN vs 0.041488663282; b4 SD NaN vs 0.10766312506; ...."
        },
        {
          "id": "nist.nls.Lanczos3.start2",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos3 (Lower difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos3.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000010376775837581065,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.5, 0.7, 3.6, 4.2, 4, 6.3. Converged flag: yes (restart-stable). Minimum LRE 6.0. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1.6117193593570107e-8 (certified 1.6117193594e-8)."
        },
        {
          "id": "nist.nls.Lanczos3.auto",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos3 (Lower difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos3.dat",
          "tolerance": 0.00001,
          "maxRelError": 7.804921056614229e-7,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 6.1. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1.6117193593539686e-8 (certified 1.6117193594e-8)."
        },
        {
          "id": "nist.nls.Gauss1.start1",
          "method": "customfit",
          "dataset": "NIST StRD Gauss1 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss1.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.1558641390967662e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 97, 0.009, 100, 65, 20, 70, 178, 16.5. Converged flag: yes (restart-stable). Minimum LRE 6.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1315.8222432036198 (certified 1315.8222432)."
        },
        {
          "id": "nist.nls.Gauss1.start2",
          "method": "customfit",
          "dataset": "NIST StRD Gauss1 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss1.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.0897418107395154e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 94, 0.0105, 99, 63, 25, 71, 180, 20. Converged flag: yes (restart-stable). Minimum LRE 7.0. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1315.8222432035996 (certified 1315.8222432)."
        },
        {
          "id": "nist.nls.Gauss1.auto",
          "method": "customfit",
          "dataset": "NIST StRD Gauss1 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss1.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 250 points, 8 fitted parameters, and 20 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.Gauss2.start1",
          "method": "customfit",
          "dataset": "NIST StRD Gauss2 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss2.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.3347403256874672e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 96, 0.009, 103, 106, 18, 72, 151, 18. Converged flag: yes (restart-stable). Minimum LRE 7.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1247.5282092309988 (certified 1247.5282092)."
        },
        {
          "id": "nist.nls.Gauss2.start2",
          "method": "customfit",
          "dataset": "NIST StRD Gauss2 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss2.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.2864683405833969e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 98, 0.0105, 103, 105, 20, 73, 150, 20. Converged flag: yes (restart-stable). Minimum LRE 7.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1247.528209230998 (certified 1247.5282092)."
        },
        {
          "id": "nist.nls.Gauss2.auto",
          "method": "customfit",
          "dataset": "NIST StRD Gauss2 (Lower difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss2.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 250 points, 8 fitted parameters, and 20 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.DanWood.start1",
          "method": "customfit",
          "dataset": "NIST StRD DanWood (Lower difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/DanWood.dat",
          "tolerance": 0.00001,
          "maxRelError": 7.561723439953136e-10,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1, 5. Converged flag: yes (restart-stable). Minimum LRE 9.1. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.004317308408290979 (certified 0.0043173084083)."
        },
        {
          "id": "nist.nls.DanWood.start2",
          "method": "customfit",
          "dataset": "NIST StRD DanWood (Lower difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/DanWood.dat",
          "tolerance": 0.00001,
          "maxRelError": 7.85804725357207e-11,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.7, 4. Converged flag: yes (restart-stable). Minimum LRE 10.1. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.004317308408290984 (certified 0.0043173084083)."
        },
        {
          "id": "nist.nls.DanWood.auto",
          "method": "customfit",
          "dataset": "NIST StRD DanWood (Lower difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/DanWood.dat",
          "tolerance": 0.00001,
          "maxRelError": 4.1565879205065883e-10,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 9.4. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.004317308408290987 (certified 0.0043173084083)."
        },
        {
          "id": "nist.nls.Misra1b.start1",
          "method": "customfit",
          "dataset": "NIST StRD Misra1b (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1b.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000012848358241521262,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 500, 0.0001. Converged flag: yes (restart-stable). Minimum LRE 5.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.07546468153473121 (certified 0.075464681533)."
        },
        {
          "id": "nist.nls.Misra1b.start2",
          "method": "customfit",
          "dataset": "NIST StRD Misra1b (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1b.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000013147038927213407,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 300, 0.0002. Converged flag: yes (restart-stable). Minimum LRE 5.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.07546468153882656 (certified 0.075464681533)."
        },
        {
          "id": "nist.nls.Misra1b.auto",
          "method": "customfit",
          "dataset": "NIST StRD Misra1b (Lower difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1b.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000012921913534940245,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 5.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.07546468153547226 (certified 0.075464681533)."
        },
        {
          "id": "nist.nls.Kirby2.start1",
          "method": "customfit",
          "dataset": "NIST StRD Kirby2 (Average difficulty, n = 151)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Kirby2.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.002341420958676049,
          "pass": false,
          "detail": "KNOWN LIMITATION: Stationary to the 1e-3 relative-offset test and RSS within 1e-7 of certified, but the additive-damping Levenberg-Marquardt crawls along a badly scaled valley and stops with estimates at 3-5 significant digits (within ~1e-3 standard errors). Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 2, -0.1, 0.003, -0.001, 0.00001. Converged flag: yes (restart-stable). Minimum LRE 2.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 3.9050740554309047 (certified 3.9050739624). NOT MATCHED: b1 1.6743711244050548 vs 1.6745063063; b2 -0.13926671334590635 vs -0.13927397867; b3 0.002596046496419386 vs 0.0025961181191; b4 -0.001724258506890456 vs -0.001724181187; ...."
        },
        {
          "id": "nist.nls.Kirby2.start2",
          "method": "customfit",
          "dataset": "NIST StRD Kirby2 (Average difficulty, n = 151)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Kirby2.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0023423478716480036,
          "pass": false,
          "detail": "KNOWN LIMITATION: Stationary to the 1e-3 relative-offset test and RSS within 1e-7 of certified, but the additive-damping Levenberg-Marquardt crawls along a badly scaled valley and stops with estimates at 3-5 significant digits (within ~1e-3 standard errors). Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 1.5, -0.15, 0.0025, -0.0015, 0.00002. Converged flag: yes (restart-stable). Minimum LRE 2.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 3.905074064944148 (certified 3.9050739624). NOT MATCHED: b1 1.6743646265076226 vs 1.6745063063; b2 -0.13926633627233165 vs -0.13927397867; b3 0.0025960427203621512 vs 0.0025961181191; b4 -0.001724262850652889 vs -0.001724181187; ...."
        },
        {
          "id": "nist.nls.Kirby2.auto",
          "method": "customfit",
          "dataset": "NIST StRD Kirby2 (Average difficulty, n = 151)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Kirby2.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 151 points, 5 fitted parameters, and 11 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.Hahn1.start1",
          "method": "customfit",
          "dataset": "NIST StRD Hahn1 (Average difficulty, n = 236)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Hahn1.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From this start Plotvera stops away from the minimum and now says so (\"not a least-squares minimum\"; before this release it was labelled converged); no estimates are offered as converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 10, -1, 0.05, -0.00001, -0.05, 0.001, -0.000001. Converged flag: no (not-stationary). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 22.997708391041996 (certified 1.5324382854). NOT MATCHED: b1 10.594691863815557 vs 1.0776351733; b2 -0.7860513880438336 vs -0.12269296921; b3 0.014920572693755326 vs 0.004086375061; b4 -0.00000427453209766687 vs -0.0000014262662514; ...."
        },
        {
          "id": "nist.nls.Hahn1.start2",
          "method": "customfit",
          "dataset": "NIST StRD Hahn1 (Average difficulty, n = 236)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Hahn1.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From NIST Start 2 the optimiser ends at a point worse than the response mean and reports it as unavailable (R² < 0). Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 1, -0.1, 0.005, -0.000001, -0.005, 0.0001, -1e-7. Converged flag: no (inadequate-fit). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 126373.1961726429 (certified 1.5324382854). NOT MATCHED: b1 -1.3918996872930853 vs 1.0776351733; b2 0.049974226507013345 vs -0.12269296921; b3 0.0011736051179147679 vs 0.004086375061; b4 -0.000001575958276534019 vs -0.0000014262662514; ...."
        },
        {
          "id": "nist.nls.Hahn1.auto",
          "method": "customfit",
          "dataset": "NIST StRD Hahn1 (Average difficulty, n = 236)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Hahn1.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 236 points, 7 fitted parameters, and 17 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.Nelson",
          "method": "customfit",
          "dataset": "NIST StRD Nelson (Average difficulty)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Nelson.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN: Two predictor variables (log[y] = b1 - b2*x1*exp(-b3*x2)); Plotvera curve fits have one X."
        },
        {
          "id": "nist.nls.MGH17.start1",
          "method": "customfit",
          "dataset": "NIST StRD MGH17 (Average difficulty, n = 33)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH17.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From this start Plotvera stops away from the minimum and now says so (\"not a least-squares minimum\"; before this release it was labelled converged); no estimates are offered as converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 50, 150, -100, 1, 2. Converged flag: no (not-stationary). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.00007977461759216987 (certified 0.000054648946975). NOT MATCHED: b1 0.3822374569685451 vs 0.37541005211; b2 69.57992404588184 vs 1.9358469127; b3 -69.11382197185411 vs -1.4646871366; b4 0.01659134352596647 vs 0.01286753464; ...."
        },
        {
          "id": "nist.nls.MGH17.start2",
          "method": "customfit",
          "dataset": "NIST StRD MGH17 (Average difficulty, n = 33)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH17.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000026778542519336115,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.5, 1.5, -1, 0.01, 0.02. Converged flag: yes (restart-stable). Minimum LRE 5.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.000054648946974902014 (certified 0.000054648946975)."
        },
        {
          "id": "nist.nls.MGH17.auto",
          "method": "customfit",
          "dataset": "NIST StRD MGH17 (Average difficulty, n = 33)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH17.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.09730828428507829 (certified 0.000054648946975). NOT MATCHED: b1 0.3724355986492191 vs 0.37541005211; b2 0.31625716713054247 vs 1.9358469127; b3 0.3162513257630131 vs -1.4646871366; b4 0.006473421333946164 vs 0.01286753464; ...."
        },
        {
          "id": "nist.nls.Lanczos1.start1",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos1 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos1.dat",
          "tolerance": 0.00001,
          "maxRelError": 43487372501481.07,
          "pass": false,
          "detail": "KNOWN LIMITATION: Exact-fit data (certified residual ~0): the optimiser stops once SSR <= 1e-12 x total SS (\"Converged: residuals reached the error tolerance\"), which leaves the estimates correct to only 2-5 significant digits. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1.2, 0.3, 5.6, 5.5, 6.5, 7.6. Converged flag: yes (error-tolerance). Minimum LRE -13.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 6.222115732850583e-12 (certified 1.4307867721e-25). NOT MATCHED: b1 0.09640486042602324 vs 0.095100000027; b2 1.0066594786950636 vs 1.0000000001; b3 0.8640142075982403 vs 0.86070000013; b4 3.0081721570823503 vs 3.0000000002; ...."
        },
        {
          "id": "nist.nls.Lanczos1.start2",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos1 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos1.dat",
          "tolerance": 0.00001,
          "maxRelError": 37823760620690.914,
          "pass": false,
          "detail": "KNOWN LIMITATION: Exact-fit data (certified residual ~0): the optimiser stops once SSR <= 1e-12 x total SS (\"Converged: residuals reached the error tolerance\"), which leaves the estimates correct to only 2-5 significant digits. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.5, 0.7, 3.6, 4.2, 4, 6.3. Converged flag: yes (error-tolerance). Minimum LRE -13.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 5.411773636716287e-12 (certified 1.4307867721e-25). NOT MATCHED: b1 0.0963322397436497 vs 0.095100000027; b2 1.0062909686897137 vs 1.0000000001; b3 0.8638289010414053 vs 0.86070000013; b4 3.0077173111949036 vs 3.0000000002; ...."
        },
        {
          "id": "nist.nls.Lanczos1.auto",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos1 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos1.dat",
          "tolerance": 0.00001,
          "maxRelError": 46237905968730.14,
          "pass": false,
          "detail": "KNOWN LIMITATION: Exact-fit data (certified residual ~0): the optimiser stops once SSR <= 1e-12 x total SS (\"Converged: residuals reached the error tolerance\"), which leaves the estimates correct to only 2-5 significant digits. \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE -13.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 6.6156584229664144e-12 (certified 1.4307867721e-25). NOT MATCHED: b1 0.09643774545749081 vs 0.095100000027; b2 1.0068262711393194 vs 1.0000000001; b3 0.8640981518555625 vs 0.86070000013; b4 3.008378125413623 vs 3.0000000002; ...."
        },
        {
          "id": "nist.nls.Lanczos2.start1",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos2 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos2.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Iteration limit reached without a stable solution; reported as not converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1.2, 0.3, 5.6, 5.5, 6.5, 7.6. Converged flag: no (iteration-limit). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 2.2299428124251022e-11 (certified 2.2299428125e-11). NOT MATCHED: b1 SD NaN vs 0.00066770575477; b2 SD NaN vs 0.0033989646176; b3 SD NaN vs 0.0017185846685; b4 SD NaN vs 0.0041707005856; ...."
        },
        {
          "id": "nist.nls.Lanczos2.start2",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos2 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos2.dat",
          "tolerance": 0.00001,
          "maxRelError": 4.0691095052653896e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.5, 0.7, 3.6, 4.2, 4, 6.3. Converged flag: yes (restart-stable). Minimum LRE 6.4. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 2.2299428124627447e-11 (certified 2.2299428125e-11)."
        },
        {
          "id": "nist.nls.Lanczos2.auto",
          "method": "customfit",
          "dataset": "NIST StRD Lanczos2 (Average difficulty, n = 24)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Lanczos2.dat",
          "tolerance": 0.00001,
          "maxRelError": 6.891642134561371e-7,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 6.2. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 2.2299428127013935e-11 (certified 2.2299428125e-11)."
        },
        {
          "id": "nist.nls.Gauss3.start1",
          "method": "customfit",
          "dataset": "NIST StRD Gauss3 (Average difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss3.dat",
          "tolerance": 0.00001,
          "maxRelError": 2.2273437171897102e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 94.9, 0.009, 90.1, 113, 20, 73.8, 140, 20. Converged flag: yes (restart-stable). Minimum LRE 7.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1244.4846360131583 (certified 1244.484636)."
        },
        {
          "id": "nist.nls.Gauss3.start2",
          "method": "customfit",
          "dataset": "NIST StRD Gauss3 (Average difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss3.dat",
          "tolerance": 0.00001,
          "maxRelError": 3.381055532499778e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 96, 0.0096, 80, 110, 25, 74, 139, 25. Converged flag: yes (restart-stable). Minimum LRE 7.5. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1244.4846360131592 (certified 1244.484636)."
        },
        {
          "id": "nist.nls.Gauss3.auto",
          "method": "customfit",
          "dataset": "NIST StRD Gauss3 (Average difficulty, n = 250)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Gauss3.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 250 points, 8 fitted parameters, and 20 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.Misra1c.start1",
          "method": "customfit",
          "dataset": "NIST StRD Misra1c (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1c.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.000005089627287241466,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 500, 0.0001. Converged flag: yes (restart-stable). Minimum LRE 5.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.040966836986242115 (certified 0.040966836971)."
        },
        {
          "id": "nist.nls.Misra1c.start2",
          "method": "customfit",
          "dataset": "NIST StRD Misra1c (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1c.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.000005070742288339471,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 600, 0.0002. Converged flag: yes (restart-stable). Minimum LRE 5.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.04096683698281204 (certified 0.040966836971)."
        },
        {
          "id": "nist.nls.Misra1c.auto",
          "method": "customfit",
          "dataset": "NIST StRD Misra1c (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1c.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.000005070282530470045,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 5.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.04096683698275048 (certified 0.040966836971)."
        },
        {
          "id": "nist.nls.Misra1d.start1",
          "method": "customfit",
          "dataset": "NIST StRD Misra1d (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1d.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000023065885614776724,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 500, 0.0001. Converged flag: yes (restart-stable). Minimum LRE 5.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0564192952888034 (certified 0.056419295283)."
        },
        {
          "id": "nist.nls.Misra1d.start2",
          "method": "customfit",
          "dataset": "NIST StRD Misra1d (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1d.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.000002290848940098261,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 450, 0.0003. Converged flag: yes (restart-stable). Minimum LRE 5.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.05641929528664313 (certified 0.056419295283)."
        },
        {
          "id": "nist.nls.Misra1d.auto",
          "method": "customfit",
          "dataset": "NIST StRD Misra1d (Average difficulty, n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1d.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 6761.807648621474 (certified 0.056419295283). NOT MATCHED: b1 43.3406491196352 vs 437.36970754; b2 -3687.6201649454097 vs 0.00030227324449; b1 SD NaN vs 3.6489174345; b2 SD NaN vs 0.0000029334354479; ...."
        },
        {
          "id": "nist.nls.Roszman1",
          "method": "customfit",
          "dataset": "NIST StRD Roszman1 (Average difficulty)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Roszman1.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN: Model uses arctan, which the custom-equation parser does not provide (exp, ln, log10, sqrt, abs, sin, cos, tan, pow only)."
        },
        {
          "id": "nist.nls.ENSO.start1",
          "method": "customfit",
          "dataset": "NIST StRD ENSO (Average difficulty, n = 168)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/ENSO.dat",
          "tolerance": 0.00001,
          "maxRelError": 7.168809100982972e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 11, 3, 0.5, 40, -0.7, -1.3, 25, -0.3, 1.4. Converged flag: yes (restart-stable). Minimum LRE 7.1. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 788.5397866829113 (certified 788.53978668)."
        },
        {
          "id": "nist.nls.ENSO.start2",
          "method": "customfit",
          "dataset": "NIST StRD ENSO (Average difficulty, n = 168)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/ENSO.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.9958672947389825e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 10, 3, 0.5, 44, -1.5, 0.5, 26, -0.1, 1.5. Converged flag: yes (restart-stable). Minimum LRE 6.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 788.5397866829117 (certified 788.53978668)."
        },
        {
          "id": "nist.nls.ENSO.auto",
          "method": "customfit",
          "dataset": "NIST StRD ENSO (Average difficulty, n = 168)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/ENSO.dat",
          "pass": false,
          "detail": "KNOWN LIMITATION, NOT RUN through the user path: Custom nonlinear fitting was not run because the combination of 168 points, 9 fitted parameters, and 36 equation operations exceeds Plotvera's browser main-thread safety budget. Use a simpler prespecified equation, fit fewer parameters by fixing known constants, or use an audited offline fitting workflow for this workload; do not discard observations without scientific justification."
        },
        {
          "id": "nist.nls.MGH09.start1",
          "method": "customfit",
          "dataset": "NIST StRD MGH09 (Higher difficulty, n = 11)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH09.dat",
          "tolerance": 0.00001,
          "maxRelError": 2.5108295096792986e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 25, 39, 41.5, 39. Converged flag: yes (restart-stable). Minimum LRE 7.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.00030750560384923685 (certified 0.00030750560385)."
        },
        {
          "id": "nist.nls.MGH09.start2",
          "method": "customfit",
          "dataset": "NIST StRD MGH09 (Higher difficulty, n = 11)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH09.dat",
          "tolerance": 0.00001,
          "maxRelError": 4.8760479771938644e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.25, 0.39, 0.415, 0.39. Converged flag: yes (restart-stable). Minimum LRE 7.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0003075056038492371 (certified 0.00030750560385)."
        },
        {
          "id": "nist.nls.MGH09.auto",
          "method": "customfit",
          "dataset": "NIST StRD MGH09 (Higher difficulty, n = 11)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH09.dat",
          "tolerance": 0.00001,
          "maxRelError": 3.001382457401059e-8,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 7.5. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.00030750560384923723 (certified 0.00030750560385)."
        },
        {
          "id": "nist.nls.Thurber.start1",
          "method": "customfit",
          "dataset": "NIST StRD Thurber (Higher difficulty, n = 37)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Thurber.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.000020429210949220792,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1000, 1000, 400, 40, 0.7, 0.3, 0.03. Converged flag: yes (restart-stable). Minimum LRE 4.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 5642.708240132372 (certified 5642.7082397)."
        },
        {
          "id": "nist.nls.Thurber.start2",
          "method": "customfit",
          "dataset": "NIST StRD Thurber (Higher difficulty, n = 37)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Thurber.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.0000016004751203572301,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 1300, 1500, 500, 75, 1, 0.4, 0.05. Converged flag: yes (restart-stable). Minimum LRE 5.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 5642.708239670759 (certified 5642.7082397)."
        },
        {
          "id": "nist.nls.Thurber.auto",
          "method": "customfit",
          "dataset": "NIST StRD Thurber (Higher difficulty, n = 37)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Thurber.dat",
          "tolerance": 0.00001,
          "maxRelError": 655.2618825742569,
          "pass": false,
          "detail": "KNOWN LIMITATION: From the automatic start the fit converges to a different stationary point (a local minimum of this rational model with a higher RSS), which Plotvera reports as converged; any local least-squares optimiser can do this, which is why NIST supplies starting values. \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE -2.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 494165.65910237 (certified 5642.7082397). NOT MATCHED: b1 1168.6381557775385 vs 1288.13968; b2 6989.581967839887 vs 1491.0792535; b3 -16432.226728623777 vs 583.23836877; b4 -6392.734025540455 vs 75.416644291; ...."
        },
        {
          "id": "nist.nls.BoxBOD.start1",
          "method": "customfit",
          "dataset": "NIST StRD BoxBOD (Higher difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/BoxBOD.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.5551095853917326e-9,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1, 1. Converged flag: yes (restart-stable). Minimum LRE 8.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1168.0088765555515 (certified 1168.0088766)."
        },
        {
          "id": "nist.nls.BoxBOD.start2",
          "method": "customfit",
          "dataset": "NIST StRD BoxBOD (Higher difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/BoxBOD.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.41014311880299e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 100, 0.75. Converged flag: yes (restart-stable). Minimum LRE 7.9. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1168.008876555553 (certified 1168.0088766)."
        },
        {
          "id": "nist.nls.BoxBOD.auto",
          "method": "customfit",
          "dataset": "NIST StRD BoxBOD (Higher difficulty, n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/BoxBOD.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.5551095853917326e-9,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 8.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1168.0088765555515 (certified 1168.0088766)."
        },
        {
          "id": "nist.nls.Rat42.start1",
          "method": "customfit",
          "dataset": "NIST StRD Rat42 (Higher difficulty, n = 9)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat42.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.8802525624814062e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 100, 1, 0.1. Converged flag: yes (restart-stable). Minimum LRE 6.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8.056522933815536 (certified 8.0565229338)."
        },
        {
          "id": "nist.nls.Rat42.start2",
          "method": "customfit",
          "dataset": "NIST StRD Rat42 (Higher difficulty, n = 9)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat42.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.9337061269562815e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 75, 2.5, 0.07. Converged flag: yes (restart-stable). Minimum LRE 6.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8.056522933815742 (certified 8.0565229338)."
        },
        {
          "id": "nist.nls.Rat42.auto",
          "method": "customfit",
          "dataset": "NIST StRD Rat42 (Higher difficulty, n = 9)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat42.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.918105530547902e-7,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 6.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8.056522933815668 (certified 8.0565229338)."
        },
        {
          "id": "nist.nls.MGH10.start1",
          "method": "customfit",
          "dataset": "NIST StRD MGH10 (Higher difficulty, n = 16)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH10.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: From this start Plotvera stops away from the minimum and now says so (\"not a least-squares minimum\"; before this release it was labelled converged); no estimates are offered as converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 2, 400000, 25000. Converged flag: no (not-stationary). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 1417843973.35865 (certified 87.945855171). NOT MATCHED: b1 10016.35577732795 vs 0.005609636471; b2 174487.9030320435 vs 6181.3463463; b3 807485.5435542146 vs 345.22363462; b1 SD NaN vs 0.00015687892471; ...."
        },
        {
          "id": "nist.nls.MGH10.start2",
          "method": "customfit",
          "dataset": "NIST StRD MGH10 (Higher difficulty, n = 16)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH10.dat",
          "tolerance": 0.00001,
          "maxRelError": 0.00002685362395932656,
          "pass": false,
          "detail": "KNOWN LIMITATION: Stationary to the 1e-3 relative-offset test and RSS within 1e-7 of certified, but the additive-damping Levenberg-Marquardt crawls along a badly scaled valley and stops with estimates at 3-5 significant digits (within ~1e-3 standard errors). Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 0.02, 4000, 250. Converged flag: yes (restart-stable). Minimum LRE 4.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 87.94586141273768 (certified 87.945855171). NOT MATCHED: b1 0.0056097871100683405 vs 0.005609636471; RSS 87.94586141273768 vs 87.945855171; residual SD 2.600974098778818 vs 2.6009740065."
        },
        {
          "id": "nist.nls.MGH10.auto",
          "method": "customfit",
          "dataset": "NIST StRD MGH10 (Higher difficulty, n = 16)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/MGH10.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 132139.6146638207 (certified 87.945855171). NOT MATCHED: b1 0.1242949151288906 vs 0.005609636471; b2 3868.3708058686825 vs 6181.3463463; b3 258.3257573407099 vs 345.22363462; b1 SD NaN vs 0.00015687892471; ...."
        },
        {
          "id": "nist.nls.Eckerle4.start1",
          "method": "customfit",
          "dataset": "NIST StRD Eckerle4 (Higher difficulty, n = 35)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Eckerle4.dat",
          "tolerance": 0.00001,
          "maxRelError": 3.3179953496148023e-9,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 1, 10, 500. Converged flag: yes (restart-stable). Minimum LRE 8.5. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0014635887487274698 (certified 0.0014635887487)."
        },
        {
          "id": "nist.nls.Eckerle4.start2",
          "method": "customfit",
          "dataset": "NIST StRD Eckerle4 (Higher difficulty, n = 35)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Eckerle4.dat",
          "tolerance": 0.00001,
          "maxRelError": 3.4565430641209196e-9,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 1.5, 5, 450. Converged flag: yes (restart-stable). Minimum LRE 8.5. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0014635887487274698 (certified 0.0014635887487)."
        },
        {
          "id": "nist.nls.Eckerle4.auto",
          "method": "customfit",
          "dataset": "NIST StRD Eckerle4 (Higher difficulty, n = 35)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Eckerle4.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.6996962541495202 (certified 0.0014635887487). NOT MATCHED: b1 1 vs 1.5543827178; b2 1 vs 4.0888321754; b3 1 vs 451.54121844; b1 SD NaN vs 0.015408051163; ...."
        },
        {
          "id": "nist.nls.Rat43.start1",
          "method": "customfit",
          "dataset": "NIST StRD Rat43 (Higher difficulty, n = 15)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat43.dat",
          "tolerance": 0.00001,
          "maxRelError": 1.5884736866415698e-7,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): 100, 10, 1, 1. Converged flag: yes (restart-stable). Minimum LRE 6.8. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8786.404907963599 (certified 8786.404908)."
        },
        {
          "id": "nist.nls.Rat43.start2",
          "method": "customfit",
          "dataset": "NIST StRD Rat43 (Higher difficulty, n = 15)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat43.dat",
          "tolerance": 0.00001,
          "maxRelError": 2.0173403632572074e-8,
          "pass": true,
          "detail": "Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): 700, 5, 0.75, 1.3. Converged flag: yes (restart-stable). Minimum LRE 7.7. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8786.404907963124 (certified 8786.404908)."
        },
        {
          "id": "nist.nls.Rat43.auto",
          "method": "customfit",
          "dataset": "NIST StRD Rat43 (Higher difficulty, n = 15)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Rat43.dat",
          "tolerance": 0.00001,
          "maxRelError": 4.5473246267091695e-8,
          "pass": true,
          "detail": "\"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: yes. Minimum LRE 7.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 8786.404907963137 (certified 8786.404908)."
        },
        {
          "id": "nist.nls.Bennett5.start1",
          "method": "customfit",
          "dataset": "NIST StRD Bennett5 (Higher difficulty, n = 154)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Bennett5.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Iteration limit reached (Bennett5 converges very slowly); reported as not converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 1 (far): -2000, 50, 0.8. Converged flag: no (iteration-limit). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0005307553234789672 (certified 0.00052404744073). NOT MATCHED: b1 -2153.6323065903703 vs -2523.5058043; b2 45.05614807687564 vs 46.736564644; b3 0.9603788872738734 vs 0.93218483193; b1 SD NaN vs 297.15175411; ...."
        },
        {
          "id": "nist.nls.Bennett5.start2",
          "method": "customfit",
          "dataset": "NIST StRD Bennett5 (Higher difficulty, n = 154)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Bennett5.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Iteration limit reached (Bennett5 converges very slowly); reported as not converged. Engine fitModel (the optimiser behind \"Fit your own equation\") started from NIST Start 2 (near): -1500, 45, 0.85. Converged flag: no (iteration-limit). Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 0.0005455734052090879 (certified 0.00052404744073). NOT MATCHED: b1 -1913.3856790591967 vs -2523.5058043; b2 43.795497123500404 vs 46.736564644; b3 0.9826765184302441 vs 0.93218483193; b1 SD NaN vs 297.15175411; ...."
        },
        {
          "id": "nist.nls.Bennett5.auto",
          "method": "customfit",
          "dataset": "NIST StRD Bennett5 (Higher difficulty, n = 154)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Bennett5.dat",
          "tolerance": 0.00001,
          "maxRelError": null,
          "pass": false,
          "detail": "KNOWN LIMITATION: Automatic starting values (every parameter named b1..bk starts at 1) are far from the solution; Plotvera reports the fit as not converged and withholds standard errors (no silent wrong answer). \"Fit your own equation\" through runAnalysis with Plotvera's automatic starting values (parameters named b1..bk, so each starts at 1). Reported converged: no. Minimum LRE NaN. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative. RSS 49.338882350707856 (certified 0.00052404744073). NOT MATCHED: b1 -32.258018348901984 vs -2523.5058043; b2 2360.456564977261 vs 46.736564644; b3 -2336.0676400544735 vs 0.93218483193; b1 SD NaN vs 297.15175411; ...."
        },
        {
          "id": "nist.nls.DanWood.builtin-power",
          "method": "curvefit: power",
          "dataset": "NIST StRD DanWood (n = 6)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/DanWood.dat",
          "tolerance": 0.00001,
          "detail": "5 quantities compared; worst relative error 5.55e-10 on a = b1. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Built-in power law a·X^b = NIST b1·x^b2, automatic starts. Minimum LRE 9.3. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative.",
          "maxRelError": 5.548076539758023e-10,
          "pass": true
        },
        {
          "id": "nist.nls.Misra1d.builtin-mm",
          "method": "curvefit: mm",
          "dataset": "NIST StRD Misra1d (n = 14)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Misra1d.dat",
          "tolerance": 0.00001,
          "detail": "5 quantities compared; worst relative error 2.75e-9 on SE Km = SD(b2)/b2². Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. NIST b1·b2·x/(1 + b2·x) = Michaelis-Menten Vmax·x/(Km + x) with Vmax = b1, Km = 1/b2 (SE by the exact linearised transform SE(b2)/b2²). Minimum LRE 8.6. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative.",
          "maxRelError": 2.7470792604685494e-9,
          "pass": true
        },
        {
          "id": "nist.nls.Eckerle4.builtin-gaussian",
          "method": "curvefit: gaussian",
          "dataset": "NIST StRD Eckerle4 (n = 35)",
          "reference": "NIST StRD certified values",
          "source": "https://www.itl.nist.gov/div898/strd/nls/data/LINKS/DATA/Eckerle4.dat",
          "tolerance": 0.00001,
          "detail": "6 quantities compared; worst relative error 6.25e-9 on SE Mean. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. NIST (b1/b2)·exp(-0.5((x-b3)/b2)²) = Gaussian with Amplitude b1/b2, Mean b3, SD b2; the Amplitude SE needs the b1-b2 covariance, which NIST does not certify, so it is not compared. Minimum LRE 8.2. Tolerances: estimates 0.00001 relative to max(|certified|, certified SD), standard errors 0.0001 (finite-difference Jacobian), RSS and residual SD 1e-8 relative.",
          "maxRelError": 6.24846903897789e-9,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "nonlinear",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:37.459Z",
      "cases": [
        {
          "id": "curvefit.dose4pl-DNase1",
          "method": "curvefit: dose4pl",
          "dataset": "DNase run 1: density vs log10(conc), n = 16",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + 10^((L - x) * H))), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_dose4pl_DNase1.csv",
          "tolerance": 0.0001,
          "detail": "22 quantities compared; worst relative error 7.26e-8 on Bottom. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 1.1e-8. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 7.259958314602141e-8,
          "pass": true
        },
        {
          "id": "curvefit.dose3pl-DNase1",
          "method": "curvefit: dose3pl",
          "dataset": "DNase run 1: density vs log10(conc), Hill slope fixed at 1",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + 10^(L - x))), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_dose3pl_DNase1.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 1.21e-8 on Bottom. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 3.3e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 1.2054357572481289e-8,
          "pass": true
        },
        {
          "id": "curvefit.dose5pl-DNase1",
          "method": "curvefit: dose5pl",
          "dataset": "DNase run 1: density vs log10(conc), asymmetric 5PL",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + 10^((L - x) * H))^S), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_dose5pl_DNase1.csv",
          "tolerance": 0.0001,
          "detail": "26 quantities compared; worst relative error 2.02e-7 on LogC CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 3.8e-8. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). S: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 2.0242563713553286e-7,
          "pass": true
        },
        {
          "id": "curvefit.boltzmann-DNase1",
          "method": "curvefit: boltzmann",
          "dataset": "DNase run 1: density vs ln(conc) (Boltzmann = SSfpl form)",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + exp((V - x)/S))), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_boltzmann_DNase1.csv",
          "tolerance": 0.0001,
          "detail": "22 quantities compared; worst relative error 1.89e-8 on Bottom CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 3.7e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 1.8879486922224213e-8,
          "pass": true
        },
        {
          "id": "curvefit.loglogistic-ryegrass",
          "method": "curvefit: loglogistic",
          "dataset": "drc::ryegrass root length vs ferulic acid conc (mM, linear scale incl. 0), n = 24",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + (x/E)^(-H))), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_loglogistic_ryegrass.csv",
          "tolerance": 0.0001,
          "detail": "22 quantities compared; worst relative error 4.65e-8 on Bottom CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 1.0e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). EC50: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 4.648364028043235e-8,
          "pass": true
        },
        {
          "id": "curvefit.loglogistic5-ryegrass",
          "method": "curvefit: loglogistic5",
          "dataset": "drc::ryegrass, asymmetric 5-parameter log-logistic",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + (x/C)^(-H))^S), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_loglogistic5_ryegrass.csv",
          "tolerance": 0.0001,
          "detail": "26 quantities compared; worst relative error 5.70e-8 on S CI upper (log scale). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 2.7e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). C, S: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 5.6989104287420495e-8,
          "pass": true
        },
        {
          "id": "curvefit.mm-Puromycin",
          "method": "curvefit: mm",
          "dataset": "Puromycin treated: rate vs substrate conc (ppm), n = 12",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ V * x/(K + x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_mm_Puromycin.csv",
          "tolerance": 0.0001,
          "detail": "14 quantities compared; worst relative error 1.41e-8 on Km CI lower (log scale). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 5.2e-10. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). Km: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 1.410590662117945e-8,
          "pass": true
        },
        {
          "id": "curvefit.hill-Puromycin",
          "method": "curvefit: hill",
          "dataset": "Puromycin treated, Hill equation",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ V * x^h/(K^h + x^h)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_hill_Puromycin.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 1.92e-8 on K SE. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 4.3e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). K, n: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 1.9183427763187433e-8,
          "pass": true
        },
        {
          "id": "curvefit.loglogistic3-Puromycin",
          "method": "curvefit: loglogistic3",
          "dataset": "Puromycin treated, 3-parameter log-logistic (slope 1)",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ B + (T - B)/(1 + E/x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_loglogistic3_Puromycin.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 2.91e-8 on Bottom CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 2.1e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). EC50: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 2.906439138785652e-8,
          "pass": true
        },
        {
          "id": "curvefit.logarithmic-Puromycin-untreated",
          "method": "curvefit: logarithmic",
          "dataset": "Puromycin untreated: rate vs ln(conc), n = 11",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ A + B * log(x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_logarithmic_Puromycin_untreated.csv",
          "tolerance": 0.0001,
          "detail": "14 quantities compared; worst relative error 9.76e-10 on B CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 4.9e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 9.762475738375483e-10,
          "pass": true
        },
        {
          "id": "curvefit.expdecay-Indometh1",
          "method": "curvefit: expdecay",
          "dataset": "Indometh subject 1: plasma conc vs time (h), n = 11",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ P + (Y0 - P) * exp(-K * x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_expdecay_Indometh1.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 2.72e-8 on Plateau CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 6.1e-11. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). K: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 2.7168138283819604e-8,
          "pass": true
        },
        {
          "id": "curvefit.twophasedecay-Indometh",
          "method": "curvefit: twophasedecay",
          "dataset": "Indometh all 6 subjects pooled, n = 66",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ P + Af * exp(-Kf * x) + As * exp(-Ks * x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_twophasedecay_Indometh.csv",
          "tolerance": 0.0001,
          "detail": "26 quantities compared; worst relative error 1.09e-7 on Plateau CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 5.9e-10. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). Afast, Aslow, Kslow: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 1.0918177046597568e-7,
          "pass": true
        },
        {
          "id": "curvefit.expgrow-uspop",
          "method": "curvefit: expgrow",
          "dataset": "uspop 1790-1870 (millions) vs years since 1790, n = 9",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ Y0 * exp(K * x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_expgrow_uspop.csv",
          "tolerance": 0.0001,
          "detail": "14 quantities compared; worst relative error 5.18e-8 on Y0 CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 7.3e-11. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 5.18362900968011e-8,
          "pass": true
        },
        {
          "id": "curvefit.onephaseassoc-Loblolly",
          "method": "curvefit: onephaseassoc",
          "dataset": "Loblolly pine height (ft) vs age (yr), 14 trees pooled, n = 84",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ Y0 + (P - Y0) * (1 - exp(-K * x))), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_onephaseassoc_Loblolly.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 4.99e-9 on K CI upper (log scale). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 1.3e-11. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). K: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 4.994950268677518e-9,
          "pass": true
        },
        {
          "id": "curvefit.expplateau-Loblolly",
          "method": "curvefit: expplateau",
          "dataset": "Loblolly pine height vs age, exponential plateau form",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ M - (M - Y0) * exp(-K * x)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_expplateau_Loblolly.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 4.07e-9 on K CI upper (log scale). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 1.1e-13. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). K: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 4.074434127766589e-9,
          "pass": true
        },
        {
          "id": "curvefit.poly2-cars",
          "method": "curvefit: poly2",
          "dataset": "cars: stopping distance (ft) vs speed (mph), n = 50",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ b0 + b1 * x + b2 * x^2), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_poly2_cars.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 3.42e-8 on B2 CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 6.4e-16. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 3.420805664970459e-8,
          "pass": true
        },
        {
          "id": "curvefit.poly3-cars",
          "method": "curvefit: poly3",
          "dataset": "cars: cubic in speed",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ b0 + b1 * x + b2 * x^2 + b3 * x^3), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_poly3_cars.csv",
          "tolerance": 0.0001,
          "detail": "22 quantities compared; worst relative error 4.11e-8 on B0. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 2.8e-15. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 4.108673796422085e-8,
          "pass": true
        },
        {
          "id": "curvefit.power-Puromycin",
          "method": "curvefit: power",
          "dataset": "Puromycin treated: power law rate = a * conc^b",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ a * x^b), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_power_Puromycin.csv",
          "tolerance": 0.0001,
          "detail": "14 quantities compared; worst relative error 1.76e-8 on b CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 2.5e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 1.7618640214066658e-8,
          "pass": true
        },
        {
          "id": "curvefit.sine-nottem",
          "method": "curvefit: sine",
          "dataset": "nottem: Nottingham monthly mean temperature (F), 1920-1922, vs month index",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ O + A * sin(2 * pi * x/W + P)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_sine_nottem.csv",
          "tolerance": 0.0001,
          "detail": "22 quantities compared; worst relative error 1.52e-8 on Phase CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 2.1e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). Wavelength: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 1.5162099535141895e-8,
          "pass": true
        },
        {
          "id": "curvefit.gaussian-Eckerle4",
          "method": "curvefit: gaussian",
          "dataset": "NIST Eckerle4 transmittance vs wavelength (n = 35), Gaussian peak",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ A * exp(-0.5 * ((x - M)/S)^2)), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_curvefit_gaussian_Eckerle4.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 5.92e-9 on Mean SE. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 5.8e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header). SD: constrained positive and fitted in log10 coordinates, so Plotvera reports the CI on the log scale, exp(log(est) ± t·SE/est); compared with that interval computed in nonlinear.R from R's estimate and SE (R's symmetric Wald interval is a different, legitimate choice).",
          "maxRelError": 5.919797885498685e-9,
          "pass": true
        },
        {
          "id": "customfit.Indometh1-A-exp-kX-C",
          "method": "customfit",
          "dataset": "Indometh subject 1, user equation A*exp(-k*X)+C",
          "reference": "R 4.3.3 (drc 4.0.0): stats::nls(y ~ A * exp(-k * x) + C), then Gauss-Newton polish with analytic gradient (stats::deriv); Wald CI estimate +/- qt(0.975, df) SE [validation/r/nonlinear.R]",
          "source": "validation/reference/data/nls_customfit_Indometh1_A_exp_kX_C.csv",
          "tolerance": 0.0001,
          "detail": "18 quantities compared; worst relative error 1.02e-8 on C CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Plotvera starts from its own automatic initial values (the user path). R optimum polished to relative offset 1.7e-9. Tolerances: RSS, Sy.x, R² 1e-9; parameters 0.0001 relative to max(|estimate|, SE); SE and CI bounds 0.0001 (iterative optimisers on both sides; see file header).",
          "maxRelError": 1.0178616290621868e-8,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "qc",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:06:37.788Z",
      "cases": [
        {
          "id": "qc.grubbs.elisa-bad-well",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "ELISA OD450 triplicate with one bad well (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_elisa_bad_well.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 1.07e-13 on P (two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 1.0722158858441113e-13,
          "pass": true
        },
        {
          "id": "qc.grubbs.triplicate-extreme",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "Triplicate with one extreme replicate (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_triplicate_extreme.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 1.64e-13 on P (two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 1.640140939462992e-13,
          "pass": true
        },
        {
          "id": "qc.grubbs.triplicate-clean",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "Clean ELISA triplicate (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_triplicate_clean.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 5.25e-12 on P (two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 5.2530659587673055e-12,
          "pass": true
        },
        {
          "id": "qc.grubbs.quadruplicate",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "qPCR quadruplicate with one high well (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_quadruplicate.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 2.15e-14 on P (two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 2.14641513247748e-14,
          "pass": true
        },
        {
          "id": "qc.grubbs.mice-n6",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "Tumour volume, 6 mice, one far out (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_mice_n6.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 7.02e-11 on critical value (alpha 0.05, two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 7.018964428570987e-11,
          "pass": true
        },
        {
          "id": "qc.grubbs.morley-expt1",
          "method": "Check data: Grubbs (replicates / subjects)",
          "dataset": "Michelson speed of light, experiment 1 (datasets::morley, n = 20)",
          "reference": "R 4.3.3 (outliers 0.15): outliers::grubbs.test(x, type = 10, two.sided = TRUE); critical value outliers::qgrubbs(0.975, n) [validation/r/qc.R]",
          "source": "validation/reference/data/qc_morley_expt1.csv",
          "tolerance": 1e-9,
          "detail": "8 quantities compared; worst relative error 4.88e-9 on P (two-sided). Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The flag is G > critical value; the P value is outliers::grubbs.test(two.sided = TRUE), ie 2·n·(1 − pt(t, n − 2)). Tolerances: G, mean, SD, CV 1e-9; critical value and P 0.000001.",
          "maxRelError": 4.880579283140494e-9,
          "pass": true
        },
        {
          "id": "qc.cv.duplicates",
          "method": "Check data: replicate CV",
          "dataset": "replicates 20, 31",
          "reference": "R 4.3.3 (outliers 0.15): stats::sd(x) / mean(x) * 100 (n - 1 denominator) [validation/r/qc.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. CV = SD (n − 1 denominator) / mean × 100.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "qc.cv.triplicate",
          "method": "Check data: replicate CV",
          "dataset": "replicates 10, 12, 14",
          "reference": "R 4.3.3 (outliers 0.15): stats::sd(x) / mean(x) * 100 (n - 1 denominator) [validation/r/qc.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. CV = SD (n − 1 denominator) / mean × 100.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "qc.cv.elisa-clean",
          "method": "Check data: replicate CV",
          "dataset": "replicates 0.452, 0.468, 0.445",
          "reference": "R 4.3.3 (outliers 0.15): stats::sd(x) / mean(x) * 100 (n - 1 denominator) [validation/r/qc.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. CV = SD (n − 1 denominator) / mean × 100.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "qc.robust.mice-n6",
          "method": "Check data: robust screen (MAD + BH, Q = 1%)",
          "dataset": "Tumour volume, 6 mice (synthetic)",
          "reference": "R 4.3.3 (outliers 0.15): robust z = |x - median|/(MAD/0.6745), 2 * pnorm(-z), stats::p.adjust(method = 'BH'), flagged at adjusted P <= 0.01 [validation/r/qc.R]",
          "tolerance": 1e-9,
          "detail": "20 quantities compared; worst relative error 4.24e-16 on P 2. The same rule as the validated \"Robust FDR outlier screening\" analysis (rout.*). It is Plotvera's stand-in for Prism's ROUT, which it does not reproduce.",
          "maxRelError": 4.2385509207334265e-16,
          "pass": true
        },
        {
          "id": "qc.ttest.unpaired-excluded",
          "method": "unpaired (with an excluded value)",
          "dataset": "A (n = 5, A row 5 = 25.0 excluded) vs B (n = 5), synthetic",
          "reference": "R 4.3.3 (outliers 0.15): stats::t.test(A[-5], B, var.equal = TRUE) on the reduced data [validation/r/qc.R]",
          "source": "validation/reference/data/qc_ttest_excluded.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 4.04e-9 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. The excluded cell stays in the table; the analysis reads the table with it left out and must equal R on the reduced data. Tolerances: t, df, mean difference 1e-9; P and CI 0.000001.",
          "maxRelError": 4.04358309023945e-9,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "rankexact",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:05:21.911Z",
      "cases": [
        {
          "id": "rank.mw.01",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 5 vs 7, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.02",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 12 vs 12, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.55e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.5453419959821243e-16,
          "pass": true
        },
        {
          "id": "rank.mw.03",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 30 vs 30, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.41e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 2.411325130695083e-15,
          "pass": true
        },
        {
          "id": "rank.mw.04",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 31 vs 8, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.05",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 35 vs 3, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.06",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 40 vs 45, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.58e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 3.581852452540001e-15,
          "pass": true
        },
        {
          "id": "rank.mw.07",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 49 vs 49, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.26e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 3.258773602301745e-15,
          "pass": true
        },
        {
          "id": "rank.mw.08",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 49 vs 20, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.86e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.8553016367904928e-16,
          "pass": true
        },
        {
          "id": "rank.mw.09",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 50 vs 10, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.60e-14 on P (two-tailed). Plotvera method: normal approximation. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.6006158702059356e-14,
          "pass": true
        },
        {
          "id": "rank.mw.10",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 60 vs 60, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.32e-15 on P (two-tailed). Plotvera method: normal approximation. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.3205038239671596e-15,
          "pass": true
        },
        {
          "id": "rank.mw.11",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 15 vs 26, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.86e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.8593094866902762e-16,
          "pass": true
        },
        {
          "id": "rank.mw.12",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 15 vs 24, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.13",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 31 vs 47, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.29e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.2862212994369876e-15,
          "pass": true
        },
        {
          "id": "rank.mw.14",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 10 vs 22, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.15",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 41 vs 29, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.16",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 24 vs 44, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.86e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 2.8584319030376745e-16,
          "pass": true
        },
        {
          "id": "rank.mw.17",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 49 vs 34, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.67e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 3.668233059101803e-16,
          "pass": true
        },
        {
          "id": "rank.mw.18",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 35 vs 32, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.84e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 3.8431962326382603e-16,
          "pass": true
        },
        {
          "id": "rank.mw.19",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 45 vs 5, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.20",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 26 vs 45, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.21",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 47 vs 46, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 4.31e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 4.310205932034365e-15,
          "pass": true
        },
        {
          "id": "rank.mw.22",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 32 vs 48, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 9.24e-15 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 9.24155221698993e-15,
          "pass": true
        },
        {
          "id": "rank.mw.23",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 27 vs 29, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.83e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 2.834047657788462e-16,
          "pass": true
        },
        {
          "id": "rank.mw.24",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 15 vs 27, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 1.23e-16 on P (two-tailed). Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 1.230841791310312e-16,
          "pass": true
        },
        {
          "id": "rank.mw.25",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 47 vs 15, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.26",
          "method": "Mann-Whitney test",
          "dataset": "seeded normal, n = 38 vs 3, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Plotvera method: exact. R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.mw.ties",
          "method": "Mann-Whitney test",
          "dataset": "small integers with ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.71e-15 on P (two-tailed). Plotvera method: normal approximation (ties present). R uses the exact distribution when both groups have under 50 values and there are no ties, else the continuity-corrected normal approximation; Plotvera follows the same rule. P tolerance 0.000001.",
          "maxRelError": 2.707480465069241e-15,
          "pass": true
        },
        {
          "id": "rank.wx.01",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 6, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.44e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 4.440892098500624e-16,
          "pass": true
        },
        {
          "id": "rank.wx.02",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 10, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.wx.03",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 25, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.11e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 2.111176187959444e-16,
          "pass": true
        },
        {
          "id": "rank.wx.04",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 30, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.57e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.5664061779046944e-16,
          "pass": true
        },
        {
          "id": "rank.wx.05",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 31, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.28e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.2810962531682283e-16,
          "pass": true
        },
        {
          "id": "rank.wx.06",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 38, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.14e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.1362049927609976e-16,
          "pass": true
        },
        {
          "id": "rank.wx.07",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 45, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.70e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.6959012783932888e-16,
          "pass": true
        },
        {
          "id": "rank.wx.08",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 49, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 7.94e-17 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 7.940933880509066e-17,
          "pass": true
        },
        {
          "id": "rank.wx.09",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 50, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 5.80e-16 on P (two-tailed). Plotvera method: normal approximation. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 5.803383854518642e-16,
          "pass": true
        },
        {
          "id": "rank.wx.10",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 70, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.48e-12 on P (two-tailed). Plotvera method: normal approximation. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.475555984634467e-12,
          "pass": true
        },
        {
          "id": "rank.wx.11",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 12, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 6.54e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 6.543127350884372e-16,
          "pass": true
        },
        {
          "id": "rank.wx.12",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 22, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.78e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.7763568394002508e-16,
          "pass": true
        },
        {
          "id": "rank.wx.13",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 36, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.77e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.7658570809664293e-16,
          "pass": true
        },
        {
          "id": "rank.wx.14",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 47, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.77e-15 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.7710712064121004e-15,
          "pass": true
        },
        {
          "id": "rank.wx.15",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 17, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.99e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.9945059249406316e-16,
          "pass": true
        },
        {
          "id": "rank.wx.16",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 32, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.73e-16 on P (two-tailed). Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.7277039648611997e-16,
          "pass": true
        },
        {
          "id": "rank.wx.17",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 10, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.wx.18",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 10, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.wx.19",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 9, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.wx.20",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired normal, n = 40, no ties or zeros",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact. Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.wx.zeros.1",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired, n = 8 with 2 zero differences",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.33e-16 on P (two-tailed). Plotvera method: normal approximation (zero differences present). Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.3317596196101622e-16,
          "pass": true
        },
        {
          "id": "rank.wx.zeros.2",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired, n = 15 with 2 zero differences",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.21e-15 on P (two-tailed). Plotvera method: normal approximation (zero differences present). Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 1.2050753371008984e-15,
          "pass": true
        },
        {
          "id": "rank.wx.zeros.3",
          "method": "Wilcoxon matched-pairs signed-rank",
          "dataset": "seeded paired, n = 30 with 2 zero differences",
          "reference": "R 4.3.3 (survival 3.5.8): stats::wilcox.test(a, b, paired = TRUE) [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.18e-15 on P (two-tailed). Plotvera method: normal approximation (zero differences present). Exact below 50 non-zero pairs with no tied |differences| and no zero differences (as R); the graph bracket uses the same P.",
          "maxRelError": 4.1804311966093896e-15,
          "pass": true
        },
        {
          "id": "rank.sp.01",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 3, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.22e-16 on rho. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.220446049250313e-16,
          "pass": true
        },
        {
          "id": "rank.sp.02",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 4, no ties, perfect order",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.sp.03",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 4, no ties, perfect reverse order",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.sp.04",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 5, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.59e-16 on rho. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 1.5860328923216525e-16,
          "pass": true
        },
        {
          "id": "rank.sp.05",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 6, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.44e-16 on rho. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 1.4391779948844622e-16,
          "pass": true
        },
        {
          "id": "rank.sp.06",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 7, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.sp.07",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 8, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.sp.08",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 9, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.30e-16 on rho. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.297013154396876e-16,
          "pass": true
        },
        {
          "id": "rank.sp.09",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 9, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.02e-16 on rho. Plotvera method: exact (all orderings). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.0185873175002846e-16,
          "pass": true
        },
        {
          "id": "rank.sp.10",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 10, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.74e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.736504383948816e-16,
          "pass": true
        },
        {
          "id": "rank.sp.11",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 11, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.16e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 4.1579803133974144e-16,
          "pass": true
        },
        {
          "id": "rank.sp.12",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 12, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.74e-14 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.7383184490514033e-14,
          "pass": true
        },
        {
          "id": "rank.sp.13",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 15, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.17e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 4.167985398125978e-16,
          "pass": true
        },
        {
          "id": "rank.sp.14",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 20, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.12e-15 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 1.1224084282351528e-15,
          "pass": true
        },
        {
          "id": "rank.sp.15",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 30, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 9.40e-15 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 9.403350336960466e-15,
          "pass": true
        },
        {
          "id": "rank.sp.16",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 42, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 3.53e-15 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 3.5279856464168793e-15,
          "pass": true
        },
        {
          "id": "rank.sp.17",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 60, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.65e-16 on rho. Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.6454533008646303e-16,
          "pass": true
        },
        {
          "id": "rank.sp.18",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 100, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 4.78e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 4.784194672652187e-16,
          "pass": true
        },
        {
          "id": "rank.sp.19",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 23, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.40e-14 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 1.395302823486028e-14,
          "pass": true
        },
        {
          "id": "rank.sp.20",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 34, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.22e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.2156406422311605e-16,
          "pass": true
        },
        {
          "id": "rank.sp.21",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 10, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 3.12e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 3.1218004190396107e-16,
          "pass": true
        },
        {
          "id": "rank.sp.22",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 20, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 3.46e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 3.4623369309821406e-16,
          "pass": true
        },
        {
          "id": "rank.sp.23",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 33, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.25e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.2484343229706375e-16,
          "pass": true
        },
        {
          "id": "rank.sp.24",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 12, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 3.77e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 3.771000222496192e-16,
          "pass": true
        },
        {
          "id": "rank.sp.25",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 36, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 8.94e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 8.938200635549137e-16,
          "pass": true
        },
        {
          "id": "rank.sp.26",
          "method": "Spearman correlation",
          "dataset": "seeded, n = 17, no ties",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 2.28e-16 on P (two-tailed). Plotvera method: Edgeworth series (AS 89). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 2.2848282345881547e-16,
          "pass": true
        },
        {
          "id": "rank.sp.ties",
          "method": "Spearman correlation",
          "dataset": "ties: t approximation",
          "reference": "R 4.3.3 (survival 3.5.8): stats::cor.test(x, y, method = 'spearman') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 9.96e-15 on P (two-tailed). Plotvera method: t approximation (ties present). R cor.test computes the P by AS 89 (every ordering for n <= 9, an Edgeworth series above) when there are no ties and n <= 1290, else the t approximation.",
          "maxRelError": 9.955218344891396e-15,
          "pass": true
        },
        {
          "id": "rank.km.01",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 5, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.02",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 6, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.03",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 8, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.04",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 10, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.05",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 12, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.06",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 20, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.07",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 10, some censored",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.08",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 15, some censored",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.09",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 25, some censored",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.10",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 4, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.11",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 3, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        },
        {
          "id": "rank.km.12",
          "method": "Survival: Kaplan-Meier median and 95% CI",
          "dataset": "seeded exponential, n = 7, every subject has the event",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(Surv(t, e) ~ 1, conf.type = 'log-log') [validation/r/rankexact.R]",
          "tolerance": 1e-9,
          "detail": "3 quantities compared. Brookmeyer-Crowley CI on the log-log Greenwood band. A bound R reports as NA (the curve fell to 0 first, or never crossed) is \"not estimable\" or NR in Plotvera. A curve exactly on 50% gives the midpoint to the next event, as R and Prism.",
          "maxRelError": 0,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "regression",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:06:12.512Z",
      "cases": [
        {
          "id": "linreg.women",
          "method": "linreg",
          "dataset": "women: weight (lb) on height (in), n = 15",
          "reference": "R 4.3.3: stats::lm(y ~ x); summary; confint; anova [validation/r/regression.R]",
          "source": "validation/reference/data/women.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 3.32e-10 on intercept 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 3.3194668115494315e-10,
          "pass": true
        },
        {
          "id": "linreg.anscombe1",
          "method": "linreg",
          "dataset": "Anscombe quartet set 1 (n = 11)",
          "reference": "R 4.3.3: stats::lm(y ~ x); summary; confint; anova [validation/r/regression.R]",
          "source": "validation/reference/data/anscombe.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.02e-9 on intercept 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.024394844268248e-9,
          "pass": true
        },
        {
          "id": "linreg.anscombe2",
          "method": "linreg",
          "dataset": "Anscombe quartet set 2 (n = 11)",
          "reference": "R 4.3.3: stats::lm(y ~ x); summary; confint; anova [validation/r/regression.R]",
          "source": "validation/reference/data/anscombe.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.02e-9 on slope 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.0243945653090544e-9,
          "pass": true
        },
        {
          "id": "linreg.anscombe3",
          "method": "linreg",
          "dataset": "Anscombe quartet set 3 (n = 11)",
          "reference": "R 4.3.3: stats::lm(y ~ x); summary; confint; anova [validation/r/regression.R]",
          "source": "validation/reference/data/anscombe.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.02e-9 on intercept 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.024396502342399e-9,
          "pass": true
        },
        {
          "id": "linreg.anscombe4",
          "method": "linreg",
          "dataset": "Anscombe quartet set 4 (n = 11)",
          "reference": "R 4.3.3: stats::lm(y ~ x); summary; confint; anova [validation/r/regression.R]",
          "source": "validation/reference/data/anscombe.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 2.02e-9 on slope 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.024394545055695e-9,
          "pass": true
        },
        {
          "id": "pearson.mtcars-wt-mpg",
          "method": "pearson",
          "dataset": "mtcars wt vs mpg (n = 32)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'pearson') [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 4.27e-11 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Fisher-z CI as R cor.test. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 4.2748804407804064e-11,
          "pass": true
        },
        {
          "id": "pearson.mtcars-hp-qsec",
          "method": "pearson",
          "dataset": "mtcars hp vs qsec (n = 32)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'pearson') [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 1.90e-10 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Fisher-z CI as R cor.test. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.898877433295346e-10,
          "pass": true
        },
        {
          "id": "pearson.mtcars-disp-drat",
          "method": "pearson",
          "dataset": "mtcars disp vs drat (n = 32)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'pearson') [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 1.91e-10 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Fisher-z CI as R cor.test. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.9116871406420924e-10,
          "pass": true
        },
        {
          "id": "spearman.mtcars-wt-mpg",
          "method": "spearman",
          "dataset": "mtcars wt vs mpg (n = 32, ties)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'spearman', exact = FALSE) [t approximation]; CI: Fisher z with Bonett-Wright SE sqrt((1 + rho^2/2)/(n - 3)) computed in the script [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 7.03e-11 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Spearman P uses the t approximation (R exact = FALSE, which R also uses with ties); the Bonett-Wright Fisher-z CI has no base-R function and is computed from its formula in regression.R. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 7.027432185667039e-11,
          "pass": true
        },
        {
          "id": "spearman.mtcars-hp-qsec",
          "method": "spearman",
          "dataset": "mtcars hp vs qsec (n = 32, ties)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'spearman', exact = FALSE) [t approximation]; CI: Fisher z with Bonett-Wright SE sqrt((1 + rho^2/2)/(n - 3)) computed in the script [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 7.76e-10 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Spearman P uses the t approximation (R exact = FALSE, which R also uses with ties); the Bonett-Wright Fisher-z CI has no base-R function and is computed from its formula in regression.R. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 7.763735582081373e-10,
          "pass": true
        },
        {
          "id": "spearman.mtcars-disp-drat",
          "method": "spearman",
          "dataset": "mtcars disp vs drat (n = 32, ties)",
          "reference": "R 4.3.3: stats::cor.test(x, y, method = 'spearman', exact = FALSE) [t approximation]; CI: Fisher z with Bonett-Wright SE sqrt((1 + rho^2/2)/(n - 3)) computed in the script [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 4.43e-10 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Spearman P uses the t approximation (R exact = FALSE, which R also uses with ties); the Bonett-Wright Fisher-z CI has no base-R function and is computed from its formula in regression.R. Plotvera's CI previously used z = 1.96 rather than qnorm(0.975), a 1e-5 relative shift; fixed in this release. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 4.4345140067909645e-10,
          "pass": true
        },
        {
          "id": "corrmatrix.mtcars",
          "method": "corrmatrix",
          "dataset": "mtcars mpg, disp, hp, wt, qsec (n = 32)",
          "reference": "R 4.3.3: stats::cor; stats::cor.test per pair [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "45 quantities compared; worst relative error 7.92e-9 on P mpg-qsec. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 7.918429197677313e-9,
          "pass": true
        },
        {
          "id": "mlregress.mtcars-mpg",
          "method": "mlregress",
          "dataset": "mtcars mpg ~ wt + hp + disp (n = 32)",
          "reference": "R 4.3.3: stats::lm; summary.lm [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "23 quantities compared; worst relative error 1.11e-8 on disp P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.1076756297253672e-8,
          "pass": true
        },
        {
          "id": "mlregress.mtcars-qsec",
          "method": "mlregress",
          "dataset": "mtcars qsec ~ hp + wt + am + drat (n = 32)",
          "reference": "R 4.3.3: stats::lm; summary.lm [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-9,
          "detail": "27 quantities compared; worst relative error 1.20e-8 on wt P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: estimates/SE/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.2031304419857405e-8,
          "pass": true
        },
        {
          "id": "logistic.mtcars-am-wt",
          "method": "logistic",
          "dataset": "mtcars am (manual = 1) ~ wt (n = 32)",
          "reference": "R 4.3.3: stats::glm(family = binomial, epsilon = 1e-15) then Newton-Raphson polish; SE from inverse information; Wald CI exp(b +/- qnorm(0.975) SE) [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-8,
          "detail": "14 quantities compared; worst relative error 6.54e-14 on Slope (X) P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Iterative ML on both sides (Plotvera Newton/IRLS; R glm polished by Newton-Raphson), so estimates are held to 1e-8 rather than 1e-9; P values and CI bounds 0.000001.",
          "maxRelError": 6.541443552142274e-14,
          "pass": true
        },
        {
          "id": "logistic.mtcars-am-qsec",
          "method": "logistic",
          "dataset": "mtcars am ~ qsec (n = 32)",
          "reference": "R 4.3.3: stats::glm(family = binomial, epsilon = 1e-15) then Newton-Raphson polish; SE from inverse information; Wald CI exp(b +/- qnorm(0.975) SE) [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-8,
          "detail": "14 quantities compared; worst relative error 5.77e-14 on Slope (X) P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Iterative ML on both sides (Plotvera Newton/IRLS; R glm polished by Newton-Raphson), so estimates are held to 1e-8 rather than 1e-9; P values and CI bounds 0.000001.",
          "maxRelError": 5.765903930363705e-14,
          "pass": true
        },
        {
          "id": "mlogistic.mtcars-am-wt-hp",
          "method": "mlogistic",
          "dataset": "mtcars am ~ wt + hp (n = 32)",
          "reference": "R 4.3.3: stats::glm(family = binomial, epsilon = 1e-15) then Newton-Raphson polish; SE from inverse information; Wald CI exp(b +/- qnorm(0.975) SE) [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-8,
          "detail": "24 quantities compared; worst relative error 1.20e-11 on LR P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Iterative ML on both sides (Plotvera Newton/IRLS; R glm polished by Newton-Raphson), so estimates are held to 1e-8 rather than 1e-9; P values and CI bounds 0.000001.",
          "maxRelError": 1.1971116643545027e-11,
          "pass": true
        },
        {
          "id": "mlogistic.mtcars-am-mpg-drat-carb",
          "method": "mlogistic",
          "dataset": "mtcars am ~ mpg + drat + carb (n = 32)",
          "reference": "R 4.3.3: stats::glm(family = binomial, epsilon = 1e-15) then Newton-Raphson polish; SE from inverse information; Wald CI exp(b +/- qnorm(0.975) SE) [validation/r/regression.R]",
          "source": "validation/reference/data/mtcars.csv",
          "tolerance": 1e-8,
          "detail": "31 quantities compared; worst relative error 1.40e-11 on LR P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Iterative ML on both sides (Plotvera Newton/IRLS; R glm polished by Newton-Raphson), so estimates are held to 1e-8 rather than 1e-9; P values and CI bounds 0.000001.",
          "maxRelError": 1.4019244644600064e-11,
          "pass": true
        },
        {
          "id": "pca.USArrests",
          "method": "pca",
          "dataset": "USArrests: Murder, Assault, UrbanPop, Rape (50 states), correlation-matrix PCA",
          "reference": "R 4.3.3: stats::prcomp(X, scale. = TRUE) [validation/r/regression.R]",
          "source": "validation/reference/data/USArrests.csv",
          "tolerance": 1e-9,
          "detail": "120 quantities compared; worst relative error 5.59e-11 on loading Rape PC4. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Eigenvalues at 1e-9; loadings and scores at 1e-8 after aligning each component's arbitrary sign to R (the eigenvector solvers differ: Jacobi/QR vs LAPACK SVD). Scores scaled by max(|score|, 1).",
          "maxRelError": 5.590004545327696e-11,
          "pass": true
        },
        {
          "id": "kmeans.iris-k3",
          "method": "kmeans",
          "dataset": "iris sepal/petal length and width (150 rows), standardised, k = 3",
          "reference": "R 4.3.3: stats::kmeans(scale(X), 3, nstart = 200, algorithm = 'Hartigan-Wong'), set.seed(1); best of 200 starts [validation/r/regression.R]",
          "source": "validation/reference/data/iris_measurements.csv",
          "tolerance": 1e-9,
          "detail": "15 quantities compared; worst relative error 1.24e-15 on cluster 1 centroid Petal.Width. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. k-means has local optima: the check is that Plotvera's 10 seeded Lloyd restarts reach the same partition as R's best of 200 Hartigan-Wong starts (total within SS 138.88835971735148 in standardised units); clusters matched by first-centroid order.",
          "maxRelError": 1.2411029746825938e-15,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "survival",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:06:04.873Z",
      "cases": [
        {
          "id": "km.aml",
          "method": "Kaplan-Meier survival estimate (Greenwood log-log 95% CI)",
          "dataset": "survival::aml: acute myelogenous leukaemia, Maintained (reference) vs Nonmaintained, n = 23",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'); summary(censored = TRUE) [validation/r/survival.R]",
          "source": "validation/reference/data/aml.csv",
          "tolerance": 1e-9,
          "detail": "78 quantities compared; worst relative error 6.20e-16 on Maintained S(13) 95% CI lower. Engine function kaplanMeier (feeds the KM graph). Every distinct time in every group compared (S, number at risk, pointwise CI). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 6.203352826538446e-16,
          "pass": true
        },
        {
          "id": "logrank.aml",
          "method": "logrank",
          "dataset": "survival::aml: acute myelogenous leukaemia, Maintained (reference) vs Nonmaintained, n = 23",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'), quantile.survfit, survdiff; Gehan-Breslow weights n_at_risk and hazard ratios from survdiff O/E/V computed in the script; coxph(ties = 'efron') [validation/r/survival.R]",
          "source": "validation/reference/data/aml.csv",
          "tolerance": 1e-9,
          "detail": "21 quantities compared; worst relative error 1.20e-10 on log-rank P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Median and its Brookmeyer-Crowley (log-log) CI compared exactly (event times). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.1981068728005356e-10,
          "pass": true
        },
        {
          "id": "cox.aml",
          "method": "cox",
          "dataset": "survival::aml: acute myelogenous leukaemia, Maintained (reference) vs Nonmaintained, n = 23",
          "reference": "R 4.3.3 (survival 3.5.8): survival::coxph(ties = 'efron', eps = 1e-11) [validation/r/survival.R]",
          "source": "validation/reference/data/aml.csv",
          "tolerance": 1e-8,
          "detail": "11 quantities compared; worst relative error 1.25e-10 on LR P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Partial-likelihood Newton iterations on both sides, so estimates are held to 1e-8; P values and CI bounds 0.000001.",
          "maxRelError": 1.2459999818198922e-10,
          "pass": true
        },
        {
          "id": "km.ovarian",
          "method": "Kaplan-Meier survival estimate (Greenwood log-log 95% CI)",
          "dataset": "survival::ovarian: rx 1 (reference) vs rx 2, n = 26",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'); summary(censored = TRUE) [validation/r/survival.R]",
          "source": "validation/reference/data/ovarian.csv",
          "tolerance": 1e-9,
          "detail": "104 quantities compared; worst relative error 5.88e-16 on rx1 S(59) 95% CI lower. Engine function kaplanMeier (feeds the KM graph). Every distinct time in every group compared (S, number at risk, pointwise CI). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 5.880839419231835e-16,
          "pass": true
        },
        {
          "id": "logrank.ovarian",
          "method": "logrank",
          "dataset": "survival::ovarian: rx 1 (reference) vs rx 2, n = 26",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'), quantile.survfit, survdiff; Gehan-Breslow weights n_at_risk and hazard ratios from survdiff O/E/V computed in the script; coxph(ties = 'efron') [validation/r/survival.R]",
          "source": "validation/reference/data/ovarian.csv",
          "tolerance": 1e-9,
          "detail": "21 quantities compared; worst relative error 2.16e-13 on Gehan-Breslow P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Median and its Brookmeyer-Crowley (log-log) CI compared exactly (event times). Median not reached for rx2: Plotvera shows no median CI there, while R reports the lower limit; the engine's limits (kmMedianCI) match R. Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 2.1554822516069449e-13,
          "pass": true
        },
        {
          "id": "cox.ovarian",
          "method": "cox",
          "dataset": "survival::ovarian: rx 1 (reference) vs rx 2, n = 26",
          "reference": "R 4.3.3 (survival 3.5.8): survival::coxph(ties = 'efron', eps = 1e-11) [validation/r/survival.R]",
          "source": "validation/reference/data/ovarian.csv",
          "tolerance": 1e-8,
          "detail": "11 quantities compared; worst relative error 1.07e-12 on Wald P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Partial-likelihood Newton iterations on both sides, so estimates are held to 1e-8; P values and CI bounds 0.000001.",
          "maxRelError": 1.0726439182475744e-12,
          "pass": true
        },
        {
          "id": "km.lung-sex",
          "method": "Kaplan-Meier survival estimate (Greenwood log-log 95% CI)",
          "dataset": "survival::lung: male (reference) vs female, n = 228, status 2 = death",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'); summary(censored = TRUE) [validation/r/survival.R]",
          "source": "validation/reference/data/lung_sex.csv",
          "tolerance": 1e-9,
          "detail": "824 quantities compared; worst relative error 5.42e-16 on male S(567) 95% CI lower. Engine function kaplanMeier (feeds the KM graph). Every distinct time in every group compared (S, number at risk, pointwise CI). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 5.419777501348786e-16,
          "pass": true
        },
        {
          "id": "logrank.lung-sex",
          "method": "logrank",
          "dataset": "survival::lung: male (reference) vs female, n = 228, status 2 = death",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'), quantile.survfit, survdiff; Gehan-Breslow weights n_at_risk and hazard ratios from survdiff O/E/V computed in the script; coxph(ties = 'efron') [validation/r/survival.R]",
          "source": "validation/reference/data/lung_sex.csv",
          "tolerance": 1e-9,
          "detail": "21 quantities compared; worst relative error 8.23e-14 on Gehan-Breslow P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Median and its Brookmeyer-Crowley (log-log) CI compared exactly (event times). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 8.22861330026093e-14,
          "pass": true
        },
        {
          "id": "cox.lung-sex",
          "method": "cox",
          "dataset": "survival::lung: male (reference) vs female, n = 228, status 2 = death",
          "reference": "R 4.3.3 (survival 3.5.8): survival::coxph(ties = 'efron', eps = 1e-11) [validation/r/survival.R]",
          "source": "validation/reference/data/lung_sex.csv",
          "tolerance": 1e-8,
          "detail": "11 quantities compared; worst relative error 5.99e-14 on LR P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Partial-likelihood Newton iterations on both sides, so estimates are held to 1e-8; P values and CI bounds 0.000001.",
          "maxRelError": 5.994542213690199e-14,
          "pass": true
        },
        {
          "id": "km.veteran-trt",
          "method": "Kaplan-Meier survival estimate (Greenwood log-log 95% CI)",
          "dataset": "survival::veteran: standard (reference) vs test chemotherapy, n = 137",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'); summary(censored = TRUE) [validation/r/survival.R]",
          "source": "validation/reference/data/veteran_trt.csv",
          "tolerance": 1e-9,
          "detail": "452 quantities compared; worst relative error 1.29e-15 on standard S(392) 95% CI upper. Engine function kaplanMeier (feeds the KM graph). Every distinct time in every group compared (S, number at risk, pointwise CI). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 1.2900603779100882e-15,
          "pass": true
        },
        {
          "id": "logrank.veteran-trt",
          "method": "logrank",
          "dataset": "survival::veteran: standard (reference) vs test chemotherapy, n = 137",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'), quantile.survfit, survdiff; Gehan-Breslow weights n_at_risk and hazard ratios from survdiff O/E/V computed in the script; coxph(ties = 'efron') [validation/r/survival.R]",
          "source": "validation/reference/data/veteran_trt.csv",
          "tolerance": 1e-9,
          "detail": "21 quantities compared; worst relative error 8.84e-14 on Gehan-Breslow P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Median and its Brookmeyer-Crowley (log-log) CI compared exactly (event times). For test (median 52.5, first time at 50% 52) S is exactly 0.5 over an interval: R quantile.survfit and Prism (GraphPad FAQ 44, after Machin) both report the midpoint, and so does Plotvera since engine 1.19.0. Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 8.844493126117808e-14,
          "pass": true
        },
        {
          "id": "cox.veteran-trt",
          "method": "cox",
          "dataset": "survival::veteran: standard (reference) vs test chemotherapy, n = 137",
          "reference": "R 4.3.3 (survival 3.5.8): survival::coxph(ties = 'efron', eps = 1e-11) [validation/r/survival.R]",
          "source": "validation/reference/data/veteran_trt.csv",
          "tolerance": 1e-8,
          "detail": "11 quantities compared; worst relative error 1.77e-10 on LR chi-square. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Partial-likelihood Newton iterations on both sides, so estimates are held to 1e-8; P values and CI bounds 0.000001.",
          "maxRelError": 1.7683662879969774e-10,
          "pass": true
        },
        {
          "id": "km.lung-ecog3",
          "method": "Kaplan-Meier survival estimate (Greenwood log-log 95% CI)",
          "dataset": "survival::lung by ECOG score 0, 1, 2 (three groups, n = 227)",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'); summary(censored = TRUE) [validation/r/survival.R]",
          "source": "validation/reference/data/lung_ecog.csv",
          "tolerance": 1e-9,
          "detail": "858 quantities compared; worst relative error 7.84e-16 on ecog1 S(731) 95% CI lower. Engine function kaplanMeier (feeds the KM graph). Every distinct time in every group compared (S, number at risk, pointwise CI). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 7.836392828227697e-16,
          "pass": true
        },
        {
          "id": "logrank.lung-ecog3",
          "method": "logrank",
          "dataset": "survival::lung by ECOG score 0, 1, 2 (three groups, n = 227)",
          "reference": "R 4.3.3 (survival 3.5.8): survival::survfit(conf.type = 'log-log'), quantile.survfit, survdiff; Gehan-Breslow weights n_at_risk and hazard ratios from survdiff O/E/V computed in the script; coxph(ties = 'efron') [validation/r/survival.R]",
          "source": "validation/reference/data/lung_ecog.csv",
          "tolerance": 1e-9,
          "detail": "20 quantities compared; worst relative error 5.89e-13 on Gehan-Breslow P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Median and its Brookmeyer-Crowley (log-log) CI compared exactly (event times). Tolerances: estimates/statistics 1e-9 relative; P values and CI bounds 0.000001.",
          "maxRelError": 5.891037628867313e-13,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "numerical",
      "part": "ttests",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:06:26.584Z",
      "cases": [
        {
          "id": "ttest.onesample.sleep-drug1",
          "method": "onesample",
          "dataset": "sleep (Student 1908), drug 1, mu = 0",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(x, mu = 0) [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 2.02e-9 on 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 2.0243944512937813e-9,
          "pass": true
        },
        {
          "id": "ttest.onesample.women-height-60",
          "method": "onesample",
          "dataset": "women heights, mu = 60",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(x, mu = 60) [validation/r/ttests.R]",
          "source": "validation/reference/data/women.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 3.02e-9 on 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 3.0194606591919515e-9,
          "pass": true
        },
        {
          "id": "ttest.paired.sleep",
          "method": "paired",
          "dataset": "sleep (Student 1908), drug 1 vs drug 2 within patient",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(a, b, paired = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 2.02e-9 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 2.024394541733083e-9,
          "pass": true
        },
        {
          "id": "ttest.unpaired.student-sleep",
          "method": "unpaired",
          "dataset": "sleep (Student 1908), drug 1 vs drug 2 as independent groups",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(a, b, var.equal = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 1.21e-8 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.2116258314541397e-8,
          "pass": true
        },
        {
          "id": "ttest.unpaired.welch-sleep",
          "method": "welch",
          "dataset": "sleep (Student 1908), drug 1 vs drug 2 as independent groups",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(a, b, var.equal = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "7 quantities compared; worst relative error 1.14e-8 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.1395859303959445e-8,
          "pass": true
        },
        {
          "id": "ttest.unpaired.log10-PlantGrowth-ctrl-trt2",
          "method": "unpaired",
          "dataset": "PlantGrowth ctrl vs trt2, log10-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(log10(a), log10(b), var.equal = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 1.21e-8 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on log10-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.2116257820798907e-8,
          "pass": true
        },
        {
          "id": "ttest.welch.log10-PlantGrowth-ctrl-trt2",
          "method": "welch",
          "dataset": "PlantGrowth ctrl vs trt2, log10-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(log10(a), log10(b), var.equal = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 6.37e-9 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on log10-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 6.369151684812524e-9,
          "pass": true
        },
        {
          "id": "ttest.unpaired.ln-PlantGrowth-ctrl-trt2",
          "method": "unpaired",
          "dataset": "PlantGrowth ctrl vs trt2, ln-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(ln(a), ln(b), var.equal = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 1.21e-8 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on ln-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.2116260272313447e-8,
          "pass": true
        },
        {
          "id": "ttest.welch.ln-PlantGrowth-ctrl-trt2",
          "method": "welch",
          "dataset": "PlantGrowth ctrl vs trt2, ln-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(ln(a), ln(b), var.equal = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 6.37e-9 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on ln-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 6.369154471405456e-9,
          "pass": true
        },
        {
          "id": "ttest.unpaired.log2-PlantGrowth-ctrl-trt2",
          "method": "unpaired",
          "dataset": "PlantGrowth ctrl vs trt2, log2-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(log2(a), log2(b), var.equal = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 1.21e-8 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on log2-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.2116259552450508e-8,
          "pass": true
        },
        {
          "id": "ttest.welch.log2-PlantGrowth-ctrl-trt2",
          "method": "welch",
          "dataset": "PlantGrowth ctrl vs trt2, log2-transformed before testing",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(log2(a), log2(b), var.equal = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 6.37e-9 on 95% CI upper. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on log2-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 6.369155351777504e-9,
          "pass": true
        },
        {
          "id": "ttest.paired.log10-PlantGrowth-ctrl-trt1",
          "method": "paired",
          "dataset": "PlantGrowth ctrl vs trt1 paired by row (illustrative pairing), log10-transformed",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::t.test(log10(a), log10(b), paired = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/PlantGrowth_wide.csv",
          "tolerance": 1e-9,
          "detail": "5 quantities compared; worst relative error 2.02e-9 on 95% CI lower. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Test on log10-transformed values (Plotvera \"test scale\" option); CI is on the transformed scale. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 2.024394477994944e-9,
          "pass": true
        },
        {
          "id": "mannwhitney.airquality-ozone-may-aug",
          "method": "mannwhitney",
          "dataset": "airquality Ozone, May vs August (ties: normal approximation)",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(x, y, correct = TRUE, exact = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/airquality_ozone_may_aug.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 5.69e-13 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. U is reported as min(U1, U2); R reports W = U1, converted in the R script. Normal approximation with tie and continuity correction on both sides (R correct = TRUE). Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 5.689897525529282e-13,
          "pass": true
        },
        {
          "id": "mannwhitney.exact-anorexia-FT-CBT",
          "method": "mannwhitney",
          "dataset": "MASS::anorexia post-treatment weight, FT (n=17) vs CBT (n=29); no ties, exact",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(x, y, exact = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/anorexia_postwt_FT_CBT.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 3.49e-16 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. U is reported as min(U1, U2); R reports W = U1, converted in the R script. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 3.485063866767318e-16,
          "pass": true
        },
        {
          "id": "wilcoxon.paired-sleep",
          "method": "wilcoxon",
          "dataset": "sleep drug 1 vs drug 2 (one zero difference dropped; tied |d|: normal approximation)",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(a, b, paired = TRUE, correct = TRUE, exact = FALSE) [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 5.15e-15 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Normal approximation with tie and continuity correction on both sides (R correct = TRUE). Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 5.152248349832318e-15,
          "pass": true
        },
        {
          "id": "wilcoxon.paired-exact-anorexia-FT",
          "method": "wilcoxon",
          "dataset": "MASS::anorexia FT group, Postwt vs Prewt (n=17, no ties): exact",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(post, pre, paired = TRUE, exact = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/anorexia_FT_pre_post.csv",
          "tolerance": 1e-9,
          "detail": "3 quantities compared; worst relative error 2.58e-16 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 2.5837917664003637e-16,
          "pass": true
        },
        {
          "id": "wilcoxon1.exact-anorexia-FT-postwt-85",
          "method": "wilcoxon1",
          "dataset": "MASS::anorexia FT Postwt vs hypothetical 85 lb (no ties): exact",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(x, mu = 85, exact = TRUE) [validation/r/ttests.R]",
          "source": "validation/reference/data/anorexia_FT_pre_post.csv",
          "tolerance": 1e-9,
          "detail": "2 quantities compared; worst relative error 1.14e-16 on P. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 1.13686837721616e-16,
          "pass": true
        },
        {
          "id": "wilcoxon1.sleep-drug2-mu1",
          "method": "wilcoxon1",
          "dataset": "sleep drug 2 vs hypothetical 1 (R default: exact; decimal ties 0.9/-0.9 differ in binary64)",
          "reference": "R 4.3.3 (MASS 7.3.60.0.1): stats::wilcox.test(x, mu = 1) [R default method] [validation/r/ttests.R]",
          "source": "validation/reference/data/sleep_wide.csv",
          "tolerance": 1e-9,
          "detail": "2 quantities compared. Display formatters fmt/fmtP/fmtR2/fmtDecisionP replaced by full-precision String(x) for the test; engine arithmetic untouched. Tolerances: statistics 1e-9 relative; P values and CI bounds 1e-6 (distribution-function precision, see numerical.distributions).",
          "maxRelError": 0,
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "property",
      "part": "analyses",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:05:10.207Z",
      "cases": [
        {
          "id": "property.analyses.sweep.column",
          "method": "Every column-table analysis (descriptive, normality, onesample, wilcoxon1, unpaired, welch, paired, mannwhitney, wilcoxon, anova1, rmanova1, kruskal, friedman, pearson, spearman, roc, blandaltman, grubbs, rout, freqdist) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23040, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.xy",
          "method": "Every xy-table analysis (tcmixed, tcauc, aucwiz, pearson, spearman, linreg, curvefit, stdcurve, logistic, roc, auc, customfit, smooth, derivative, integral) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23041, runs 250)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.grouped",
          "method": "Every grouped-table analysis (descriptive, anova2, anova2rm, multittest) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23042, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.survival",
          "method": "Every survival-table analysis (logrank, cox) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23043, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.contingency",
          "method": "Every contingency-table analysis (chisq, diag2x2) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23044, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.nested",
          "method": "Every nested-table analysis (nestedt, nestedanova) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23045, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.sweep.multivar",
          "method": "Every multivar-table analysis (descriptive, normality, pearson, spearman, corrmatrix, mlregress, pca, kmeans, mlogistic, freqdist, multittest) on random tables with blanks, NA, text, ties, constants and extremes: result or refusal, no NaN/Infinity shown, P in [0,1], R² <= 1, SD >= 0",
          "dataset": "generated (fast-check seed 23046, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.blanks.excluded",
          "method": "Column-table tests (onesample, wilcoxon1, unpaired, welch, mannwhitney, anova1, kruskal, normality): blanks, spaces and NA in the column give the identical result to the column without them",
          "dataset": "generated (fast-check seed 23297, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.analyses.blanks.paired",
          "method": "Paired t and Wilcoxon matched-pairs: a row with a blank in either column is dropped as a pair, the same as deleting that row",
          "dataset": "generated (fast-check seed 23298, runs 300)",
          "reference": "invariant",
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "property",
      "part": "csv",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:42.044Z",
      "cases": [
        {
          "id": "property.csv.csv.roundtrip.numeric",
          "method": "CSV export then import: numeric cells (negatives, exponents, 1e±300, -0) and blanks round-trip exactly; blank never becomes 0",
          "dataset": "generated (fast-check seed 10753, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.csv.roundtrip.mixed",
          "method": "CSV export then import: text cells with quotes, commas, tabs, newlines and unicode round-trip exactly",
          "dataset": "generated (fast-check seed 10754, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.csv.roundtrip.one-column",
          "method": "CSV export then import of a one-column table keeps one column and every value",
          "dataset": "generated (fast-check seed 10755, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.csv.one-column.stray-separator",
          "method": "One-column list with a single cell holding \";\", \"|\" or a tab: still one column, no value lost",
          "dataset": "generated (fast-check seed 10758, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.csv.roundtrip.rfc4180",
          "method": "Statistics-file/JSON CSV text (tableToCsv) then import round-trips cells",
          "dataset": "generated (fast-check seed 10756, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.csv.blank-not-zero",
          "method": "CSV import: every blank cell stays blank (never \"0\"), whatever the delimiter",
          "dataset": "generated (fast-check seed 10757, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.clipboard.tsv-roundtrip",
          "method": "Copy cells as TSV then paste: the same matrix comes back (quotes, tabs, newlines, blanks, unicode)",
          "dataset": "generated (fast-check seed 11009, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.clipboard.html-roundtrip",
          "method": "Copy cells as an HTML table then paste into Plotvera: the same matrix comes back",
          "dataset": "generated (fast-check seed 11010, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.robust.delimited",
          "method": "Text import (preview and parse, header on/off/auto): arbitrary text gives a table or a plain error",
          "dataset": "generated (fast-check seed 11265, runs 500)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.robust.clipboard",
          "method": "Clipboard paste: arbitrary text or HTML gives a block or a plain error",
          "dataset": "generated (fast-check seed 11266, runs 500)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.robust.labformats",
          "method": "Lab-format recognition: arbitrary text is recognised or passed through, never a crash",
          "dataset": "generated (fast-check seed 11267, runs 500)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.csv.robust.large",
          "method": "Text import of a 20,000-row file completes within 5 s",
          "dataset": "generated (fast-check seed 11268, runs 3)",
          "reference": "invariant",
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "property",
      "part": "import",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:48.861Z",
      "cases": [
        {
          "id": "property.import.garbage.any-name",
          "method": "Open file: arbitrary bytes under each supported extension return a result or a plain error, never a crash",
          "dataset": "generated (fast-check seed 6657, runs 150)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-zip",
          "method": "Open book.xlsx: a valid zip signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6675, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-zip-prism",
          "method": "Open graph.prism: a valid zip-prism signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6681, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-zip-pptx",
          "method": "Open deck.pptx: a valid zip-pptx signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6680, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-sav",
          "method": "Open survey.sav: a valid sav signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6675, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-dta",
          "method": "Open study.dta: a valid dta signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6675, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-xpt",
          "method": "Open study.xpt: a valid xpt signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6675, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.garbage.magic-ole",
          "method": "Open graph.prism: a valid ole signature followed by random bytes fails gracefully",
          "dataset": "generated (fast-check seed 6675, runs 80)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.prism-zip",
          "method": "Open no-analysis.prism after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7015, runs 40)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.prism-ole",
          "method": "Open ole.prism after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7005, runs 30)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.xlsx",
          "method": "Open colony_counts.xlsx after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 6980, runs 40)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.sav",
          "method": "Open tumour.sav after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7053, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.zsav",
          "method": "Open tumour_compressed.sav after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7060, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.dta-114",
          "method": "Open tumour_114.dta after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7081, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.dta-117",
          "method": "Open tumour_117.dta after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7081, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.dta-118",
          "method": "Open tumour_118_strl.dta after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7081, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.xpt-v5",
          "method": "Open tumour_v5.xpt after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7074, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.xpt-v8",
          "method": "Open tumour_v8.xpt after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7074, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.plotvera",
          "method": "Open r-column.plotvera after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7088, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.plotvera-json",
          "method": "Open minimal-project.plotvera.json after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7123, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.csv-flowjo",
          "method": "Open flowjo_table.csv after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7102, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.corrupt.csv-imagej",
          "method": "Open imagej_results.csv after random truncation, byte flips or spliced garbage: result or plain error, never a crash or hang",
          "dataset": "generated (fast-check seed 7102, runs 120)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.statfile.direct",
          "method": "SPSS/Stata/SAS readers: random bytes give a table or a plain error",
          "dataset": "generated (fast-check seed 7169, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.zip.preflight",
          "method": "Excel ZIP preflight: corrupted archives give a plain error",
          "dataset": "generated (fast-check seed 7170, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.xlsx.preview",
          "method": "Excel preview: corrupted .xlsx gives a workbook or a plain error",
          "dataset": "generated (fast-check seed 7171, runs 40)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.pzfx.safety-screen",
          "method": "Prism .pzfx safety screen (DTD/entity refusal): arbitrary or corrupted XML text passes or gets a plain error",
          "dataset": "generated (fast-check seed 7172, runs 200)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.project.arbitrary-json",
          "method": "Project codec: any JSON value is a project or a plain error",
          "dataset": "generated (fast-check seed 7173, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.json.interpret",
          "method": "JSON data import: any JSON value gives tables, a project or a plain refusal",
          "dataset": "generated (fast-check seed 7174, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.import.pptx.embedded-garbage",
          "method": "PowerPoint import: a deck whose embedded OLE objects are garbage fails gracefully",
          "dataset": "generated (fast-check seed 7175, runs 60)",
          "reference": "invariant",
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "property",
      "part": "project",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:44.172Z",
      "cases": [
        {
          "id": "property.project.codec.roundtrip",
          "method": "Project save then open (.plotvera.json through UTF-8 bytes): tables, results and graphs deep-equal what was saved",
          "dataset": "generated (fast-check seed 14849, runs 150)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.project.codec.fixed-point",
          "method": "Project save, open, save again: identical bytes",
          "dataset": "generated (fast-check seed 14850, runs 150)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.project.share.roundtrip",
          "method": "Share link (gzip + base64url) encode then decode deep-equals the project",
          "dataset": "generated (fast-check seed 14851, runs 60)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.project.codec.damaged",
          "method": "Project open after random edits to the saved JSON text: a project or a plain error, never a crash",
          "dataset": "generated (fast-check seed 14852, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.project.share.damaged",
          "method": "Share link decode of random or damaged fragments returns null or a project, never throws",
          "dataset": "generated (fast-check seed 14853, runs 200)",
          "reference": "invariant",
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "property",
      "part": "stats",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:03:22.470Z",
      "cases": [
        {
          "id": "property.stats.describe.invariants",
          "method": "Descriptive stats on any finite data incl. ±1e300, subnormals and ±MAX_VALUE: min<=Q1<=median<=Q3<=max, min<=mean<=max, SD>=0, CI contains mean, nothing NaN",
          "dataset": "generated (fast-check seed 18945, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.describe.permutation",
          "method": "Descriptive stats are identical for any reordering of the values",
          "dataset": "generated (fast-check seed 18946, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.ttest.permutation",
          "method": "Unpaired and Welch t: shuffling values within each group leaves P unchanged",
          "dataset": "generated (fast-check seed 19201, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.ttest.swap",
          "method": "Unpaired and Welch t: swapping the two groups negates the mean difference and keeps P",
          "dataset": "generated (fast-check seed 19202, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.ttest.affine",
          "method": "Unpaired and Welch t: P unchanged under y -> a*y + b (a in 1e-6..1e6, |b| up to 1e9*a)",
          "dataset": "generated (fast-check seed 19203, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.ttest.monotone",
          "method": "Unpaired t: with the same scatter, a larger difference in means gives a P no larger",
          "dataset": "generated (fast-check seed 19204, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.mw.invariants",
          "method": "Mann-Whitney: P unchanged by within-group shuffles, swapping groups and y -> a*y + b; never increases with a larger shift",
          "dataset": "generated (fast-check seed 19205, runs 250)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.paired.invariants",
          "method": "Paired t and Wilcoxon matched-pairs: shuffling pairs, swapping the columns and y -> a*y + b keep P",
          "dataset": "generated (fast-check seed 19206, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.two-group.p-range",
          "method": "All two-group tests on tiny, tied or constant samples: P in [0, 1] or an explicit refusal, nothing shown as NaN",
          "dataset": "generated (fast-check seed 19207, runs 500)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.anova-kw.permutation",
          "method": "One-way ANOVA and Kruskal-Wallis: shuffling values within groups and reordering the groups keep P",
          "dataset": "generated (fast-check seed 19457, runs 250)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.anova-kw.affine",
          "method": "One-way ANOVA and Kruskal-Wallis: P unchanged under y -> a*y + b",
          "dataset": "generated (fast-check seed 19458, runs 250)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.anova-kw.constant",
          "method": "ANOVA, Kruskal-Wallis, t and Mann-Whitney on all-equal values: an explicit refusal",
          "dataset": "generated (fast-check seed 19459, runs 100)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.correlation.invariants",
          "method": "Pearson and Spearman: r in [-1,1], CI contains r, P in [0,1]; unchanged by pair order and positive rescaling; r negates when one axis is negated",
          "dataset": "generated (fast-check seed 19713, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.nonfinite.handling",
          "method": "Two-group, k-group and correlation tests with NaN/±Infinity inserted: same result as without them, or an explicit refusal; never a shown NaN",
          "dataset": "generated (fast-check seed 19969, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.extreme.magnitudes",
          "method": "Tests on data with ±1e300, 1e-300, subnormals, ±MAX_VALUE and mixed magnitudes: a finite result or a refusal, P in [0, 1]",
          "dataset": "generated (fast-check seed 19970, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.dist.monotone",
          "method": "t, F, chi-square CDFs non-decreasing in x; normal quantile increasing in p; two-tailed t P in [0, 1]",
          "dataset": "generated (fast-check seed 20225, runs 500)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.linreg.invariants",
          "method": "Linear regression: R² in [0, 1]; slope P unchanged under y -> a*y + b; slope sign follows a negated Y",
          "dataset": "generated (fast-check seed 20226, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.nonlinear.converged-finite",
          "method": "Nonlinear fits (4PL, exponentials, Michaelis-Menten, Gaussian, Hill) on random/noisy/degenerate data: converged implies finite parameters and R² <= 1",
          "dataset": "generated (fast-check seed 20227, runs 150)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.km.monotone",
          "method": "Kaplan-Meier on any times/censoring/ties: S(t) in [0,1] and non-increasing, 95% CI brackets S, at-risk non-increasing; log-rank P in [0,1]",
          "dataset": "generated (fast-check seed 20228, runs 300)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.contingency.invariants",
          "method": "Fisher exact 2x2: P in [0,1] and unchanged by transposing or swapping rows; chi-square result never shows NaN",
          "dataset": "generated (fast-check seed 20229, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.multcomp.adjust",
          "method": "Bonferroni, Holm, Benjamini-Hochberg and others: adjusted P >= raw P, within [0,1], and a smaller raw P never gets a larger adjusted P",
          "dataset": "generated (fast-check seed 20230, runs 400)",
          "reference": "invariant",
          "pass": true
        },
        {
          "id": "property.stats.huge-n",
          "method": "n = 100,000 per group: t, Welch, Mann-Whitney, Wilcoxon, ANOVA, Kruskal-Wallis, correlation, regression and descriptive stats complete with finite output and P in [0, 1]",
          "dataset": "generated (fast-check seed 20231, runs 1)",
          "reference": "invariant",
          "pass": true
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "rendering",
      "part": "svg-golden",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:30.605Z",
      "cases": [
        {
          "id": "rendering.base.column-scatter",
          "method": "column-scatter golden SVG: column-scatter on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.base.bar",
          "method": "bar golden SVG: bar on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.base.box",
          "method": "box golden SVG: box on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 88 elements"
        },
        {
          "id": "rendering.base.violin",
          "method": "violin golden SVG: violin on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 76 elements"
        },
        {
          "id": "rendering.base.before-after",
          "method": "beforeafter golden SVG: beforeafter on paired, default style",
          "dataset": "paired + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 66 elements"
        },
        {
          "id": "rendering.base.grouped-bar",
          "method": "grouped-bar golden SVG: grouped-bar on grouped, default style",
          "dataset": "grouped + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 124 elements"
        },
        {
          "id": "rendering.base.stacked-bar",
          "method": "stacked-bar golden SVG: stacked-bar on grouped, default style",
          "dataset": "grouped + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 71 elements"
        },
        {
          "id": "rendering.base.stacked-100",
          "method": "100stacked golden SVG: 100stacked on grouped, default style",
          "dataset": "grouped + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 74 elements"
        },
        {
          "id": "rendering.base.line",
          "method": "line golden SVG: line on xyThree, default style",
          "dataset": "xyThree + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 86 elements"
        },
        {
          "id": "rendering.base.scatter",
          "method": "scatter golden SVG: scatter on xyThree, default style",
          "dataset": "xyThree + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.base.line-replicates",
          "method": "line golden SVG: line on timeCourse, default style",
          "dataset": "timeCourse + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 152 elements"
        },
        {
          "id": "rendering.base.area",
          "method": "area golden SVG: area on xyThree, default style",
          "dataset": "xyThree + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 86 elements"
        },
        {
          "id": "rendering.base.stacked-area",
          "method": "stacked-area golden SVG: stacked-area on xyThree, default style",
          "dataset": "xyThree + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 74 elements"
        },
        {
          "id": "rendering.base.survival",
          "method": "survival golden SVG: survival on survival, default style",
          "dataset": "survival + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 111 elements"
        },
        {
          "id": "rendering.base.histogram",
          "method": "histogram golden SVG: histogram on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 58 elements"
        },
        {
          "id": "rendering.base.qq",
          "method": "qq golden SVG: qq on threeColumns, default style",
          "dataset": "threeColumns + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 64 elements"
        },
        {
          "id": "rendering.base.bland-altman",
          "method": "bland-altman golden SVG: bland-altman on twoPaired, default style",
          "dataset": "twoPaired + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 77 elements"
        },
        {
          "id": "rendering.base.heatmap",
          "method": "heatmap golden SVG: heatmap on multivar, default style",
          "dataset": "multivar + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 137 elements"
        },
        {
          "id": "rendering.base.forest",
          "method": "forest golden SVG: forest on forestSheet, default style",
          "dataset": "forestSheet + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 59 elements"
        },
        {
          "id": "rendering.base.volcano",
          "method": "volcano golden SVG: volcano on volcanoSheet, default style",
          "dataset": "volcanoSheet + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 90 elements"
        },
        {
          "id": "rendering.base.pie",
          "method": "pie golden SVG: pie on partsofwhole, default style",
          "dataset": "partsofwhole + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 67 elements"
        },
        {
          "id": "rendering.base.donut",
          "method": "donut golden SVG: donut on partsofwhole, default style",
          "dataset": "partsofwhole + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 67 elements"
        },
        {
          "id": "rendering.base.bubble",
          "method": "bubble golden SVG: bubble on xyThree, default style",
          "dataset": "xyThree + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 72 elements"
        },
        {
          "id": "rendering.base.roc",
          "method": "roc golden SVG: roc on rocSheet, default style",
          "dataset": "rocSheet + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 63 elements"
        },
        {
          "id": "rendering.base.timepoint-dots",
          "method": "column-scatter golden SVG: column-scatter on timeCourse, default style",
          "dataset": "timeCourse + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 162 elements"
        },
        {
          "id": "rendering.base.timepoint-box",
          "method": "box golden SVG: box on timeCourse, default style",
          "dataset": "timeCourse + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 146 elements"
        },
        {
          "id": "rendering.base.timepoint-violin",
          "method": "violin golden SVG: violin on timeCourse, default style",
          "dataset": "timeCourse + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 110 elements"
        },
        {
          "id": "rendering.base.timepoint-grouped-bars",
          "method": "grouped-bar golden SVG: grouped-bar on timeCourse, default style",
          "dataset": "timeCourse + {}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 162 elements"
        },
        {
          "id": "rendering.log.column-scatter-logy",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.log.bar-logy",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.log.box-logy",
          "method": "box golden SVG: box on threeColumns",
          "dataset": "threeColumns + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 88 elements"
        },
        {
          "id": "rendering.log.violin-logy",
          "method": "violin golden SVG: violin on threeColumns",
          "dataset": "threeColumns + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 76 elements"
        },
        {
          "id": "rendering.log.line-replicates-logy",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 221 elements"
        },
        {
          "id": "rendering.log.scatter-logx-logy",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"logX\":true,\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 102 elements"
        },
        {
          "id": "rendering.log.scatter-logy-base2",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"logY\":true,\"yAxis\":{\"logBase\":2}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 77 elements"
        },
        {
          "id": "rendering.log.scatter-logy-base-e",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"logY\":true,\"yAxis\":{\"logBase\":\"e\"}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 81 elements"
        },
        {
          "id": "rendering.log.column-scatter-symlog",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"symlogY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 114 elements"
        },
        {
          "id": "rendering.log.grouped-bar-logy",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 137 elements"
        },
        {
          "id": "rendering.error.bar-sem",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"sem\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.error.bar-ci",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"ci\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.error.bar-range",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"range\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.error.bar-iqr",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"iqr\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.error.bar-none",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"none\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.error.bar-gsd-logy",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"gsd\",\"logY\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.error.bar-medci",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"medci\",\"barStyle\":\"meanline\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.error.line-replicates-sem",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"errorBars\":\"sem\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 160 elements"
        },
        {
          "id": "rendering.error.grouped-bar-sem",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"errorBars\":\"sem\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 124 elements"
        },
        {
          "id": "rendering.error.column-scatter-sem",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"sem\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.error.line-replicates-ci",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"errorBars\":\"ci\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 146 elements"
        },
        {
          "id": "rendering.error.grouped-bar-ci",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"errorBars\":\"ci\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 124 elements"
        },
        {
          "id": "rendering.error.column-scatter-ci",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"ci\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.error.line-replicates-none",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"errorBars\":\"none\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 113 elements"
        },
        {
          "id": "rendering.error.grouped-bar-none",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"errorBars\":\"none\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 100 elements"
        },
        {
          "id": "rendering.error.column-scatter-none",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"none\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.error.bar-sd-black",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"errorBars\":\"sd\",\"errorColor\":\"black\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.error.line-replicates-band",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"errorBars\":\"sem\",\"errorDisplay\":\"band\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 122 elements"
        },
        {
          "id": "rendering.error.line-replicates-both",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"errorBars\":\"sd\",\"errorDisplay\":\"both\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 155 elements"
        },
        {
          "id": "rendering.error.line-replicates-points-subject-lines",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"xyReplicatePoints\":true,\"xySubjectLines\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 269 elements"
        },
        {
          "id": "rendering.legend.bar-off",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.legend.line-replicates-off",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 134 elements"
        },
        {
          "id": "rendering.legend.survival-off",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 101 elements"
        },
        {
          "id": "rendering.legend.grouped-bar-off",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 109 elements"
        },
        {
          "id": "rendering.legend.scatter-off",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 65 elements"
        },
        {
          "id": "rendering.legend.pie-off",
          "method": "pie golden SVG: pie on partsofwhole",
          "dataset": "partsofwhole + {\"showLegend\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 37 elements"
        },
        {
          "id": "rendering.legend.bar-top",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"legendPos\":\"top\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.legend.bar-bottom",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"legendPos\":\"bottom\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.heatmap-magma",
          "method": "heatmap golden SVG: heatmap on multivar",
          "dataset": "multivar + {\"colormap\":\"magma\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 136 elements"
        },
        {
          "id": "rendering.legend.line-inside-box-title",
          "method": "line golden SVG: line on xyThree",
          "dataset": "xyThree + {\"legendPos\":\"inside\",\"legendBox\":true,\"legendTitle\":\"Arm\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 83 elements"
        },
        {
          "id": "rendering.legend.line-hidden-entry",
          "method": "line golden SVG: line on xyThree",
          "dataset": "xyThree + {\"hiddenLegendEntries\":[1]}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.palette.bar-npg",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"npg\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.bar-aaas",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"aaas\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.bar-colour-blind-8",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"colour-blind-8\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.bar-high-contrast",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"high-contrast\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.bar-grayscale",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"grayscale\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.bar-deep-ink",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"palette\":\"deep-ink\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.palette.line-replicates-npg",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"palette\":\"npg\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 152 elements"
        },
        {
          "id": "rendering.palette.survival-lancet",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"palette\":\"lancet\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 111 elements"
        },
        {
          "id": "rendering.dark.bar",
          "method": "bar golden SVG: bar on a dark-ish canvas",
          "dataset": "threeColumns + {\"bg\":\"#14181f\",\"plotBg\":\"#1b212b\",\"textColor\":\"#e6e9ee\",\"palette\":\"high-contrast\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.dark.scatter",
          "method": "scatter golden SVG: scatter on a dark-ish canvas",
          "dataset": "xyThree + {\"bg\":\"#14181f\",\"plotBg\":\"#1b212b\",\"textColor\":\"#e6e9ee\",\"palette\":\"high-contrast\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 81 elements"
        },
        {
          "id": "rendering.dark.violin",
          "method": "violin golden SVG: violin on a dark-ish canvas",
          "dataset": "threeColumns + {\"bg\":\"#14181f\",\"plotBg\":\"#1b212b\",\"textColor\":\"#e6e9ee\",\"palette\":\"high-contrast\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 77 elements"
        },
        {
          "id": "rendering.dark.survival",
          "method": "survival golden SVG: survival on a dark-ish canvas",
          "dataset": "survival + {\"bg\":\"#14181f\",\"plotBg\":\"#1b212b\",\"textColor\":\"#e6e9ee\",\"palette\":\"high-contrast\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 112 elements"
        },
        {
          "id": "rendering.dark.heatmap-viridis",
          "method": "heatmap golden SVG: heatmap, viridis on dark",
          "dataset": "multivar + {\"bg\":\"#14181f\",\"plotBg\":\"#1b212b\",\"textColor\":\"#e6e9ee\",\"palette\":\"high-contrast\",\"colormap\":\"viridis\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 138 elements"
        },
        {
          "id": "rendering.ticks.bar-x-diagonal",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"xTickAngle\":\"diagonal\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.ticks.bar-x-vertical",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"xTickAngle\":\"vertical\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.ticks.bar-x-none",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"xTickAngle\":\"none\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.ticks.grouped-bar-x-vertical",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"xTickAngle\":\"vertical\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 124 elements"
        },
        {
          "id": "rendering.ticks.grouped-bar-x-diagonal",
          "method": "grouped-bar golden SVG: grouped-bar on grouped",
          "dataset": "grouped + {\"xTickAngle\":\"diagonal\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 124 elements"
        },
        {
          "id": "rendering.ticks.scatter-numeric-45deg",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"xAxis\":{\"labelAngle\":45}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.ticks.scatter-y-45deg",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"yAxis\":{\"labelAngle\":-45}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.ticks.bar-minor-grid",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"showGrid\":true,\"gridMinor\":true,\"yAxis\":{\"minorTicks\":4}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 125 elements"
        },
        {
          "id": "rendering.ticks.scatter-interval-labelevery",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"yAxis\":{\"interval\":1,\"labelEvery\":2}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 81 elements"
        },
        {
          "id": "rendering.ticks.scatter-reverse-axes",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"xAxis\":{\"reverse\":true},\"yAxis\":{\"reverse\":true}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.split.bar-two-segments",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"yAxis\":{\"segments\":[{\"min\":0,\"max\":300},{\"min\":600,\"max\":1000}]}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 92 elements"
        },
        {
          "id": "rendering.split.column-scatter-two-segments",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"yAxis\":{\"segments\":[{\"min\":0,\"max\":300},{\"min\":600,\"max\":1000}]}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 98 elements"
        },
        {
          "id": "rendering.split.bar-three-segments",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"yAxis\":{\"segments\":[{\"min\":0,\"max\":100},{\"min\":150,\"max\":300},{\"min\":600,\"max\":1000}]}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 105 elements"
        },
        {
          "id": "rendering.split.bar-break-wave",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"yAxis\":{\"segments\":[{\"min\":0,\"max\":300},{\"min\":600,\"max\":1000}],\"breakMark\":\"wave\"}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 93 elements"
        },
        {
          "id": "rendering.split.bar-legacy-axis-break",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"axisBreak\":{\"enabled\":true,\"low\":300,\"high\":600}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.split.scatter-x-axis",
          "method": "scatter golden SVG: scatter on timeCourse",
          "dataset": "timeCourse + {\"xAxis\":{\"segments\":[{\"min\":0,\"max\":8},{\"min\":13,\"max\":22}]}}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 165 elements"
        },
        {
          "id": "rendering.fit.scatter-linear",
          "method": "scatter golden SVG: scatter on linear",
          "dataset": "linear + {\"fitModel\":\"linear\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 72 elements"
        },
        {
          "id": "rendering.fit.scatter-linear-band",
          "method": "scatter golden SVG: scatter on linear",
          "dataset": "linear + {\"fitModel\":\"linear\",\"fitBand\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 73 elements"
        },
        {
          "id": "rendering.fit.scatter-dose-4pl",
          "method": "scatter golden SVG: scatter on dose",
          "dataset": "dose + {\"fitModel\":\"dose4pl\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 75 elements"
        },
        {
          "id": "rendering.fit.scatter-dose-4pl-dashed",
          "method": "scatter golden SVG: scatter on dose",
          "dataset": "dose + {\"fitModel\":\"dose4pl\",\"fitLine\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 75 elements"
        },
        {
          "id": "rendering.fit.scatter-poly2",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"fitModel\":\"poly2\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 80 elements"
        },
        {
          "id": "rendering.fit.scatter-elisa-4pl-replicates",
          "method": "scatter golden SVG: scatter on elisa",
          "dataset": "elisa + {\"fitModel\":\"dose4pl\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 133 elements"
        },
        {
          "id": "rendering.fit.line-replicates-trend-linear",
          "method": "line golden SVG: line on timeCourse",
          "dataset": "timeCourse + {\"trendLines\":[{\"series\":\"NT\",\"kind\":\"linear\"}]}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 156 elements"
        },
        {
          "id": "rendering.ref.bar-refline-annotation",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"refLines\":[{\"axis\":\"y\",\"value\":500,\"color\":\"#cc0000\",\"style\":\"dashed\",\"label\":\"Threshold\"}],\"annotations\":[{\"x\":1,\"y\":700,\"text\":\"note\",\"arrow\"",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 82 elements"
        },
        {
          "id": "rendering.survival.median-lines",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"survivalMedian\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 112 elements"
        },
        {
          "id": "rendering.survival.ci-dotted",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"survivalCI\":\"dotted\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 113 elements"
        },
        {
          "id": "rendering.survival.ci-none-no-censors",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"survivalCI\":\"none\",\"survivalCensors\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 99 elements"
        },
        {
          "id": "rendering.survival.box-frame-grid",
          "method": "survival golden SVG: survival on survival",
          "dataset": "survival + {\"frame\":\"box\",\"showGrid\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 118 elements"
        },
        {
          "id": "rendering.marks.column-scatter-shapes-diamond",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"pointShape\":\"diamond\",\"pointSize\":7}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.marks.column-scatter-jitter-no-points",
          "method": "column-scatter golden SVG: column-scatter on threeColumns",
          "dataset": "threeColumns + {\"jitter\":0.4,\"showPoints\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.marks.bar-meanline",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"barStyle\":\"meanline\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.marks.bar-gradient-radius",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"useGradient\":true,\"cornerRadius\":6,\"markOutline\":\"darker\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 127 elements"
        },
        {
          "id": "rendering.marks.box-narrow",
          "method": "box golden SVG: box on threeColumns",
          "dataset": "threeColumns + {\"barWidth\":0.4}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 88 elements"
        },
        {
          "id": "rendering.marks.line-no-markers",
          "method": "line golden SVG: line on xyThree",
          "dataset": "xyThree + {\"showMarkers\":false,\"lineWidth\":3,\"lineStyle\":\"dashed\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 74 elements"
        },
        {
          "id": "rendering.marks.histogram-bins-3",
          "method": "histogram golden SVG: histogram on threeColumns",
          "dataset": "threeColumns + {\"histBins\":3}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 53 elements"
        },
        {
          "id": "rendering.marks.pie-no-legend-title",
          "method": "pie golden SVG: pie on partsofwhole",
          "dataset": "partsofwhole + {\"title\":\"Composition\",\"subtitle\":\"share of total\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 67 elements"
        },
        {
          "id": "rendering.text.bar-titles-labels",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"title\":\"Tumour volume\",\"xLabel\":\"Arm\",\"yLabel\":\"Volume (mm³)\",\"subtitle\":\"day 21\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 77 elements"
        },
        {
          "id": "rendering.text.bar-font-sizes",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"font\":18,\"titleSize\":24,\"axisTitleSize\":20,\"title\":\"Big text\",\"yLabel\":\"Y\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 77 elements"
        },
        {
          "id": "rendering.text.bar-regular-weight",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"axisTextBold\":false}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 79 elements"
        },
        {
          "id": "rendering.frame.bar-box",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"frame\":\"box\"}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 81 elements"
        },
        {
          "id": "rendering.frame.scatter-none-grid",
          "method": "scatter golden SVG: scatter on xyThree",
          "dataset": "xyThree + {\"frame\":\"none\",\"showGrid\":true}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 87 elements"
        },
        {
          "id": "rendering.size.bar-small-canvas",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"width\":320,\"height\":260}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 85 elements"
        },
        {
          "id": "rendering.size.line-wide-canvas",
          "method": "line golden SVG: line on xyThree",
          "dataset": "xyThree + {\"width\":900,\"height\":360}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 86 elements"
        },
        {
          "id": "rendering.axis.bar-fixed-range",
          "method": "bar golden SVG: bar on threeColumns",
          "dataset": "threeColumns + {\"yMinAuto\":false,\"yMin\":0,\"yMaxAuto\":false,\"yMax\":1200}",
          "reference": "approved golden SVG (test/golden/render)",
          "pass": true,
          "maxRelError": 0,
          "detail": "identical to golden after normalisation; 70 elements"
        },
        {
          "id": "rendering.gate.identical-input-passes",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict pass, score 0.0000, max move 0.000 px"
        },
        {
          "id": "rendering.gate.a-0-01-px-rounding-flip-is-tolerated",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict pass, score 0.0000, max move 0.010 px"
        },
        {
          "id": "rendering.gate.a-2-px-move-of-one-element-fails",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict fail, score 0.0127, max move 2.000 px"
        },
        {
          "id": "rendering.gate.a-changed-tick-label-fails",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict fail, score 0.0127, max move 0.000 px"
        },
        {
          "id": "rendering.gate.a-changed-colour-fails",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict fail, score 0.0127, max move 0.000 px"
        },
        {
          "id": "rendering.gate.a-missing-element-fails",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict fail, score 0.7468, max move 494.000 px"
        },
        {
          "id": "rendering.gate.an-extra-element-fails",
          "method": "diff gate self-check",
          "dataset": "base.bar golden, mutated",
          "reference": "expected verdict",
          "pass": true,
          "maxRelError": 0,
          "detail": "verdict fail, score 0.0250, max move 0.000 px"
        }
      ]
    },
    {
      "schemaVersion": 1,
      "suite": "reproducibility",
      "part": "determinism",
      "appVersion": "1.2.0-beta.87",
      "engineVersion": "1.20.0",
      "generatedAt": "2026-10-24T09:04:58.943Z",
      "cases": [
        {
          "id": "determinism.unpaired-welch.sleep",
          "method": "Welch's t test (sleep)",
          "dataset": "sleep",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 45 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.paired.sleep",
          "method": "Paired t test (sleep)",
          "dataset": "sleep",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 24 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.anova1-tukey.PlantGrowth",
          "method": "One-way ANOVA + Tukey (PlantGrowth)",
          "dataset": "PlantGrowth",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 81 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.anova2.ToothGrowth",
          "method": "Two-way ANOVA (ToothGrowth)",
          "dataset": "ToothGrowth",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 1.049555827893685e-15,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 54 numbers compared across 3 row permutations, worst relative difference 1.05e-15 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.linreg.women",
          "method": "Linear regression (women)",
          "dataset": "women",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 4.760010331817154e-16,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 48 numbers compared across 3 row permutations, worst relative difference 4.76e-16 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.mlregress.mtcars",
          "method": "Multiple regression (mtcars mpg ~ wt + hp + disp)",
          "dataset": "mtcars",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 75 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.logistic.mtcars",
          "method": "Simple logistic regression (mtcars am ~ wt)",
          "dataset": "mtcars",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 48 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.curvefit-4PL.DNase1",
          "method": "Nonlinear 4PL fit (DNase run 1)",
          "dataset": "DNase1",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 0.000001,
          "maxRelError": 2.7686470920571833e-8,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 78 numbers compared across 3 row permutations, worst relative difference 2.77e-8 (differences below 1e-14 absolute treated as round-off of zero). Levenberg-Marquardt sums residuals in row order, so a permuted fit follows a different floating-point path and stops at a slightly different point of the flat optimum (measured ~3e-8 relative, far below the displayed 4 significant digits and ~1e-5 of a standard error). Held to 1e-6 rather than 1e-12; the iteration count is excluded."
        },
        {
          "id": "determinism.logrank-km.lung",
          "method": "Kaplan-Meier + log-rank (survival::lung by sex)",
          "dataset": "lung",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 108 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        },
        {
          "id": "determinism.cox.lung",
          "method": "Cox proportional hazards (survival::lung by sex)",
          "dataset": "lung",
          "reference": "Same engine: repeat run, structuredClone of the input, and 3 seeded row permutations",
          "tolerance": 1e-12,
          "maxRelError": 0,
          "pass": true,
          "detail": "Repeat and deep-cloned runs bit-identical (JSON.stringify equal at full precision); 36 numbers compared across 3 row permutations, worst relative difference 0.00e+0 (differences below 1e-14 absolute treated as round-off of zero)."
        }
      ]
    }
  ],
  "catalogue": [
    {
      "id": "descriptive",
      "name": "Descriptive statistics",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "descriptive.precip",
        "descriptive.rivers",
        "descriptive.mtcars_mpg",
        "descriptive.PlantGrowth_weight",
        "descriptive.women_weight",
        "descriptive.faithful_eruptions",
        "descriptive.morley_speed",
        "descriptive.sleep_extra_n3",
        "nist.univ.PiDigits",
        "nist.univ.Lottery",
        "nist.univ.Lew",
        "nist.univ.Mavro",
        "nist.univ.Michelso",
        "nist.univ.NumAcc1",
        "nist.univ.NumAcc2",
        "nist.univ.NumAcc3",
        "nist.univ.NumAcc4"
      ]
    },
    {
      "id": "normality",
      "name": "Normality diagnostics (Shapiro-Wilk, KS-Lilliefors, Anderson-Darling)",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "normality.precip",
        "normality.rivers",
        "normality.mtcars_mpg",
        "normality.PlantGrowth_weight",
        "normality.women_weight",
        "normality.faithful_eruptions",
        "normality.morley_speed",
        "normality.sleep_extra_n3"
      ],
      "reason": "Shapiro-Wilk W and P match R shapiro.test; KS-Lilliefors D and Anderson-Darling A* match their definitions and the AD P value matches the published D'Agostino-Stephens formula (transcribed, not an R package). The KS-Lilliefors P value (Dallal-Wilkinson) has no independent reference here because nortest is not installed."
    },
    {
      "id": "grubbs",
      "name": "Outlier test (Grubbs)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "grubbs.mtcars-hp",
        "grubbs.precip"
      ]
    },
    {
      "id": "rout",
      "name": "Robust FDR outlier screening (MAD + BH)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "rout.mtcars-hp",
        "rout.precip"
      ]
    },
    {
      "id": "freqdist",
      "name": "Frequency distribution",
      "kind": "analysis",
      "status": "not covered",
      "cases": [],
      "reason": "Counting into bins is exact integer arithmetic; the bin edges follow Plotvera's own display rule, which has no external reference implementation to compare against."
    },
    {
      "id": "onesample",
      "name": "One-sample t test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "ttest.onesample.sleep-drug1",
        "ttest.onesample.women-height-60"
      ]
    },
    {
      "id": "wilcoxon1",
      "name": "One-sample Wilcoxon signed-rank",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "wilcoxon1.exact-anorexia-FT-postwt-85",
        "wilcoxon1.sleep-drug2-mu1"
      ]
    },
    {
      "id": "unpaired",
      "name": "Unpaired t test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "ttest.unpaired.student-sleep",
        "ttest.unpaired.welch-sleep",
        "ttest.unpaired.log10-PlantGrowth-ctrl-trt2",
        "ttest.unpaired.ln-PlantGrowth-ctrl-trt2",
        "ttest.unpaired.log2-PlantGrowth-ctrl-trt2"
      ]
    },
    {
      "id": "welch",
      "name": "Welch's t test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "ttest.welch.log10-PlantGrowth-ctrl-trt2",
        "ttest.welch.ln-PlantGrowth-ctrl-trt2",
        "ttest.welch.log2-PlantGrowth-ctrl-trt2",
        "ttest.unpaired.welch-sleep"
      ]
    },
    {
      "id": "paired",
      "name": "Paired t test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "ttest.paired.sleep",
        "ttest.paired.log10-PlantGrowth-ctrl-trt1"
      ]
    },
    {
      "id": "mannwhitney",
      "name": "Mann-Whitney test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "mannwhitney.airquality-ozone-may-aug",
        "mannwhitney.exact-anorexia-FT-CBT",
        "rank.mw.01",
        "rank.mw.02",
        "rank.mw.03",
        "rank.mw.04",
        "rank.mw.05",
        "rank.mw.06",
        "rank.mw.07",
        "rank.mw.08",
        "rank.mw.09",
        "rank.mw.10",
        "rank.mw.11",
        "rank.mw.12",
        "rank.mw.13",
        "rank.mw.14",
        "rank.mw.15",
        "rank.mw.16",
        "rank.mw.17",
        "rank.mw.18",
        "rank.mw.19",
        "rank.mw.20",
        "rank.mw.21",
        "rank.mw.22",
        "rank.mw.23",
        "rank.mw.24",
        "rank.mw.25",
        "rank.mw.26",
        "rank.mw.ties"
      ]
    },
    {
      "id": "wilcoxon",
      "name": "Wilcoxon matched-pairs signed-rank",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "wilcoxon.paired-sleep",
        "wilcoxon.paired-exact-anorexia-FT",
        "rank.wx.01",
        "rank.wx.02",
        "rank.wx.03",
        "rank.wx.04",
        "rank.wx.05",
        "rank.wx.06",
        "rank.wx.07",
        "rank.wx.08",
        "rank.wx.09",
        "rank.wx.10",
        "rank.wx.11",
        "rank.wx.12",
        "rank.wx.13",
        "rank.wx.14",
        "rank.wx.15",
        "rank.wx.16",
        "rank.wx.17",
        "rank.wx.18",
        "rank.wx.19",
        "rank.wx.20",
        "rank.wx.zeros.1",
        "rank.wx.zeros.2",
        "rank.wx.zeros.3"
      ]
    },
    {
      "id": "nestedt",
      "name": "Nested t test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "nestedt.Pastes_AB"
      ]
    },
    {
      "id": "anova1",
      "name": "One-way ANOVA",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "anova1.PlantGrowth",
        "anova1.tukey.PlantGrowth",
        "anova1.dunnett.PlantGrowth",
        "anova1.chickwts",
        "anova1.tukey.chickwts",
        "anova1.dunnett.chickwts",
        "anova1.InsectSprays",
        "anova1.tukey.InsectSprays",
        "anova1.dunnett.InsectSprays",
        "anova1.log10-PlantGrowth",
        "nist.anova.SiRstv",
        "nist.anova.SmLs01",
        "nist.anova.SmLs02",
        "nist.anova.SmLs03",
        "nist.anova.SmLs04",
        "nist.anova.SmLs05",
        "nist.anova.SmLs06",
        "nist.anova.SmLs07",
        "nist.anova.SmLs08",
        "nist.anova.SmLs09",
        "nist.anova.AtmWtAg"
      ]
    },
    {
      "id": "rmanova1",
      "name": "One-way ANOVA, repeated measures",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "rmanova1.RoundingTimes",
        "rmanova1.log10-RoundingTimes"
      ]
    },
    {
      "id": "kruskal",
      "name": "Kruskal-Wallis test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "kruskal.PlantGrowth",
        "kruskal.chickwts",
        "kruskal.InsectSprays"
      ]
    },
    {
      "id": "friedman",
      "name": "Friedman test",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "friedman.RoundingTimes"
      ]
    },
    {
      "id": "anova2",
      "name": "Two-way ANOVA (Type III)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "anova2.ToothGrowth_grouped",
        "anova2.warpbreaks_grouped",
        "anova2.warpbreaks_unbalanced_grouped"
      ]
    },
    {
      "id": "anova2rm",
      "name": "Two-way ANOVA, repeated measures",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "anova2rm.CO2-colWithin"
      ],
      "reason": "The columns-repeated (split-plot) design is referenced against R aov with Error() and car::Anova (CO2 data). The rows-repeated and both-factors-repeated designs have no R reference case yet."
    },
    {
      "id": "nestedanova",
      "name": "Nested one-way ANOVA",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "nestedanova.Pastes_AtoE"
      ]
    },
    {
      "id": "multittest",
      "name": "Multiple t tests (one per row)",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "multittest.CO2-nonchilled"
      ],
      "reason": "Unpaired Welch t per row with Benjamini-Hochberg and Holm adjustment is referenced; the paired and nonparametric row tests have no reference case yet."
    },
    {
      "id": "tcmixed",
      "name": "Mixed-effects model (arm x time)",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "tcmixed.ChickWeight"
      ],
      "reason": "Type III F tests, Satterthwaite df and variance components match lme4 + lmerTest; the per-timepoint Šídák group comparisons (emmeans) and the log test scale have no reference case in this suite."
    },
    {
      "id": "tcauc",
      "name": "Area under curve per mouse, compare arms",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "tcauc.ChickWeight"
      ],
      "reason": "Per-subject trapezoid AUC and the one-way ANOVA comparison are referenced; the Dunnett and Kruskal-Wallis comparison options reuse engines validated under anova1 and kruskal but are not separately referenced for this analysis."
    },
    {
      "id": "aucwiz",
      "name": "Compare products by area under the curve (AUC wizard)",
      "kind": "analysis",
      "status": "not covered",
      "cases": [],
      "reason": "The per-subject trapezoid areas and the ANOVA/Welch/Kruskal tests it reports use engines validated elsewhere in this suite, but the wizard's baseline, window, missing-value and experiment-blocking options have no R reference case yet."
    },
    {
      "id": "pearson",
      "name": "Pearson correlation",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "pearson.mtcars-wt-mpg",
        "pearson.mtcars-hp-qsec",
        "pearson.mtcars-disp-drat"
      ]
    },
    {
      "id": "spearman",
      "name": "Spearman correlation",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "spearman.mtcars-wt-mpg",
        "spearman.mtcars-hp-qsec",
        "spearman.mtcars-disp-drat",
        "rank.sp.01",
        "rank.sp.02",
        "rank.sp.03",
        "rank.sp.04",
        "rank.sp.05",
        "rank.sp.06",
        "rank.sp.07",
        "rank.sp.08",
        "rank.sp.09",
        "rank.sp.10",
        "rank.sp.11",
        "rank.sp.12",
        "rank.sp.13",
        "rank.sp.14",
        "rank.sp.15",
        "rank.sp.16",
        "rank.sp.17",
        "rank.sp.18",
        "rank.sp.19",
        "rank.sp.20",
        "rank.sp.21",
        "rank.sp.22",
        "rank.sp.23",
        "rank.sp.24",
        "rank.sp.25",
        "rank.sp.26",
        "rank.sp.ties"
      ]
    },
    {
      "id": "corrmatrix",
      "name": "Correlation matrix",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "corrmatrix.mtcars"
      ]
    },
    {
      "id": "linreg",
      "name": "Linear regression",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "linreg.women",
        "linreg.anscombe1",
        "linreg.anscombe2",
        "linreg.anscombe3",
        "linreg.anscombe4",
        "nist.lls.Norris"
      ]
    },
    {
      "id": "curvefit",
      "name": "Nonlinear curve fit (20 built-in models)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "curvefit.dose4pl-DNase1",
        "curvefit.dose3pl-DNase1",
        "curvefit.dose5pl-DNase1",
        "curvefit.boltzmann-DNase1",
        "curvefit.loglogistic-ryegrass",
        "curvefit.loglogistic5-ryegrass",
        "curvefit.mm-Puromycin",
        "curvefit.hill-Puromycin",
        "curvefit.loglogistic3-Puromycin",
        "curvefit.logarithmic-Puromycin-untreated",
        "curvefit.expdecay-Indometh1",
        "curvefit.twophasedecay-Indometh",
        "curvefit.expgrow-uspop",
        "curvefit.onephaseassoc-Loblolly",
        "curvefit.expplateau-Loblolly",
        "curvefit.poly2-cars",
        "curvefit.poly3-cars",
        "curvefit.power-Puromycin",
        "curvefit.sine-nottem",
        "curvefit.gaussian-Eckerle4",
        "nist.nls.DanWood.builtin-power",
        "nist.nls.Misra1d.builtin-mm",
        "nist.nls.Eckerle4.builtin-gaussian",
        "nist.lls.Pontius"
      ]
    },
    {
      "id": "customfit",
      "name": "Fit your own equation",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "customfit.Indometh1-A-exp-kX-C",
        "nist.nls.Misra1a.start1",
        "nist.nls.Misra1a.start2",
        "nist.nls.Misra1a.auto",
        "nist.nls.Chwirut2.start1",
        "nist.nls.Chwirut2.start2",
        "nist.nls.Chwirut2.auto",
        "nist.nls.Chwirut1.start1",
        "nist.nls.Chwirut1.start2",
        "nist.nls.Chwirut1.auto",
        "nist.nls.Lanczos3.start1",
        "nist.nls.Lanczos3.start2",
        "nist.nls.Lanczos3.auto",
        "nist.nls.Gauss1.start1",
        "nist.nls.Gauss1.start2",
        "nist.nls.Gauss1.auto",
        "nist.nls.Gauss2.start1",
        "nist.nls.Gauss2.start2",
        "nist.nls.Gauss2.auto",
        "nist.nls.DanWood.start1",
        "nist.nls.DanWood.start2",
        "nist.nls.DanWood.auto",
        "nist.nls.Misra1b.start1",
        "nist.nls.Misra1b.start2",
        "nist.nls.Misra1b.auto",
        "nist.nls.Kirby2.start1",
        "nist.nls.Kirby2.start2",
        "nist.nls.Kirby2.auto",
        "nist.nls.Hahn1.start1",
        "nist.nls.Hahn1.start2",
        "nist.nls.Hahn1.auto",
        "nist.nls.Nelson",
        "nist.nls.MGH17.start1",
        "nist.nls.MGH17.start2",
        "nist.nls.MGH17.auto",
        "nist.nls.Lanczos1.start1",
        "nist.nls.Lanczos1.start2",
        "nist.nls.Lanczos1.auto",
        "nist.nls.Lanczos2.start1",
        "nist.nls.Lanczos2.start2",
        "nist.nls.Lanczos2.auto",
        "nist.nls.Gauss3.start1",
        "nist.nls.Gauss3.start2",
        "nist.nls.Gauss3.auto",
        "nist.nls.Misra1c.start1",
        "nist.nls.Misra1c.start2",
        "nist.nls.Misra1c.auto",
        "nist.nls.Misra1d.start1",
        "nist.nls.Misra1d.start2",
        "nist.nls.Misra1d.auto",
        "nist.nls.Roszman1",
        "nist.nls.ENSO.start1",
        "nist.nls.ENSO.start2",
        "nist.nls.ENSO.auto",
        "nist.nls.MGH09.start1",
        "nist.nls.MGH09.start2",
        "nist.nls.MGH09.auto",
        "nist.nls.Thurber.start1",
        "nist.nls.Thurber.start2",
        "nist.nls.Thurber.auto",
        "nist.nls.BoxBOD.start1",
        "nist.nls.BoxBOD.start2",
        "nist.nls.BoxBOD.auto",
        "nist.nls.Rat42.start1",
        "nist.nls.Rat42.start2",
        "nist.nls.Rat42.auto",
        "nist.nls.MGH10.start1",
        "nist.nls.MGH10.start2",
        "nist.nls.MGH10.auto",
        "nist.nls.Eckerle4.start1",
        "nist.nls.Eckerle4.start2",
        "nist.nls.Eckerle4.auto",
        "nist.nls.Rat43.start1",
        "nist.nls.Rat43.start2",
        "nist.nls.Rat43.auto",
        "nist.nls.Bennett5.start1",
        "nist.nls.Bennett5.start2",
        "nist.nls.Bennett5.auto",
        "nist.nls.DanWood.builtin-power",
        "nist.nls.Misra1d.builtin-mm",
        "nist.nls.Eckerle4.builtin-gaussian",
        "nist.lls.NoInt1",
        "nist.lls.NoInt2",
        "nist.lls.Wampler1",
        "nist.lls.Wampler2",
        "nist.lls.Wampler3",
        "nist.lls.Wampler4",
        "nist.lls.Wampler5",
        "nist.lls.Filip"
      ],
      "reason": "Matches R and NIST StRD from NIST starting values for most problems, but not all: see the failed NIST rows (higher-difficulty problems from far starts, exact-fit data stopped at the 1e-12 error tolerance, problems refused by the custom-fit work budget, Nelson and Roszman1 not expressible)."
    },
    {
      "id": "stdcurve",
      "name": "Standard curve: read unknowns (ELISA)",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "stdcurve.DNase-4PL"
      ],
      "reason": "Unweighted 4PL on linear concentration, with interpolated concentrations and inversion intervals, matches R nls + investr::invest. Weighting (1/Y, 1/Y²), blank subtraction, dilution factors and the line/polynomial/5PL/log-X variants have no reference case yet."
    },
    {
      "id": "logistic",
      "name": "Simple logistic regression",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "logistic.mtcars-am-wt",
        "logistic.mtcars-am-qsec"
      ]
    },
    {
      "id": "mlogistic",
      "name": "Multiple logistic regression",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "mlogistic.mtcars-am-wt-hp",
        "mlogistic.mtcars-am-mpg-drat-carb"
      ]
    },
    {
      "id": "mlregress",
      "name": "Multiple regression",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "mlregress.mtcars-mpg",
        "mlregress.mtcars-qsec",
        "nist.lls.Longley"
      ]
    },
    {
      "id": "auc",
      "name": "Area under curve (trapezoid)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "xy.Indometh1",
        "xy.nottem-anomaly"
      ]
    },
    {
      "id": "smooth",
      "name": "Smooth curve (moving average, Savitzky-Golay)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "xy.Indometh1",
        "xy.nottem-anomaly"
      ]
    },
    {
      "id": "derivative",
      "name": "Differentiate (dY/dX)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "xy.Indometh1"
      ]
    },
    {
      "id": "integral",
      "name": "Integrate (cumulative area)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "xy.Indometh1"
      ]
    },
    {
      "id": "logrank",
      "name": "Survival: Kaplan-Meier and log-rank",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "km.aml",
        "km.ovarian",
        "km.lung-sex",
        "km.veteran-trt",
        "km.lung-ecog3",
        "logrank.aml",
        "logrank.ovarian",
        "logrank.lung-sex",
        "logrank.veteran-trt",
        "logrank.lung-ecog3",
        "rank.km.01",
        "rank.km.02",
        "rank.km.03",
        "rank.km.04",
        "rank.km.05",
        "rank.km.06",
        "rank.km.07",
        "rank.km.08",
        "rank.km.09",
        "rank.km.10",
        "rank.km.11",
        "rank.km.12"
      ]
    },
    {
      "id": "cox",
      "name": "Cox proportional hazards",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "cox.aml",
        "cox.ovarian",
        "cox.lung-sex",
        "cox.veteran-trt"
      ]
    },
    {
      "id": "chisq",
      "name": "Chi-square / Fisher exact",
      "kind": "analysis",
      "status": "partial",
      "cases": [
        "chisq.fisher-TeaTasting",
        "chisq.fisher-Convictions",
        "chisq.HairEyeColor",
        "chisq.HairEyeColor-2x3"
      ],
      "reason": "Chi-square (with and without Yates), Fisher exact P and the sample odds ratio are referenced; the Baptista-Pike odds-ratio interval has no independent reference here (R exact2x2 not installed)."
    },
    {
      "id": "diag2x2",
      "name": "Sensitivity / specificity (2x2)",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "diag2x2.mtcars-wt-auto"
      ]
    },
    {
      "id": "roc",
      "name": "ROC curve",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "roc.mtcars-wt-automatic",
        "roc.infert-spontaneous"
      ]
    },
    {
      "id": "blandaltman",
      "name": "Bland-Altman agreement",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "blandaltman.sleep"
      ]
    },
    {
      "id": "pca",
      "name": "Principal component analysis",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "pca.USArrests"
      ]
    },
    {
      "id": "kmeans",
      "name": "k-means clustering",
      "kind": "analysis",
      "status": "covered",
      "cases": [
        "kmeans.iris-k3"
      ]
    },
    {
      "id": "model:dose4pl",
      "name": "Dose-response, 4PL (log dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.dose4pl-DNase1"
      ]
    },
    {
      "id": "model:dose3pl",
      "name": "Dose-response, 3PL (slope 1, log dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.dose3pl-DNase1"
      ]
    },
    {
      "id": "model:dose5pl",
      "name": "5PL asymmetric (log dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.dose5pl-DNase1"
      ]
    },
    {
      "id": "model:loglogistic",
      "name": "Log-logistic 4-parameter (linear dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.loglogistic-ryegrass"
      ]
    },
    {
      "id": "model:loglogistic3",
      "name": "Log-logistic 3-parameter (linear dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.loglogistic3-Puromycin"
      ]
    },
    {
      "id": "model:loglogistic5",
      "name": "5PL asymmetric (linear dose)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.loglogistic5-ryegrass"
      ]
    },
    {
      "id": "model:hill",
      "name": "Hill equation",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.hill-Puromycin"
      ]
    },
    {
      "id": "model:mm",
      "name": "Michaelis-Menten",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.mm-Puromycin",
        "nist.nls.Misra1d.builtin-mm"
      ]
    },
    {
      "id": "model:expdecay",
      "name": "Exponential decay (one phase)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.expdecay-Indometh1"
      ]
    },
    {
      "id": "model:twophasedecay",
      "name": "Two-phase exponential decay",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.twophasedecay-Indometh"
      ]
    },
    {
      "id": "model:expgrow",
      "name": "Exponential growth",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.expgrow-uspop"
      ]
    },
    {
      "id": "model:onephaseassoc",
      "name": "One-phase association",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.onephaseassoc-Loblolly"
      ]
    },
    {
      "id": "model:expplateau",
      "name": "Exponential plateau",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.expplateau-Loblolly"
      ]
    },
    {
      "id": "model:gaussian",
      "name": "Gaussian peak",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.gaussian-Eckerle4",
        "nist.nls.Eckerle4.builtin-gaussian"
      ]
    },
    {
      "id": "model:boltzmann",
      "name": "Boltzmann sigmoid",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.boltzmann-DNase1"
      ]
    },
    {
      "id": "model:poly2",
      "name": "Polynomial, quadratic",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.poly2-cars",
        "nist.lls.Pontius"
      ]
    },
    {
      "id": "model:poly3",
      "name": "Polynomial, cubic",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.poly3-cars"
      ]
    },
    {
      "id": "model:power",
      "name": "Power law",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.power-Puromycin",
        "nist.nls.DanWood.builtin-power"
      ]
    },
    {
      "id": "model:sine",
      "name": "Sine wave",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.sine-nottem"
      ]
    },
    {
      "id": "model:logarithmic",
      "name": "Logarithmic (semi-log line)",
      "kind": "model",
      "status": "covered",
      "cases": [
        "curvefit.logarithmic-Puromycin-untreated"
      ]
    },
    {
      "id": "model:linear",
      "name": "Straight line",
      "kind": "model",
      "status": "covered",
      "cases": [
        "linreg.women",
        "linreg.anscombe1",
        "linreg.anscombe2",
        "linreg.anscombe3",
        "linreg.anscombe4",
        "nist.lls.Norris"
      ]
    },
    {
      "id": "option:check-data",
      "name": "Check data: Grubbs on replicate sets and subjects, replicate CV, robust screen (MAD + BH), and tests with excluded values left out",
      "kind": "option",
      "status": "covered",
      "cases": [
        "qc.grubbs.elisa-bad-well",
        "qc.grubbs.triplicate-extreme",
        "qc.grubbs.triplicate-clean",
        "qc.grubbs.quadruplicate",
        "qc.grubbs.mice-n6",
        "qc.grubbs.morley-expt1",
        "qc.cv.duplicates",
        "qc.cv.triplicate",
        "qc.cv.elisa-clean",
        "qc.robust.mice-n6",
        "qc.ttest.unpaired-excluded"
      ]
    },
    {
      "id": "option:posthoc-holmsidak",
      "name": "One-way ANOVA: Holm-Šídák multiple comparisons",
      "kind": "option",
      "status": "covered",
      "cases": [
        "anova1.PlantGrowth",
        "anova1.chickwts",
        "anova1.InsectSprays"
      ]
    },
    {
      "id": "option:posthoc-tukey",
      "name": "One-way ANOVA: Tukey HSD / Tukey-Kramer",
      "kind": "option",
      "status": "covered",
      "cases": [
        "anova1.tukey.PlantGrowth",
        "anova1.tukey.chickwts",
        "anova1.tukey.InsectSprays"
      ]
    },
    {
      "id": "option:posthoc-dunnett",
      "name": "One-way ANOVA: Dunnett's test vs control",
      "kind": "option",
      "status": "covered",
      "cases": [
        "anova1.dunnett.PlantGrowth",
        "anova1.dunnett.chickwts",
        "anova1.dunnett.InsectSprays"
      ]
    },
    {
      "id": "option:posthoc-dunn",
      "name": "Dunn's test (Kruskal-Wallis and Friedman), Bonferroni",
      "kind": "option",
      "status": "covered",
      "cases": [
        "kruskal.PlantGrowth",
        "kruskal.chickwts",
        "kruskal.InsectSprays",
        "friedman.RoundingTimes"
      ]
    },
    {
      "id": "option:test-scale-log",
      "name": "Test on log10 / ln / log2 scale",
      "kind": "option",
      "status": "partial",
      "cases": [
        "ttest.unpaired.log10-PlantGrowth-ctrl-trt2",
        "ttest.unpaired.ln-PlantGrowth-ctrl-trt2",
        "ttest.unpaired.log2-PlantGrowth-ctrl-trt2",
        "ttest.welch.log10-PlantGrowth-ctrl-trt2",
        "ttest.welch.log2-PlantGrowth-ctrl-trt2",
        "ttest.paired.log10-PlantGrowth-ctrl-trt1",
        "anova1.log10-PlantGrowth",
        "rmanova1.log10-RoundingTimes"
      ],
      "reason": "Referenced for the unpaired, Welch and paired t tests, one-way ANOVA and repeated-measures one-way ANOVA; the same option on the mixed model has no reference case."
    },
    {
      "id": "option:sphericity",
      "name": "Greenhouse-Geisser and Huynh-Feldt corrections",
      "kind": "option",
      "status": "covered",
      "cases": [
        "rmanova1.RoundingTimes",
        "rmanova1.log10-RoundingTimes",
        "anova2rm.CO2-colWithin"
      ]
    },
    {
      "id": "option:km-greenwood",
      "name": "Kaplan-Meier pointwise 95% CI (Greenwood, log-log)",
      "kind": "option",
      "status": "covered",
      "cases": [
        "km.aml",
        "km.ovarian",
        "km.lung-sex",
        "km.veteran-trt",
        "km.lung-ecog3"
      ]
    },
    {
      "id": "option:median-survival",
      "name": "Median survival and Brookmeyer-Crowley 95% CI",
      "kind": "option",
      "status": "covered",
      "cases": [
        "logrank.aml",
        "logrank.ovarian",
        "logrank.lung-sex",
        "logrank.veteran-trt",
        "logrank.lung-ecog3"
      ]
    },
    {
      "id": "option:gehan",
      "name": "Gehan-Breslow-Wilcoxon test",
      "kind": "option",
      "status": "covered",
      "cases": [
        "logrank.aml",
        "logrank.ovarian",
        "logrank.lung-sex",
        "logrank.veteran-trt",
        "logrank.lung-ecog3"
      ]
    },
    {
      "id": "option:hr-logrank",
      "name": "Hazard ratio, log-rank (O/E) method",
      "kind": "option",
      "status": "covered",
      "cases": [
        "logrank.aml",
        "logrank.ovarian",
        "logrank.lung-sex",
        "logrank.veteran-trt",
        "logrank.lung-ecog3"
      ]
    },
    {
      "id": "option:hr-mh",
      "name": "Hazard ratio, Mantel-Haenszel method",
      "kind": "option",
      "status": "covered",
      "cases": [
        "logrank.aml",
        "logrank.ovarian",
        "logrank.lung-sex",
        "logrank.veteran-trt",
        "logrank.lung-ecog3"
      ]
    },
    {
      "id": "option:fisher",
      "name": "Fisher's exact test (2x2)",
      "kind": "option",
      "status": "covered",
      "cases": [
        "chisq.fisher-TeaTasting",
        "chisq.fisher-Convictions"
      ]
    },
    {
      "id": "option:wilson",
      "name": "Wilson score intervals (diagnostic 2x2)",
      "kind": "option",
      "status": "covered",
      "cases": [
        "diag2x2.mtcars-wt-auto"
      ]
    },
    {
      "id": "option:hanley-mcneil",
      "name": "ROC AUC Hanley-McNeil interval and Youden cut-off",
      "kind": "option",
      "status": "covered",
      "cases": [
        "roc.mtcars-wt-automatic",
        "roc.infert-spontaneous"
      ]
    },
    {
      "id": "option:spearman-ci",
      "name": "Spearman CI (Fisher z, Bonett-Wright SE)",
      "kind": "option",
      "status": "covered",
      "cases": [
        "spearman.mtcars-wt-mpg",
        "spearman.mtcars-hp-qsec",
        "spearman.mtcars-disp-drat"
      ]
    },
    {
      "id": "option:nonlinear-log-ci",
      "name": "Nonlinear fit: log-scale CI for positive-constrained parameters",
      "kind": "option",
      "status": "covered",
      "cases": [
        "curvefit.dose4pl-DNase1",
        "curvefit.dose3pl-DNase1",
        "curvefit.dose5pl-DNase1",
        "curvefit.boltzmann-DNase1",
        "curvefit.loglogistic-ryegrass",
        "curvefit.loglogistic5-ryegrass",
        "curvefit.mm-Puromycin",
        "curvefit.hill-Puromycin",
        "curvefit.loglogistic3-Puromycin",
        "curvefit.logarithmic-Puromycin-untreated",
        "curvefit.expdecay-Indometh1",
        "curvefit.twophasedecay-Indometh",
        "curvefit.expgrow-uspop",
        "curvefit.onephaseassoc-Loblolly",
        "curvefit.expplateau-Loblolly",
        "curvefit.poly2-cars",
        "curvefit.poly3-cars",
        "curvefit.power-Puromycin",
        "curvefit.sine-nottem",
        "curvefit.gaussian-Eckerle4"
      ]
    },
    {
      "id": "option:replicates-mean",
      "name": "XY fits: replicate Y values fitted as row means",
      "kind": "option",
      "status": "not covered",
      "cases": [],
      "reason": "Only one Y value per X is used in the reference cases; the \"fit only the mean Y of each row\" option is checked structurally in the golden tests, not against R."
    },
    {
      "id": "option:distributions",
      "name": "Distribution functions behind every P value and critical value (t, F, chi-square, normal, studentized range)",
      "kind": "option",
      "status": "covered",
      "cases": [
        "distribution.pTwoT",
        "distribution.tInv",
        "distribution.pF",
        "distribution.pChi",
        "distribution.normCDF",
        "distribution.normInv",
        "distribution.ptukeyUpper"
      ]
    },
    {
      "id": "option:reproducibility",
      "name": "Identical recomputation at full precision and row-order invariance",
      "kind": "option",
      "status": "covered",
      "cases": [
        "determinism.unpaired-welch.sleep",
        "determinism.paired.sleep",
        "determinism.anova1-tukey.PlantGrowth",
        "determinism.anova2.ToothGrowth",
        "determinism.linreg.women",
        "determinism.mlregress.mtcars",
        "determinism.logistic.mtcars",
        "determinism.curvefit-4PL.DNase1",
        "determinism.logrank-km.lung",
        "determinism.cox.lung"
      ]
    }
  ]
}