{
 "release": "0.6.0",
 "generated": "2026-10-16",
 "theme": "mixed and discrete data",
 "build": "pre-release Andrey 0.6.0 builds, 13 to 16 October 2026",
 "builds": [
  {
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "solutions": [
    "andrey.ges.cond_gauss",
    "andrey.ges.degen_gauss",
    "andrey.pc.cond_gauss",
    "andrey.pc.degen_gauss",
    "bnlearn.hc.cond_gauss",
    "bnlearn.pc-stable.cond_gauss",
    "tetrad.fges.cond_gauss",
    "tetrad.fges.degen_gauss",
    "tetrad.pc.cond_gauss",
    "tetrad.pc.degen_gauss"
   ]
  },
  {
   "build": "pre-release Andrey 0.6.0 build, 14 October 2026",
   "solutions": [
    "andrey.hc.cond_gauss",
    "andrey.hc.degen_gauss"
   ]
  },
  {
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "solutions": [
    "andrey.ges.bdeu",
    "andrey.hc.BDeu",
    "andrey.hc.BIC_categorical",
    "andrey.pc.chisq",
    "andrey.pc.gsq",
    "bnlearn.hc.BDeu",
    "bnlearn.hc.BIC_categorical",
    "bnlearn.pc-stable.chisq",
    "bnlearn.pc-stable.gsq",
    "causal-learn.ges.bdeu",
    "causal-learn.pc.chisq",
    "causal-learn.pc.gsq",
    "pgmpy.hc.BDeu",
    "pgmpy.hc.BIC_categorical"
   ]
  }
 ],
 "andrey_source": "PC and GES on mixed data run the first build; hill climbing on mixed data was rerun on a later build, on the same datasets, and the earlier hill-climbing lane's records are not used; every method on discrete data runs the discrete campaign's build",
 "regime": {
  "PC on mixed data, degenerate Gaussian test": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "PC on mixed data, conditional Gaussian test": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "GES on mixed data, degenerate Gaussian score": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "GES on mixed data, conditional Gaussian score": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "Hill climbing on mixed data, degenerate Gaussian score": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "Hill climbing on mixed data, conditional Gaussian score": {
   "name": "mixed_er",
   "description": "a conditional linear Gaussian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_mixed): the first half of the variables in causal order are categorical, each with a count of categories drawn uniformly between the setting's two bounds and its table rows drawn from a symmetric Dirichlet with concentration 1; each continuous variable is the sum of its continuous parents times weights with |w| uniform on [0.5, 2] and a random sign, a shift per category of each categorical parent (evenly spaced from -m to m, m uniform on [0.5, 2]), and standard Gaussian noise, not standardized. A categorical variable has only categorical parents."
  },
  "PC on discrete data, chi-square test": {
   "name": "discrete_er",
   "description": "a discrete Bayesian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_discrete): every variable has 2 or 3 categories, drawn uniformly, and each row of its conditional probability table is drawn from a symmetric Dirichlet with concentration 1; the samples are category codes drawn forward in causal order."
  },
  "PC on discrete data, G-square test": {
   "name": "discrete_er",
   "description": "a discrete Bayesian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_discrete): every variable has 2 or 3 categories, drawn uniformly, and each row of its conditional probability table is drawn from a symmetric Dirichlet with concentration 1; the samples are category codes drawn forward in causal order."
  },
  "GES on discrete data, BDeu score": {
   "name": "discrete_er",
   "description": "a discrete Bayesian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_discrete): every variable has 2 or 3 categories, drawn uniformly, and each row of its conditional probability table is drawn from a symmetric Dirichlet with concentration 1; the samples are category codes drawn forward in causal order."
  },
  "Hill climbing on discrete data, BDeu score": {
   "name": "discrete_er",
   "description": "a discrete Bayesian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_discrete): every variable has 2 or 3 categories, drawn uniformly, and each row of its conditional probability table is drawn from a symmetric Dirichlet with concentration 1; the samples are category codes drawn forward in causal order."
  },
  "Hill climbing on discrete data, BIC score": {
   "name": "discrete_er",
   "description": "a discrete Bayesian network on an Erdos-Renyi DAG with mean degree 2 (andrey.data.sample_discrete): every variable has 2 or 3 categories, drawn uniformly, and each row of its conditional probability table is drawn from a symmetric Dirichlet with concentration 1; the samples are category codes drawn forward in causal order."
  }
 },
 "seeds_per_setting": 5,
 "speed_floor_s": 0.1,
 "error_metric": "SHD between the estimate's CPDAG and the true DAG's CPDAG: one per variable pair whose edge differs (missing, extra, or oriented differently); a DAG estimate is compared through its CPDAG. The empty graph's SHD is the number of true edges.",
 "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
 "hardware": {
  "PC on mixed data, degenerate Gaussian test": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "PC on mixed data, conditional Gaussian test": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "GES on mixed data, degenerate Gaussian score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "GES on mixed data, conditional Gaussian score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "Hill climbing on mixed data, degenerate Gaussian score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "Hill climbing on mixed data, conditional Gaussian score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "PC on discrete data, chi-square test": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "PC on discrete data, G-square test": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "GES on discrete data, BDeu score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "Hill climbing on discrete data, BDeu score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  },
  "Hill climbing on discrete data, BIC score": {
   "cpu": "Intel Core i7-7820X",
   "cores_per_fit": 4
  }
 },
 "threads": "every fit runs with 4 BLAS and OpenMP threads; Tetrad's JVM sees 4 processors; bnlearn's searches run in one R thread, and pgmpy's in Python",
 "packages": {
  "tetrad": "causal-cmd 1.12.0 (tetrad-lib 7.6.3), jar SHA-1 b0e3c3fb3b0277e0a44c54dbb82f0023c4fd9e54",
  "java": "OpenJDK 21.0.6",
  "bnlearn": "5.2.1",
  "R": "4.6.1",
  "rpy2": "3.6.9",
  "causal-learn": "0.1.4.8",
  "pgmpy": "1.1.2",
  "python": "3.13.16",
  "numpy": "2.5.4",
  "scipy": "1.18.1",
  "pandas": "3.0.6"
 },
 "complete": false,
 "pending_fits": 0,
 "incomplete": [
  {
   "method": "PC on mixed data, degenerate Gaussian test",
   "comparator": "Tetrad",
   "d": 40,
   "categories": "3-5"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 10,
   "categories": "2-3"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 10,
   "categories": "3-5"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 20,
   "categories": "2-3"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 20,
   "categories": "3-5"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 40,
   "categories": "2-3"
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "comparator": "Tetrad",
   "d": 40,
   "categories": "3-5"
  }
 ],
 "methods": [
  {
   "method": "PC on mixed data, degenerate Gaussian test",
   "setting": "indep_test='degen_gauss', alpha=0.05",
   "solution": "andrey.pc.degen_gauss",
   "comparator": "Tetrad",
   "comparator_method": "PC",
   "comparator_setting": "--test dg-lr-test --alpha 0.05 --stableFAS --conflictRule 1 --depth -1",
   "comparator_solution": "tetrad.pc.degen_gauss",
   "regime": "mixed_er",
   "note": "Tetrad is the causal-cmd 1.12.0 jar (tetrad-lib 7.6.3), run with causal-cmd's own argument parser, parameters, and algorithm factory through a small driver that declares the categorical columns (causal-cmd's command line accepts --numCategories but never stores it, so it reads every column as continuous). Tetrad's time is its search call, timed inside the JVM; the whole process, with the JVM start and the CSV read, is recorded apart and not used. Tetrad 7.6.3's PC with the conditional Gaussian test stops with an error on some datasets (a likelihood it cannot evaluate); those fits count as failed and are not scored",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": false,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.04211352113634348,
     "comparator_s": 11.795946824000001,
     "ratio": 260.655150332677,
     "same_graph": 1,
     "between_shd": 9.0,
     "andrey_shd": 5.0,
     "comparator_shd": 8.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 2,
     "andrey_fewer_errors": 5,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.9523809523809523,
     "comparator_skeleton_f1": 0.8285714285714286,
     "andrey_arrowhead_f1": 0.6529411764705882,
     "comparator_arrowhead_f1": 0.5335968379446641,
     "complete": true,
     "different_graph": [
      {
       "dataset": "012069b786ac",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 8.0,
       "andrey_shd": 3.0,
       "comparator_shd": 9.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1479c3a2cf78",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 10.0,
       "andrey_shd": 5.0,
       "comparator_shd": 9.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "191d413ad516",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 13.0,
       "andrey_shd": 8.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1d1b566f1d9a",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 3.0,
       "comparator_shd": 11.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "2d7478e98a7b",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 6.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "45d459068d3d",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 10.0,
       "andrey_shd": 6.0,
       "comparator_shd": 5.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "64c4094bba94",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "7d5b21666afb",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 15.0,
       "andrey_shd": 0.0,
       "comparator_shd": 15.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "91cf75d8f58b",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.03848325274884701,
       "comparator_s": 10.726929498,
       "ratio": 249.57255476565652,
       "same_graph": 1,
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 1,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.8571428571428572,
       "andrey_arrowhead_f1": 0.6,
       "comparator_arrowhead_f1": 0.5454545454545454,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.047417471185326576,
       "comparator_s": 17.26503071,
       "ratio": 360.0966195713917,
       "same_graph": 0,
       "between_shd": 10.0,
       "andrey_shd": 5.0,
       "comparator_shd": 9.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 1,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 1.0,
       "comparator_skeleton_f1": 0.8,
       "andrey_arrowhead_f1": 0.7058823529411765,
       "comparator_arrowhead_f1": 0.5217391304347827,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.10812010057270527,
     "comparator_s": 98.710347415,
     "ratio": 735.7984332934213,
     "same_graph": 0,
     "between_shd": 26.0,
     "andrey_shd": 7.0,
     "comparator_shd": 26.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 6,
     "andrey_fewer_errors": 9,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9523809523809523,
     "comparator_skeleton_f1": 0.7453703703703703,
     "andrey_arrowhead_f1": 0.73719165085389,
     "comparator_arrowhead_f1": 0.4309462915601022,
     "complete": true,
     "different_graph": [
      {
       "dataset": "08ba1ade4006",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 26.0,
       "andrey_shd": 8.0,
       "comparator_shd": 25.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "0eb6eead034b",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 32.0,
       "andrey_shd": 16.0,
       "comparator_shd": 27.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "29a23f796624",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 9.0,
       "comparator_shd": 9.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "3c31ea876c19",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 14.0,
       "andrey_shd": 0.0,
       "comparator_shd": 14.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "4690cc37f3a6",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 28.0,
       "andrey_shd": 2.0,
       "comparator_shd": 29.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "47b3644357c5",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 6.0,
       "comparator_shd": 11.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "86bbe07a5161",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 26.0,
       "andrey_shd": 5.0,
       "comparator_shd": 28.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 34.0,
       "andrey_shd": 5.0,
       "comparator_shd": 34.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "e31d401712a6",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 30.0,
       "andrey_shd": 8.0,
       "comparator_shd": 30.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "f631acd89b5a",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 9.0,
       "comparator_shd": 14.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.10110587999224663,
       "comparator_s": 39.682737969,
       "ratio": 388.23213101535225,
       "same_graph": 0,
       "between_shd": 14.0,
       "andrey_shd": 6.0,
       "comparator_shd": 14.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 1,
       "andrey_fewer_errors": 4,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.975609756097561,
       "comparator_skeleton_f1": 0.851063829787234,
       "andrey_arrowhead_f1": 0.7647058823529413,
       "comparator_arrowhead_f1": 0.611111111111111,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.11093859188258648,
       "comparator_s": 123.468079401,
       "ratio": 1112.940747721715,
       "same_graph": 0,
       "between_shd": 30.0,
       "andrey_shd": 8.0,
       "comparator_shd": 29.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 5,
       "andrey_fewer_errors": 5,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.7272727272727273,
       "andrey_arrowhead_f1": 0.7096774193548387,
       "comparator_arrowhead_f1": 0.17777777777777778,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 5,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.3760243668220937,
     "comparator_s": 504.571389494,
     "ratio": 1158.424921769192,
     "ratio_lower_bound": 5406.598737451875,
     "ratio_is_lower_bound": true,
     "ratio_cap_s": 2400.0,
     "same_graph": 0,
     "between_shd": 63.0,
     "andrey_shd": 18.0,
     "comparator_shd": 62.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 5,
     "andrey_fewer_errors": 5,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.8764044943820225,
     "comparator_skeleton_f1": 0.6666666666666666,
     "andrey_arrowhead_f1": 0.6865671641791045,
     "comparator_arrowhead_f1": 0.325,
     "complete": false,
     "different_graph": [
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 69.0,
       "andrey_shd": 13.0,
       "comparator_shd": 68.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "81feeb3e2714",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 55.0,
       "andrey_shd": 21.0,
       "comparator_shd": 58.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 63.0,
       "andrey_shd": 4.0,
       "comparator_shd": 63.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 67.0,
       "andrey_shd": 18.0,
       "comparator_shd": 62.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 55.0,
       "andrey_shd": 21.0,
       "comparator_shd": 54.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.39022096060216427,
       "comparator_s": 504.571389494,
       "ratio": 1158.424921769192,
       "same_graph": 0,
       "between_shd": 63.0,
       "andrey_shd": 18.0,
       "comparator_shd": 62.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 5,
       "andrey_fewer_errors": 5,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.8764044943820225,
       "comparator_skeleton_f1": 0.6666666666666666,
       "andrey_arrowhead_f1": 0.6865671641791045,
       "comparator_arrowhead_f1": 0.325,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 0,
       "comparator_timeouts": 5,
       "comparator_failed": 0,
       "paired": 0,
       "andrey_s": 0.363344325684011,
       "comparator_s": null,
       "ratio": null,
       "ratio_lower_bound": 6605.304749102381,
       "ratio_is_lower_bound": true,
       "ratio_cap_s": 2400.0,
       "same_graph": 0,
       "between_shd": null,
       "andrey_shd": null,
       "comparator_shd": null,
       "empty_shd": null,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 0,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": null,
       "comparator_skeleton_f1": null,
       "andrey_arrowhead_f1": null,
       "comparator_arrowhead_f1": null,
       "complete": false
      }
     ]
    }
   ]
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "setting": "indep_test='cond_gauss', alpha=0.05",
   "solution": "andrey.pc.cond_gauss",
   "comparator": "Tetrad",
   "comparator_method": "PC",
   "comparator_setting": "--test cg-lr-test --alpha 0.05 --stableFAS --conflictRule 1 --depth -1",
   "comparator_solution": "tetrad.pc.cond_gauss",
   "regime": "mixed_er",
   "note": "Tetrad is the causal-cmd 1.12.0 jar (tetrad-lib 7.6.3), run with causal-cmd's own argument parser, parameters, and algorithm factory through a small driver that declares the categorical columns (causal-cmd's command line accepts --numCategories but never stores it, so it reads every column as continuous). Tetrad's time is its search call, timed inside the JVM; the whole process, with the JVM start and the CSV read, is recorded apart and not used. Tetrad 7.6.3's PC with the conditional Gaussian test stops with an error on some datasets (a likelihood it cannot evaluate); those fits count as failed and are not scored",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": false,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 8,
     "comparator_timeouts": 0,
     "comparator_failed": 2,
     "paired": 8,
     "andrey_s": 0.0426987805403769,
     "comparator_s": 0.49847039400000004,
     "ratio": 12.160028879346312,
     "same_graph": 1,
     "between_shd": 6.0,
     "andrey_shd": 5.0,
     "comparator_shd": 4.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 3,
     "andrey_skeleton_f1": 0.9261904761904762,
     "comparator_skeleton_f1": 0.9523809523809523,
     "andrey_arrowhead_f1": 0.6512605042016807,
     "comparator_arrowhead_f1": 0.746031746031746,
     "complete": false,
     "different_graph": [
      {
       "dataset": "1479c3a2cf78",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 3.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "191d413ad516",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 7.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1d1b566f1d9a",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 0.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "2d7478e98a7b",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 5.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "45d459068d3d",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 8.0,
       "andrey_shd": 6.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "64c4094bba94",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 5.0,
       "comparator_shd": 0.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "7d5b21666afb",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 0.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 4,
       "comparator_timeouts": 0,
       "comparator_failed": 1,
       "paired": 4,
       "andrey_s": 0.04117891751229763,
       "comparator_s": 0.4687265405,
       "ratio": 12.070232219781975,
       "same_graph": 1,
       "between_shd": 5.5,
       "andrey_shd": 5.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 2,
       "andrey_skeleton_f1": 0.9285714285714286,
       "comparator_skeleton_f1": 0.9307359307359306,
       "andrey_arrowhead_f1": 0.6512605042016807,
       "comparator_arrowhead_f1": 0.7689075630252101,
       "complete": false
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 4,
       "comparator_timeouts": 0,
       "comparator_failed": 1,
       "paired": 4,
       "andrey_s": 0.044869198463857174,
       "comparator_s": 0.5649587635,
       "ratio": 12.90056298121812,
       "same_graph": 0,
       "between_shd": 6.0,
       "andrey_shd": 4.0,
       "comparator_shd": 4.5,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9261904761904762,
       "comparator_skeleton_f1": 0.9761904761904762,
       "andrey_arrowhead_f1": 0.7142857142857143,
       "comparator_arrowhead_f1": 0.6388888888888888,
       "complete": false
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 6,
     "comparator_timeouts": 0,
     "comparator_failed": 4,
     "paired": 6,
     "andrey_s": 0.13065287610515952,
     "comparator_s": 1.3575345795,
     "ratio": 10.035624265787835,
     "same_graph": 0,
     "between_shd": 6.0,
     "andrey_shd": 3.5,
     "comparator_shd": 6.5,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 5,
     "comparator_fewer_errors": 1,
     "andrey_skeleton_f1": 0.9608636977058029,
     "comparator_skeleton_f1": 0.9384146341463415,
     "andrey_arrowhead_f1": 0.8564102564102564,
     "comparator_arrowhead_f1": 0.7631048387096775,
     "complete": false,
     "different_graph": [
      {
       "dataset": "08ba1ade4006",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 4.0,
       "comparator_shd": 9.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "29a23f796624",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 9.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "4690cc37f3a6",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 1.0,
       "andrey_shd": 1.0,
       "comparator_shd": 2.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "47b3644357c5",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 3.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "86bbe07a5161",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 2.0,
       "comparator_shd": 14.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "f631acd89b5a",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 9.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 4,
       "comparator_timeouts": 0,
       "comparator_failed": 1,
       "paired": 4,
       "andrey_s": 0.12342461571097374,
       "comparator_s": 1.344197255,
       "ratio": 9.027907223572772,
       "same_graph": 0,
       "between_shd": 8.0,
       "andrey_shd": 6.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.9365384615384615,
       "andrey_arrowhead_f1": 0.7811594202898551,
       "comparator_arrowhead_f1": 0.7110215053763441,
       "complete": false
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 2,
       "comparator_timeouts": 0,
       "comparator_failed": 3,
       "paired": 2,
       "andrey_s": 0.1378811364993453,
       "comparator_s": 1.3575345795,
       "ratio": 11.418254040533427,
       "same_graph": 0,
       "between_shd": 4.0,
       "andrey_shd": 2.5,
       "comparator_shd": 5.5,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9743589743589743,
       "comparator_skeleton_f1": 0.9384146341463415,
       "andrey_arrowhead_f1": 0.8936651583710407,
       "comparator_arrowhead_f1": 0.8143382352941176,
       "complete": false
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 4,
     "comparator_timeouts": 0,
     "comparator_failed": 6,
     "paired": 4,
     "andrey_s": 0.4205700163729489,
     "comparator_s": 4.108587823000001,
     "ratio": 8.963774603645984,
     "same_graph": 0,
     "between_shd": 15.5,
     "andrey_shd": 8.5,
     "comparator_shd": 17.5,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 4,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9149008885850991,
     "comparator_skeleton_f1": 0.9022757697456493,
     "andrey_arrowhead_f1": 0.885531914893617,
     "comparator_arrowhead_f1": 0.6397727272727273,
     "complete": false,
     "different_graph": [
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 22.0,
       "andrey_shd": 7.0,
       "comparator_shd": 25.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "81feeb3e2714",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 6.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 15.0,
       "andrey_shd": 12.0,
       "comparator_shd": 15.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 10.0,
       "comparator_shd": 20.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 4,
       "comparator_timeouts": 0,
       "comparator_failed": 1,
       "paired": 4,
       "andrey_s": 0.4204342132434249,
       "comparator_s": 4.108587823000001,
       "ratio": 8.963774603645984,
       "same_graph": 0,
       "between_shd": 15.5,
       "andrey_shd": 8.5,
       "comparator_shd": 17.5,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 4,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9149008885850991,
       "comparator_skeleton_f1": 0.9022757697456493,
       "andrey_arrowhead_f1": 0.885531914893617,
       "comparator_arrowhead_f1": 0.6397727272727273,
       "complete": false
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 0,
       "comparator_timeouts": 0,
       "comparator_failed": 5,
       "paired": 0,
       "andrey_s": 0.4207058195024729,
       "comparator_s": null,
       "ratio": null,
       "same_graph": 0,
       "between_shd": null,
       "andrey_shd": null,
       "comparator_shd": null,
       "empty_shd": null,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 0,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": null,
       "comparator_skeleton_f1": null,
       "andrey_arrowhead_f1": null,
       "comparator_arrowhead_f1": null,
       "complete": false
      }
     ]
    }
   ]
  },
  {
   "method": "PC on mixed data, conditional Gaussian test",
   "setting": "indep_test='cond_gauss', alpha=0.05",
   "solution": "andrey.pc.cond_gauss",
   "comparator": "bnlearn",
   "comparator_method": "pc.stable",
   "comparator_setting": "test='mi-cg', alpha=0.05",
   "comparator_solution": "bnlearn.pc-stable.cond_gauss",
   "regime": "mixed_er",
   "comparison": "skeleton",
   "error_metric": "skeleton errors: the variable pairs whose adjacency differs from the true graph's (a missing or an extra edge); edge marks are not scored. The empty graph's count is the number of true edges. The endpoint (CPDAG) errors are kept under 'endpoint' and are not judged",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. bnlearn's conditional linear Gaussian networks give no categorical node a continuous parent, as in the simulated truth. bnlearn's pc.stable with mi-cg bans every arc from a continuous to a categorical node and orients each categorical-continuous edge from that ban, a restriction the simulator also obeys, while Andrey's PC orients every edge from the data; the row therefore scores skeleton errors only (comparison 'skeleton'), and endpoint errors stay out of parity. Two defects in bnlearn's mi-cg change its skeleton decisions: for two categorical variables given continuous ones, its statistic is the G statistic of the pair plus a term for the second variable's dependence on the continuous conditioners, so it does not test the pair given the set and depends on argument order; and when a cell of the alternative model holds a single row, the fit is singular and bnlearn sets the statistic to zero, reporting independence for edges the data support strongly",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.0426987805403769,
     "comparator_s": 0.05560755776241422,
     "ratio": 1.2592067891292666,
     "under_speed_floor": true,
     "endpoint": {
      "andrey_shd": 4.5,
      "comparator_shd": 6.0,
      "andrey_arrowhead_f1": 0.6904761904761905,
      "comparator_arrowhead_f1": 0.3333333333333333,
      "andrey_fewer_errors": 6,
      "comparator_fewer_errors": 3
     },
     "same_graph": 0,
     "between_shd": 3.0,
     "andrey_shd": 1.5,
     "comparator_shd": 3.5,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 8,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.9261904761904762,
     "comparator_skeleton_f1": 0.7867647058823528,
     "complete": true,
     "different_graph": [
      {
       "dataset": "012069b786ac",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 3.0,
       "andrey_shd": 0.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1479c3a2cf78",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 3.0,
       "andrey_shd": 2.0,
       "comparator_shd": 5.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "191d413ad516",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 3.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1d1b566f1d9a",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 0.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "2d7478e98a7b",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 9.0,
       "andrey_shd": 3.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "45d459068d3d",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 1.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "64c4094bba94",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "7d5b21666afb",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 4.0,
       "andrey_shd": 0.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "91cf75d8f58b",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 3.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "d48b6bfffe9d",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 2.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.04117891751229763,
       "comparator_s": 0.06272990629076958,
       "ratio": 1.4056818496165988,
       "under_speed_floor": true,
       "endpoint": {
        "andrey_shd": 5.0,
        "comparator_shd": 5.0,
        "andrey_arrowhead_f1": 0.7142857142857143,
        "comparator_arrowhead_f1": 0.7142857142857143,
        "andrey_fewer_errors": 2,
        "comparator_fewer_errors": 2
       },
       "same_graph": 0,
       "between_shd": 1.0,
       "andrey_shd": 2.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 2,
       "andrey_skeleton_f1": 0.888888888888889,
       "comparator_skeleton_f1": 0.888888888888889,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.044869198463857174,
       "comparator_s": 0.05424843821674585,
       "ratio": 1.2228096226030019,
       "under_speed_floor": true,
       "endpoint": {
        "andrey_shd": 4.0,
        "comparator_shd": 6.0,
        "andrey_arrowhead_f1": 0.6666666666666665,
        "comparator_arrowhead_f1": 0.3333333333333333,
        "andrey_fewer_errors": 4,
        "comparator_fewer_errors": 1
       },
       "same_graph": 0,
       "between_shd": 3.0,
       "andrey_shd": 1.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 5,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.7499999999999999,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.13065287610515952,
     "comparator_s": 0.1774724656715989,
     "ratio": 1.2482859091908758,
     "endpoint": {
      "andrey_shd": 3.5,
      "comparator_shd": 11.0,
      "andrey_arrowhead_f1": 0.8564102564102564,
      "comparator_arrowhead_f1": 0.5762962962962963,
      "andrey_fewer_errors": 8,
      "comparator_fewer_errors": 2
     },
     "same_graph": 1,
     "between_shd": 4.5,
     "andrey_shd": 1.0,
     "comparator_shd": 5.5,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 9,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9743589743589743,
     "comparator_skeleton_f1": 0.8452380952380952,
     "complete": true,
     "different_graph": [
      {
       "dataset": "08ba1ade4006",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 4.0,
       "andrey_shd": 1.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "0eb6eead034b",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 1.0,
       "comparator_shd": 6.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "29a23f796624",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 2.0,
       "comparator_shd": 6.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "3c31ea876c19",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 0.0,
       "comparator_shd": 12.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "4690cc37f3a6",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 1.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "47b3644357c5",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 1.0,
       "comparator_shd": 2.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "86bbe07a5161",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 2.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 10.0,
       "andrey_shd": 2.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "e31d401712a6",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 0.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.12342461571097374,
       "comparator_s": 0.20192583836615086,
       "ratio": 1.2457982767392104,
       "endpoint": {
        "andrey_shd": 3.0,
        "comparator_shd": 11.0,
        "andrey_arrowhead_f1": 0.8666666666666667,
        "comparator_arrowhead_f1": 0.56,
        "andrey_fewer_errors": 4,
        "comparator_fewer_errors": 1
       },
       "same_graph": 1,
       "between_shd": 3.0,
       "andrey_shd": 2.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 4,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.8648648648648648,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.1378811364993453,
       "comparator_s": 0.1605665497481823,
       "ratio": 1.2507735416425412,
       "endpoint": {
        "andrey_shd": 4.0,
        "comparator_shd": 11.0,
        "andrey_arrowhead_f1": 0.846153846153846,
        "comparator_arrowhead_f1": 0.5925925925925926,
        "andrey_fewer_errors": 4,
        "comparator_fewer_errors": 1
       },
       "same_graph": 0,
       "between_shd": 5.0,
       "andrey_shd": 1.0,
       "comparator_shd": 6.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 5,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9743589743589743,
       "comparator_skeleton_f1": 0.8235294117647058,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.4205700163729489,
     "comparator_s": 0.7600918542593718,
     "ratio": 1.8743988670257843,
     "endpoint": {
      "andrey_shd": 9.5,
      "comparator_shd": 22.0,
      "andrey_arrowhead_f1": 0.8255319148936171,
      "comparator_arrowhead_f1": 0.5522875816993464,
      "andrey_fewer_errors": 10,
      "comparator_fewer_errors": 0
     },
     "same_graph": 0,
     "between_shd": 10.5,
     "andrey_shd": 5.0,
     "comparator_shd": 15.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 9,
     "comparator_fewer_errors": 1,
     "andrey_skeleton_f1": 0.9341991341991343,
     "comparator_skeleton_f1": 0.7866666666666666,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1f6966c25673",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 11.0,
       "andrey_shd": 7.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "646d39d43e9f",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 15.0,
       "andrey_shd": 7.0,
       "comparator_shd": 16.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "6854426e7804",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 29.0,
       "andrey_shd": 5.0,
       "comparator_shd": 32.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "81feeb3e2714",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 19.0,
       "andrey_shd": 4.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "a7c9cc2d6091",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 8.0,
       "andrey_shd": 5.0,
       "comparator_shd": 13.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 10.0,
       "andrey_shd": 9.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 8.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "f2414d96cd87",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 16.0,
       "andrey_shd": 2.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.4204342132434249,
       "comparator_s": 0.9022251972928643,
       "ratio": 2.050148698337066,
       "endpoint": {
        "andrey_shd": 10.0,
        "comparator_shd": 21.0,
        "andrey_arrowhead_f1": 0.851063829787234,
        "comparator_arrowhead_f1": 0.5862068965517241,
        "andrey_fewer_errors": 5,
        "comparator_fewer_errors": 0
       },
       "same_graph": 0,
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 4,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.935064935064935,
       "comparator_skeleton_f1": 0.8947368421052632,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.4207058195024729,
       "comparator_s": 0.6953689279034734,
       "ratio": 1.6335250031348068,
       "endpoint": {
        "andrey_shd": 9.0,
        "comparator_shd": 24.0,
        "andrey_arrowhead_f1": 0.7906976744186047,
        "comparator_arrowhead_f1": 0.5,
        "andrey_fewer_errors": 5,
        "comparator_fewer_errors": 0
       },
       "same_graph": 0,
       "between_shd": 15.0,
       "andrey_shd": 5.0,
       "comparator_shd": 16.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 5,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9333333333333333,
       "comparator_skeleton_f1": 0.7575757575757575,
       "complete": true
      }
     ]
    }
   ]
  },
  {
   "method": "GES on mixed data, degenerate Gaussian score",
   "setting": "score_func='local_score_degen_gauss', lambda_value=1",
   "solution": "andrey.ges.degen_gauss",
   "comparator": "Tetrad",
   "comparator_method": "FGES",
   "comparator_setting": "--score dg-bic-score --penaltyDiscount 1.0 --structurePrior 0",
   "comparator_solution": "tetrad.fges.degen_gauss",
   "regime": "mixed_er",
   "note": "Tetrad is the causal-cmd 1.12.0 jar (tetrad-lib 7.6.3), run with causal-cmd's own argument parser, parameters, and algorithm factory through a small driver that declares the categorical columns (causal-cmd's command line accepts --numCategories but never stores it, so it reads every column as continuous). Tetrad's time is its search call, timed inside the JVM; the whole process, with the JVM start and the CSV read, is recorded apart and not used. Tetrad 7.6.3's PC with the conditional Gaussian test stops with an error on some datasets (a likelihood it cannot evaluate); those fits count as failed and are not scored",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.04159892490133643,
     "comparator_s": 0.158419992,
     "ratio": 3.3913603361454774,
     "same_graph": 7,
     "between_shd": 0.0,
     "andrey_shd": 1.5,
     "comparator_shd": 1.5,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 1,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.9761904761904762,
     "comparator_skeleton_f1": 1.0,
     "andrey_arrowhead_f1": 0.8991596638655461,
     "comparator_arrowhead_f1": 0.8991596638655461,
     "complete": true,
     "different_graph": [
      {
       "dataset": "012069b786ac",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 7.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "64c4094bba94",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 0.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "d48b6bfffe9d",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 5.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.04207739606499672,
       "comparator_s": 0.13349575,
       "ratio": 3.268950882500641,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 1.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.9523809523809523,
       "andrey_arrowhead_f1": 0.9411764705882353,
       "comparator_arrowhead_f1": 0.9411764705882353,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.0408287737518549,
       "comparator_s": 0.179333225,
       "ratio": 3.7967045868663862,
       "same_graph": 4,
       "between_shd": 0.0,
       "andrey_shd": 2.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 0,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 1.0,
       "comparator_skeleton_f1": 1.0,
       "andrey_arrowhead_f1": 0.8571428571428571,
       "comparator_arrowhead_f1": 0.8571428571428571,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.12450311426073313,
     "comparator_s": 0.2597083055,
     "ratio": 2.075219610741137,
     "same_graph": 5,
     "between_shd": 0.5,
     "andrey_shd": 2.0,
     "comparator_shd": 2.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 1,
     "comparator_worse_than_empty": 1,
     "andrey_fewer_errors": 4,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.975609756097561,
     "comparator_skeleton_f1": 0.975609756097561,
     "andrey_arrowhead_f1": 0.9375,
     "comparator_arrowhead_f1": 0.9285714285714286,
     "complete": true,
     "different_graph": [
      {
       "dataset": "08ba1ade4006",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 8.0,
       "andrey_shd": 1.0,
       "comparator_shd": 9.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "29a23f796624",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 4.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "86bbe07a5161",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 21.0,
       "comparator_shd": 21.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 0.0,
       "comparator_shd": 2.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "f631acd89b5a",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 4.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.12203694228082895,
       "comparator_s": 0.224413606,
       "ratio": 1.8388989580186623,
       "same_graph": 2,
       "between_shd": 1.0,
       "andrey_shd": 4.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 1,
       "comparator_worse_than_empty": 1,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.975609756097561,
       "comparator_skeleton_f1": 0.9523809523809523,
       "andrey_arrowhead_f1": 0.9285714285714286,
       "comparator_arrowhead_f1": 0.8823529411764706,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.12835676223039627,
       "comparator_s": 0.280365354,
       "ratio": 2.184266330251874,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 0.0,
       "comparator_shd": 2.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 1.0,
       "comparator_skeleton_f1": 1.0,
       "andrey_arrowhead_f1": 1.0,
       "comparator_arrowhead_f1": 0.9285714285714286,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.7489764541387558,
     "comparator_s": 0.574008611,
     "ratio": 0.8023306853237855,
     "same_graph": 2,
     "between_shd": 5.5,
     "andrey_shd": 8.0,
     "comparator_shd": 10.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 4,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.962000962000962,
     "comparator_skeleton_f1": 0.9518002322880372,
     "andrey_arrowhead_f1": 0.8704284221525601,
     "comparator_arrowhead_f1": 0.8362462006079027,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1f6966c25673",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 3.0,
       "comparator_shd": 8.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 18.0,
       "andrey_shd": 17.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "646d39d43e9f",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 10.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "6854426e7804",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 4.0,
       "comparator_shd": 11.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 16.0,
       "comparator_shd": 16.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 7.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 15.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "f2414d96cd87",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 9.0,
       "andrey_shd": 5.0,
       "comparator_shd": 13.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.7563946703448892,
       "comparator_s": 0.424255206,
       "ratio": 0.5655848969246202,
       "same_graph": 1,
       "between_shd": 5.0,
       "andrey_shd": 15.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.9523809523809523,
       "andrey_arrowhead_f1": 0.7931034482758621,
       "comparator_arrowhead_f1": 0.8214285714285714,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.6842211177572608,
       "comparator_s": 0.76163682,
       "ratio": 1.113144274904131,
       "same_graph": 1,
       "between_shd": 6.0,
       "andrey_shd": 5.0,
       "comparator_shd": 9.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9629629629629629,
       "comparator_skeleton_f1": 0.951219512195122,
       "andrey_arrowhead_f1": 0.9130434782608695,
       "comparator_arrowhead_f1": 0.8510638297872339,
       "complete": true
      }
     ]
    }
   ]
  },
  {
   "method": "GES on mixed data, conditional Gaussian score",
   "setting": "score_func='local_score_cond_gauss', lambda_value=1",
   "solution": "andrey.ges.cond_gauss",
   "comparator": "Tetrad",
   "comparator_method": "FGES",
   "comparator_setting": "--score cg-bic-score --penaltyDiscount 1.0 --structurePrior 0",
   "comparator_solution": "tetrad.fges.cond_gauss",
   "regime": "mixed_er",
   "note": "Tetrad is the causal-cmd 1.12.0 jar (tetrad-lib 7.6.3), run with causal-cmd's own argument parser, parameters, and algorithm factory through a small driver that declares the categorical columns (causal-cmd's command line accepts --numCategories but never stores it, so it reads every column as continuous). Tetrad's time is its search call, timed inside the JVM; the whole process, with the JVM start and the CSV read, is recorded apart and not used. Tetrad 7.6.3's PC with the conditional Gaussian test stops with an error on some datasets (a likelihood it cannot evaluate); those fits count as failed and are not scored",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 13 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.05836854223161936,
     "comparator_s": 0.8727522615000001,
     "ratio": 15.798473287703949,
     "same_graph": 6,
     "between_shd": 0.0,
     "andrey_shd": 1.5,
     "comparator_shd": 1.5,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 2,
     "comparator_fewer_errors": 1,
     "andrey_skeleton_f1": 0.9736842105263158,
     "comparator_skeleton_f1": 0.9761904761904762,
     "andrey_arrowhead_f1": 0.8846153846153846,
     "comparator_arrowhead_f1": 0.8846153846153846,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1479c3a2cf78",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 7.0,
       "comparator_shd": 7.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "191d413ad516",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "7d5b21666afb",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 3.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "91cf75d8f58b",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 7.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.05702711455523968,
       "comparator_s": 0.826380492,
       "ratio": 14.491010082572584,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 1.0,
       "comparator_skeleton_f1": 0.9523809523809523,
       "andrey_arrowhead_f1": 1.0,
       "comparator_arrowhead_f1": 1.0,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.058961289934813976,
       "comparator_s": 1.040379736,
       "ratio": 17.64513186787833,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 3.0,
       "comparator_shd": 2.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 0,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9,
       "comparator_skeleton_f1": 1.0,
       "andrey_arrowhead_f1": 0.7692307692307692,
       "comparator_arrowhead_f1": 0.7692307692307692,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.24196146335452795,
     "comparator_s": 2.2775289505,
     "ratio": 9.770803008998717,
     "same_graph": 4,
     "between_shd": 1.0,
     "andrey_shd": 4.0,
     "comparator_shd": 4.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 1,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 3,
     "andrey_skeleton_f1": 0.975609756097561,
     "comparator_skeleton_f1": 0.9749843652282677,
     "andrey_arrowhead_f1": 0.8518518518518519,
     "comparator_arrowhead_f1": 0.8518518518518519,
     "complete": true,
     "different_graph": [
      {
       "dataset": "3c31ea876c19",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 2.0,
       "comparator_shd": 5.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "4690cc37f3a6",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 1.0,
       "andrey_shd": 4.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "86bbe07a5161",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 21.0,
       "comparator_shd": 20.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 10.0,
       "andrey_shd": 12.0,
       "comparator_shd": 2.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "e31d401712a6",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 5.0,
       "comparator_shd": 6.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "f631acd89b5a",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 3.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.2439430020749569,
       "comparator_s": 2.083757742,
       "ratio": 8.78262627696298,
       "same_graph": 2,
       "between_shd": 1.0,
       "andrey_shd": 3.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 1,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.975609756097561,
       "comparator_skeleton_f1": 0.9523809523809523,
       "andrey_arrowhead_f1": 0.888888888888889,
       "comparator_arrowhead_f1": 0.888888888888889,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.24053012393414974,
       "comparator_s": 2.360794773,
       "ratio": 10.751245028416843,
       "same_graph": 2,
       "between_shd": 1.0,
       "andrey_shd": 5.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 2,
       "andrey_skeleton_f1": 0.975609756097561,
       "comparator_skeleton_f1": 0.975609756097561,
       "andrey_arrowhead_f1": 0.7857142857142856,
       "comparator_arrowhead_f1": 0.8148148148148148,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 1.1578552476130426,
     "comparator_s": 10.967043901,
     "ratio": 9.51020940471113,
     "same_graph": 1,
     "between_shd": 6.5,
     "andrey_shd": 6.5,
     "comparator_shd": 6.5,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 6,
     "comparator_fewer_errors": 3,
     "andrey_skeleton_f1": 0.9634091923248549,
     "comparator_skeleton_f1": 0.9411764705882353,
     "andrey_arrowhead_f1": 0.8752068851373718,
     "comparator_arrowhead_f1": 0.8985964912280702,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1f6966c25673",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 12.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 14.0,
       "andrey_shd": 10.0,
       "comparator_shd": 5.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "646d39d43e9f",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 12.0,
       "andrey_shd": 13.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "6854426e7804",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 2.0,
       "comparator_shd": 4.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "81feeb3e2714",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 3.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 13.0,
       "comparator_shd": 5.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "a7c9cc2d6091",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 12.0,
       "comparator_shd": 15.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 3.0,
       "comparator_shd": 10.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 2.0,
       "comparator_shd": 6.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 1.1778056556358933,
       "comparator_s": 11.110821609,
       "ratio": 9.447532510662299,
       "same_graph": 0,
       "between_shd": 9.0,
       "andrey_shd": 3.0,
       "comparator_shd": 6.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 2,
       "andrey_skeleton_f1": 0.963855421686747,
       "comparator_skeleton_f1": 0.9411764705882353,
       "andrey_arrowhead_f1": 0.9433962264150944,
       "comparator_arrowhead_f1": 0.9259259259259259,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 1.1456149211153388,
       "comparator_s": 10.924992657,
       "ratio": 9.572886298759961,
       "same_graph": 1,
       "between_shd": 5.0,
       "andrey_shd": 12.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 1,
       "andrey_skeleton_f1": 0.9629629629629629,
       "comparator_skeleton_f1": 0.9487179487179489,
       "andrey_arrowhead_f1": 0.7868852459016393,
       "comparator_arrowhead_f1": 0.8771929824561403,
       "complete": true
      }
     ]
    }
   ]
  },
  {
   "method": "Hill climbing on mixed data, degenerate Gaussian score",
   "setting": "score_func='local_score_degen_gauss', lambda_value=1, max_iter=None (no move limit), from the empty graph",
   "solution": "andrey.hc.degen_gauss",
   "comparator": "bnlearn",
   "comparator_method": "hc",
   "comparator_setting": "score='bic-cg'",
   "comparator_solution": "bnlearn.hc.cond_gauss",
   "regime": "mixed_er",
   "comparison": "different-objective",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. bnlearn's conditional linear Gaussian networks give no categorical node a continuous parent, as in the simulated truth. Both searches take the best add, remove, or reverse move from the empty graph until none improves the score, with no move limit and no restarts, and both penalize log(n) / 2 per parameter. Neither search gives a categorical node a continuous parent (Andrey's hill climbing has kept to conditional linear Gaussian networks under both mixed-data scores since its build of 14 October 2026, the one these records come from). hc returns a DAG, compared through its CPDAG. Andrey's hill climbing is a later build than the one that ran PC and GES, on the same datasets and the same machine; bnlearn's records come from the first campaign; bnlearn has no degenerate Gaussian score, so this row sets Andrey's degenerate Gaussian search against bnlearn's conditional linear Gaussian BIC search: two objectives (comparison 'different-objective'), kept for the record and out of parity. Hill climbing with the conditional Gaussian score against the same bnlearn search is the like-for-like row",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 14 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.0248829354532063,
     "comparator_s": 0.022803652565926313,
     "ratio": 0.9636996757394382,
     "under_speed_floor": true,
     "same_graph": 1,
     "between_shd": 2.0,
     "andrey_shd": 3.0,
     "comparator_shd": 3.5,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": null,
     "comparator_fewer_errors": null,
     "andrey_skeleton_f1": 0.949874686716792,
     "comparator_skeleton_f1": 0.9236842105263159,
     "andrey_arrowhead_f1": 0.8452380952380951,
     "comparator_arrowhead_f1": 0.7619047619047619,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1479c3a2cf78",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 4.0,
       "andrey_shd": 5.0,
       "comparator_shd": 5.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "191d413ad516",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 6.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "1d1b566f1d9a",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "2d7478e98a7b",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 3.0,
       "andrey_shd": 0.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "45d459068d3d",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 2.0,
       "andrey_shd": 3.0,
       "comparator_shd": 5.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "64c4094bba94",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 0.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "7d5b21666afb",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 1.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "91cf75d8f58b",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 6.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "d48b6bfffe9d",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 5.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.023030067794024944,
       "comparator_s": 0.022340329363942146,
       "ratio": 0.9886461181629617,
       "under_speed_floor": true,
       "same_graph": 0,
       "between_shd": 2.0,
       "andrey_shd": 5.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.9,
       "andrey_arrowhead_f1": 0.7142857142857143,
       "comparator_arrowhead_f1": 0.8571428571428571,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.026949603110551834,
       "comparator_s": 0.023137589916586876,
       "ratio": 0.946491865696998,
       "under_speed_floor": true,
       "same_graph": 1,
       "between_shd": 2.0,
       "andrey_shd": 3.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.9473684210526316,
       "andrey_arrowhead_f1": 0.8571428571428571,
       "comparator_arrowhead_f1": 0.6666666666666666,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.04087122296914458,
     "comparator_s": 0.0635284692980349,
     "ratio": 1.6230234453291972,
     "under_speed_floor": true,
     "same_graph": 2,
     "between_shd": 6.0,
     "andrey_shd": 6.0,
     "comparator_shd": 7.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": null,
     "comparator_fewer_errors": null,
     "andrey_skeleton_f1": 0.919661733615222,
     "comparator_skeleton_f1": 0.893569844789357,
     "andrey_arrowhead_f1": 0.8229166666666667,
     "comparator_arrowhead_f1": 0.7945041816009558,
     "complete": true,
     "different_graph": [
      {
       "dataset": "08ba1ade4006",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 7.0,
       "comparator_shd": 6.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "0eb6eead034b",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 6.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "3c31ea876c19",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 0.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "4690cc37f3a6",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 6.0,
       "andrey_shd": 3.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "47b3644357c5",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 6.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 4.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "e31d401712a6",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 9.0,
       "andrey_shd": 8.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "f631acd89b5a",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 7.0,
       "comparator_shd": 8.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.0365914162248373,
       "comparator_s": 0.06422702316194773,
       "ratio": 1.706239292551827,
       "under_speed_floor": true,
       "same_graph": 2,
       "between_shd": 3.0,
       "andrey_shd": 6.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.9473684210526316,
       "andrey_arrowhead_f1": 0.8125,
       "comparator_arrowhead_f1": 0.8695652173913044,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.04145786724984646,
       "comparator_s": 0.05865173973143101,
       "ratio": 1.4343735776255233,
       "under_speed_floor": true,
       "same_graph": 0,
       "between_shd": 7.0,
       "andrey_shd": 6.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9090909090909091,
       "comparator_skeleton_f1": 0.8717948717948718,
       "andrey_arrowhead_f1": 0.8333333333333334,
       "comparator_arrowhead_f1": 0.7058823529411765,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.0935818338766694,
     "comparator_s": 0.1912030172534287,
     "ratio": 1.9982835593858796,
     "same_graph": 0,
     "between_shd": 13.5,
     "andrey_shd": 12.5,
     "comparator_shd": 13.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": null,
     "comparator_fewer_errors": null,
     "andrey_skeleton_f1": 0.9156136528685548,
     "comparator_skeleton_f1": 0.8810772501771793,
     "andrey_arrowhead_f1": 0.7651515151515151,
     "comparator_arrowhead_f1": 0.7586512866015971,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1f6966c25673",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 17.0,
       "andrey_shd": 18.0,
       "comparator_shd": 28.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 18.0,
       "andrey_shd": 19.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "646d39d43e9f",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 19.0,
       "andrey_shd": 15.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "6854426e7804",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 8.0,
       "andrey_shd": 10.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "81feeb3e2714",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 12.0,
       "comparator_shd": 8.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 9.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "a7c9cc2d6091",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 18.0,
       "andrey_shd": 21.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 13.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e7a78c8c5fa4",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 8.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "f2414d96cd87",
       "seed": 4,
       "categories": "3-5",
       "between_shd": 1.0,
       "andrey_shd": 6.0,
       "comparator_shd": 7.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.08995930850505829,
       "comparator_s": 0.20414961222559214,
       "ratio": 2.3631632313072224,
       "same_graph": 0,
       "between_shd": 11.0,
       "andrey_shd": 12.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9176470588235294,
       "comparator_skeleton_f1": 0.891566265060241,
       "andrey_arrowhead_f1": 0.7887323943661972,
       "comparator_arrowhead_f1": 0.8070175438596492,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.09971306845545769,
       "comparator_s": 0.1877255067229271,
       "ratio": 1.8534263396457185,
       "same_graph": 0,
       "between_shd": 17.0,
       "andrey_shd": 15.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": null,
       "comparator_fewer_errors": null,
       "andrey_skeleton_f1": 0.9135802469135802,
       "comparator_skeleton_f1": 0.8533333333333333,
       "andrey_arrowhead_f1": 0.7164179104477612,
       "comparator_arrowhead_f1": 0.65,
       "complete": true
      }
     ]
    }
   ]
  },
  {
   "method": "Hill climbing on mixed data, conditional Gaussian score",
   "setting": "score_func='local_score_cond_gauss', lambda_value=1, max_iter=None (no move limit), from the empty graph",
   "solution": "andrey.hc.cond_gauss",
   "comparator": "bnlearn",
   "comparator_method": "hc",
   "comparator_setting": "score='bic-cg'",
   "comparator_solution": "bnlearn.hc.cond_gauss",
   "regime": "mixed_er",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. bnlearn's conditional linear Gaussian networks give no categorical node a continuous parent, as in the simulated truth. Both searches take the best add, remove, or reverse move from the empty graph until none improves the score, with no move limit and no restarts, and both penalize log(n) / 2 per parameter. Neither search gives a categorical node a continuous parent (Andrey's hill climbing has kept to conditional linear Gaussian networks under both mixed-data scores since its build of 14 October 2026, the one these records come from). hc returns a DAG, compared through its CPDAG. Andrey's hill climbing is a later build than the one that ran PC and GES, on the same datasets and the same machine; bnlearn's records come from the first campaign",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 14 October 2026",
   "category_settings": [
    "2-3",
    "3-5"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 0 warm-up fits per dataset, a 2400 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "column_rule": "every package reads a column as categorical when it holds at most 10 distinct whole numbers (Andrey: max_categories=10 with categorical inferred; Tetrad: --numCategories 10; bnlearn: such columns become factors)",
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.030025196727365255,
     "comparator_s": 0.022803652565926313,
     "ratio": 0.8180479390643866,
     "under_speed_floor": true,
     "same_graph": 7,
     "between_shd": 0.0,
     "andrey_shd": 3.5,
     "comparator_shd": 3.5,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9236842105263159,
     "andrey_arrowhead_f1": 0.8571428571428571,
     "comparator_arrowhead_f1": 0.7619047619047619,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1d1b566f1d9a",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 0.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "2d7478e98a7b",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 3.0,
       "andrey_shd": 0.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "d48b6bfffe9d",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 5.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.031074875965714455,
       "comparator_s": 0.022340329363942146,
       "ratio": 0.7780986033668065,
       "under_speed_floor": true,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 4.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 2,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.9,
       "andrey_arrowhead_f1": 0.8571428571428571,
       "comparator_arrowhead_f1": 0.8571428571428571,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.028975517489016056,
       "comparator_s": 0.023137589916586876,
       "ratio": 0.8322978081745399,
       "under_speed_floor": true,
       "same_graph": 4,
       "between_shd": 0.0,
       "andrey_shd": 3.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9473684210526316,
       "comparator_skeleton_f1": 0.9473684210526316,
       "andrey_arrowhead_f1": 0.8571428571428571,
       "comparator_arrowhead_f1": 0.6666666666666666,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.053056234028190374,
     "comparator_s": 0.0635284692980349,
     "ratio": 1.120529861836102,
     "under_speed_floor": true,
     "same_graph": 7,
     "between_shd": 0.0,
     "andrey_shd": 7.0,
     "comparator_shd": 7.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 2,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9045454545454545,
     "comparator_skeleton_f1": 0.893569844789357,
     "andrey_arrowhead_f1": 0.7717121588089331,
     "comparator_arrowhead_f1": 0.7945041816009558,
     "complete": true,
     "different_graph": [
      {
       "dataset": "3c31ea876c19",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 1.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0b7bc6cdbe9",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 1.0,
       "andrey_shd": 9.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "e31d401712a6",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 4.0,
       "andrey_shd": 7.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.055805944837629795,
       "comparator_s": 0.06422702316194773,
       "ratio": 1.1214164801856936,
       "under_speed_floor": true,
       "same_graph": 4,
       "between_shd": 0.0,
       "andrey_shd": 3.0,
       "comparator_shd": 3.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9523809523809523,
       "comparator_skeleton_f1": 0.9473684210526316,
       "andrey_arrowhead_f1": 0.9285714285714286,
       "comparator_arrowhead_f1": 0.8695652173913044,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.05253722704946995,
       "comparator_s": 0.05865173973143101,
       "ratio": 1.1163843816157928,
       "under_speed_floor": true,
       "same_graph": 3,
       "between_shd": 0.0,
       "andrey_shd": 7.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 1,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.8717948717948718,
       "comparator_skeleton_f1": 0.8717948717948718,
       "andrey_arrowhead_f1": 0.7058823529411765,
       "comparator_arrowhead_f1": 0.7058823529411765,
       "complete": true
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 10,
     "fits": 10,
     "andrey_ok": 10,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 10,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 10,
     "andrey_s": 0.14244626183062792,
     "comparator_s": 0.1912030172534287,
     "ratio": 1.353507585924628,
     "same_graph": 3,
     "between_shd": 3.5,
     "andrey_shd": 11.0,
     "comparator_shd": 13.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 7,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9098684210526315,
     "comparator_skeleton_f1": 0.8810772501771793,
     "andrey_arrowhead_f1": 0.7844611528822056,
     "comparator_arrowhead_f1": 0.7586512866015971,
     "complete": true,
     "different_graph": [
      {
       "dataset": "1f6966c25673",
       "seed": 2,
       "categories": "3-5",
       "between_shd": 5.0,
       "andrey_shd": 23.0,
       "comparator_shd": 28.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "4ad48c496d21",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 16.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "646d39d43e9f",
       "seed": 1,
       "categories": "3-5",
       "between_shd": 4.0,
       "andrey_shd": 13.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "6854426e7804",
       "seed": 0,
       "categories": "3-5",
       "between_shd": 7.0,
       "andrey_shd": 11.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "964f7931f536",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 10.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "a7c9cc2d6091",
       "seed": 3,
       "categories": "3-5",
       "between_shd": 3.0,
       "andrey_shd": 26.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "e0d164b09bd4",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 11.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      }
     ],
     "cells": [
      {
       "categories": "2-3",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.15575108025223017,
       "comparator_s": 0.20414961222559214,
       "ratio": 1.3107428333401172,
       "same_graph": 2,
       "between_shd": 1.0,
       "andrey_shd": 10.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 3,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.9285714285714285,
       "comparator_skeleton_f1": 0.891566265060241,
       "andrey_arrowhead_f1": 0.8307692307692307,
       "comparator_arrowhead_f1": 0.8070175438596492,
       "complete": true
      },
      {
       "categories": "3-5",
       "fits": 5,
       "andrey_ok": 5,
       "andrey_timeouts": 0,
       "andrey_failed": 0,
       "comparator_ok": 5,
       "comparator_timeouts": 0,
       "comparator_failed": 0,
       "paired": 5,
       "andrey_s": 0.13667564000934362,
       "comparator_s": 0.1877255067229271,
       "ratio": 1.3735110858825577,
       "same_graph": 1,
       "between_shd": 4.0,
       "andrey_shd": 13.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0,
       "andrey_worse_than_empty": 0,
       "comparator_worse_than_empty": 0,
       "andrey_fewer_errors": 4,
       "comparator_fewer_errors": 0,
       "andrey_skeleton_f1": 0.8947368421052632,
       "comparator_skeleton_f1": 0.8533333333333333,
       "andrey_arrowhead_f1": 0.7307692307692306,
       "comparator_arrowhead_f1": 0.65,
       "complete": true
      }
     ]
    }
   ]
  },
  {
   "method": "PC on discrete data, chi-square test",
   "setting": "indep_test='chisq', alpha=0.05",
   "solution": "andrey.pc.chisq",
   "comparator": "causal-learn",
   "comparator_method": "pc",
   "comparator_setting": "indep_test='chisq', alpha=0.05",
   "comparator_solution": "causal-learn.pc.chisq",
   "regime": "discrete_er",
   "note": "both packages read the data as category codes 0..k-1 and return a CPDAG",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.013209090568125248,
     "comparator_s": 0.039025720208883286,
     "ratio": 2.137269900423411,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 5.0,
     "comparator_shd": 5.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.4444444444444444,
     "comparator_arrowhead_f1": 0.4444444444444444,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.05022773798555136,
     "comparator_s": 0.12632553465664387,
     "ratio": 2.298159792426278,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 7.0,
     "comparator_shd": 7.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.9189189189189189,
     "andrey_arrowhead_f1": 0.6666666666666665,
     "comparator_arrowhead_f1": 0.6666666666666665,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.17831559292972088,
     "comparator_s": 0.46938912104815245,
     "ratio": 2.628410329355621,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 14.0,
     "comparator_shd": 14.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9090909090909091,
     "comparator_skeleton_f1": 0.9090909090909091,
     "andrey_arrowhead_f1": 0.6666666666666667,
     "comparator_arrowhead_f1": 0.6666666666666667,
     "complete": true,
     "different_graph": []
    }
   ]
  },
  {
   "method": "PC on discrete data, G-square test",
   "setting": "indep_test='gsq', alpha=0.05",
   "solution": "andrey.pc.gsq",
   "comparator": "causal-learn",
   "comparator_method": "pc",
   "comparator_setting": "indep_test='gsq', alpha=0.05",
   "comparator_solution": "causal-learn.pc.gsq",
   "regime": "discrete_er",
   "note": "both packages read the data as category codes 0..k-1 and return a CPDAG",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.013398554176092148,
     "comparator_s": 0.04372665844857693,
     "ratio": 3.122133484074867,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 5.0,
     "comparator_shd": 5.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.4444444444444444,
     "comparator_arrowhead_f1": 0.4444444444444444,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.05117553751915693,
     "comparator_s": 0.12129015289247036,
     "ratio": 2.6495219401760473,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 7.0,
     "comparator_shd": 7.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.9189189189189189,
     "andrey_arrowhead_f1": 0.6666666666666665,
     "comparator_arrowhead_f1": 0.6666666666666665,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.17453434318304062,
     "comparator_s": 0.4686551680788398,
     "ratio": 2.755961548780623,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 16.0,
     "comparator_shd": 16.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.9189189189189189,
     "andrey_arrowhead_f1": 0.625,
     "comparator_arrowhead_f1": 0.625,
     "complete": true,
     "different_graph": []
    }
   ]
  },
  {
   "method": "GES on discrete data, BDeu score",
   "setting": "score_func='local_score_BDeu', max_parents=4",
   "solution": "andrey.ges.bdeu",
   "comparator": "causal-learn",
   "comparator_method": "ges",
   "comparator_setting": "score_func='local_score_BDeu', max_parents=4",
   "comparator_solution": "causal-learn.ges.bdeu",
   "regime": "discrete_er",
   "note": "both packages read the data as category codes 0..k-1 and return a CPDAG",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.023120976984500885,
     "comparator_s": 1.6662298934534192,
     "ratio": 64.72013188679996,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 3.0,
     "comparator_shd": 3.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.8571428571428571,
     "comparator_arrowhead_f1": 0.8571428571428571,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.10115173645317554,
     "comparator_s": 7.4850446078926325,
     "ratio": 62.04779342886906,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 4.0,
     "comparator_shd": 4.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.888888888888889,
     "comparator_skeleton_f1": 0.888888888888889,
     "andrey_arrowhead_f1": 0.846153846153846,
     "comparator_arrowhead_f1": 0.846153846153846,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.5950858760625124,
     "comparator_s": 29.732234517112374,
     "ratio": 51.913106225117495,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 6.0,
     "comparator_shd": 6.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9620253164556962,
     "comparator_skeleton_f1": 0.9620253164556962,
     "andrey_arrowhead_f1": 0.9090909090909091,
     "comparator_arrowhead_f1": 0.9090909090909091,
     "complete": true,
     "different_graph": []
    }
   ]
  },
  {
   "method": "PC on discrete data, chi-square test",
   "setting": "indep_test='chisq', alpha=0.05",
   "solution": "andrey.pc.chisq",
   "comparator": "bnlearn",
   "comparator_method": "pc.stable",
   "comparator_setting": "test='x2-adf', alpha=0.05",
   "comparator_solution": "bnlearn.pc-stable.chisq",
   "regime": "discrete_er",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. pc.stable returns a CPDAG. Its -adf tests take the empty rows and columns of each table out of the degrees of freedom, as Andrey's tests do, and give the same p-values with one exception: a table with fewer than 5 observations per cell on average (n < 5 r c q, for r and c categories in the two variables and q configurations of the conditioning set) gets p = 1, so bnlearn declares independence where Andrey tests it. At 2000 rows that starts at about four conditioning variables. On the same skeleton the two orient colliders differently: bnlearn keeps the first separating set it finds for a pair and applies the colliders in increasing order of that set's p-value, while Andrey's separating set is the union of the sets that separated the pair, and its colliders follow column order",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.013209090568125248,
     "comparator_s": 0.06334655079990625,
     "ratio": 4.795678436240517,
     "under_speed_floor": true,
     "same_graph": 1,
     "between_shd": 4.0,
     "andrey_shd": 5.0,
     "comparator_shd": 7.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.4444444444444444,
     "comparator_arrowhead_f1": 0.25,
     "complete": true,
     "different_graph": [
      {
       "dataset": "046ffa29f654",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 4.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "8f342eae2fda",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 5.0,
       "comparator_shd": 7.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "9ac8e6086ce7",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 8.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "e8d54a9cf794",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 8.0,
       "comparator_shd": 9.0,
       "empty_shd": 10.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.05022773798555136,
     "comparator_s": 0.15420461539179087,
     "ratio": 3.0283506902461848,
     "same_graph": 0,
     "between_shd": 8.0,
     "andrey_shd": 7.0,
     "comparator_shd": 10.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 4,
     "comparator_fewer_errors": 1,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.7567567567567567,
     "andrey_arrowhead_f1": 0.6666666666666665,
     "comparator_arrowhead_f1": 0.5185185185185186,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0d40c97e3772",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 14.0,
       "andrey_shd": 11.0,
       "comparator_shd": 17.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "105fec47424e",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 5.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "2e3a4b84238b",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 7.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "7718f052ebc5",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 19.0,
       "comparator_shd": 17.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0fe759f769e",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 2.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.17831559292972088,
     "comparator_s": 0.9573722807690501,
     "ratio": 5.467397174761683,
     "same_graph": 0,
     "between_shd": 14.0,
     "andrey_shd": 14.0,
     "comparator_shd": 26.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 5,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9090909090909091,
     "comparator_skeleton_f1": 0.9090909090909091,
     "andrey_arrowhead_f1": 0.6666666666666667,
     "comparator_arrowhead_f1": 0.4081632653061225,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0034aba4d166",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 13.0,
       "andrey_shd": 20.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "08fed1db067e",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 14.0,
       "comparator_shd": 16.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "428d2f6d48bb",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 14.0,
       "andrey_shd": 11.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "8b60660c2974",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 18.0,
       "comparator_shd": 29.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "dc228571267c",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 12.0,
       "comparator_shd": 26.0,
       "empty_shd": 40.0
      }
     ]
    }
   ]
  },
  {
   "method": "PC on discrete data, G-square test",
   "setting": "indep_test='gsq', alpha=0.05",
   "solution": "andrey.pc.gsq",
   "comparator": "bnlearn",
   "comparator_method": "pc.stable",
   "comparator_setting": "test='mi-adf', alpha=0.05",
   "comparator_solution": "bnlearn.pc-stable.gsq",
   "regime": "discrete_er",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. pc.stable returns a CPDAG. Its -adf tests take the empty rows and columns of each table out of the degrees of freedom, as Andrey's tests do, and give the same p-values with one exception: a table with fewer than 5 observations per cell on average (n < 5 r c q, for r and c categories in the two variables and q configurations of the conditioning set) gets p = 1, so bnlearn declares independence where Andrey tests it. At 2000 rows that starts at about four conditioning variables. On the same skeleton the two orient colliders differently: bnlearn keeps the first separating set it finds for a pair and applies the colliders in increasing order of that set's p-value, while Andrey's separating set is the union of the sets that separated the pair, and its colliders follow column order",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.013398554176092148,
     "comparator_s": 0.06368484627455473,
     "ratio": 4.2771712980472945,
     "under_speed_floor": true,
     "same_graph": 1,
     "between_shd": 4.0,
     "andrey_shd": 5.0,
     "comparator_shd": 7.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.4444444444444444,
     "comparator_arrowhead_f1": 0.25,
     "complete": true,
     "different_graph": [
      {
       "dataset": "046ffa29f654",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 4.0,
       "comparator_shd": 6.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "8f342eae2fda",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 5.0,
       "comparator_shd": 7.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "9ac8e6086ce7",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 8.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "e8d54a9cf794",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 4.0,
       "andrey_shd": 8.0,
       "comparator_shd": 9.0,
       "empty_shd": 10.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.05117553751915693,
     "comparator_s": 0.14007474575191736,
     "ratio": 3.156687849520963,
     "same_graph": 0,
     "between_shd": 8.0,
     "andrey_shd": 7.0,
     "comparator_shd": 10.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 4,
     "comparator_fewer_errors": 1,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.7777777777777777,
     "andrey_arrowhead_f1": 0.6666666666666665,
     "comparator_arrowhead_f1": 0.5185185185185186,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0d40c97e3772",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 14.0,
       "andrey_shd": 11.0,
       "comparator_shd": 17.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "105fec47424e",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 5.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "2e3a4b84238b",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 7.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "7718f052ebc5",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 18.0,
       "comparator_shd": 15.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0fe759f769e",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 2.0,
       "comparator_shd": 10.0,
       "empty_shd": 20.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.17453434318304062,
     "comparator_s": 0.9910392379388213,
     "ratio": 5.678190434414858,
     "same_graph": 0,
     "between_shd": 13.0,
     "andrey_shd": 16.0,
     "comparator_shd": 24.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 5,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.9189189189189189,
     "andrey_arrowhead_f1": 0.625,
     "comparator_arrowhead_f1": 0.4,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0034aba4d166",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 13.0,
       "andrey_shd": 20.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "08fed1db067e",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 14.0,
       "comparator_shd": 16.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "428d2f6d48bb",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 10.0,
       "andrey_shd": 16.0,
       "comparator_shd": 23.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "8b60660c2974",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 13.0,
       "andrey_shd": 19.0,
       "comparator_shd": 27.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "dc228571267c",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 16.0,
       "andrey_shd": 10.0,
       "comparator_shd": 24.0,
       "empty_shd": 40.0
      }
     ]
    }
   ]
  },
  {
   "method": "Hill climbing on discrete data, BDeu score",
   "setting": "score_func='local_score_BDeu', sample_prior=1, structure_prior=1, max_iter=100000, from the empty graph",
   "solution": "andrey.hc.BDeu",
   "comparator": "bnlearn",
   "comparator_method": "hc",
   "comparator_setting": "score='bde', iss=1, prior='vsp', beta=1/(d-1), restart=0, maxp=Inf, max.iter=100000",
   "comparator_solution": "bnlearn.hc.BDeu",
   "regime": "discrete_er",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. Both searches take the best add, remove, or reverse move from the empty graph until none improves the score, with no restarts and no parent cap. hc returns a DAG, compared through its CPDAG",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.011566180735826492,
     "comparator_s": 0.045928056351840496,
     "ratio": 4.091044915166288,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 5.0,
     "comparator_shd": 5.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 1,
     "comparator_worse_than_empty": 1,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.6,
     "comparator_arrowhead_f1": 0.6,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.04609835613518953,
     "comparator_s": 0.06883818097412586,
     "ratio": 1.4932892785210992,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 8.0,
     "comparator_shd": 8.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.9189189189189189,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.6666666666666666,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.1509863343089819,
     "comparator_s": 0.16392715740948915,
     "ratio": 1.155081807883319,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 18.0,
     "comparator_shd": 18.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.8717948717948718,
     "comparator_skeleton_f1": 0.8717948717948718,
     "andrey_arrowhead_f1": 0.6779661016949153,
     "comparator_arrowhead_f1": 0.6779661016949153,
     "complete": true,
     "different_graph": []
    }
   ]
  },
  {
   "method": "Hill climbing on discrete data, BDeu score",
   "setting": "score_func='local_score_BDeu', sample_prior=1, structure_prior=1, max_iter=100000, from the empty graph",
   "solution": "andrey.hc.BDeu",
   "comparator": "pgmpy",
   "comparator_method": "HillClimbSearch",
   "comparator_setting": "BDeu(equivalent_sample_size=1) with a structure prior of one expected parent per variable, tabu_length=0, max_indegree=None, max_iter=100000",
   "comparator_solution": "pgmpy.hc.BDeu",
   "regime": "discrete_er",
   "note": "pgmpy reads the category codes as integer columns, named by position so that its order among equal moves is fixed. HillClimbSearch with tabu_length=0 is plain hill climbing: the best add, remove, or reverse move from the empty graph until none improves the score by its epsilon, 1e-4 log-likelihood units, with no parent cap. pgmpy has no structure prior for BDeu, so the harness adds Andrey's through pgmpy's structure_prior_ratio hook. It returns a DAG, compared through its CPDAG. The two scores agree on every move (Andrey's is -2 times pgmpy's), but adding x -> y and adding y -> x always tie, and the two searches break that tie differently: Andrey takes the lower column pair, pgmpy the first in its own move order. From the first such tie on, the searches follow different paths to different local optima of the same score",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.011566180735826492,
     "comparator_s": 0.28897112887352705,
     "ratio": 24.07735647151781,
     "same_graph": 1,
     "between_shd": 3.0,
     "andrey_shd": 5.0,
     "comparator_shd": 1.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 1,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 4,
     "andrey_skeleton_f1": 0.9473684210526316,
     "comparator_skeleton_f1": 0.9523809523809523,
     "andrey_arrowhead_f1": 0.6,
     "comparator_arrowhead_f1": 1.0,
     "complete": true,
     "different_graph": [
      {
       "dataset": "046ffa29f654",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 12.0,
       "comparator_shd": 0.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "3c23d1a8e37e",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 3.0,
       "comparator_shd": 0.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "8f342eae2fda",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 4.0,
       "comparator_shd": 1.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "9ac8e6086ce7",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 6.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.04609835613518953,
     "comparator_s": 1.0801310678943992,
     "ratio": 25.923312386852142,
     "same_graph": 0,
     "between_shd": 7.0,
     "andrey_shd": 8.0,
     "comparator_shd": 4.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 2,
     "comparator_fewer_errors": 3,
     "andrey_skeleton_f1": 0.9189189189189189,
     "comparator_skeleton_f1": 0.888888888888889,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.846153846153846,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0d40c97e3772",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 8.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "105fec47424e",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 12.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "2e3a4b84238b",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 7.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "7718f052ebc5",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 9.0,
       "comparator_shd": 15.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0fe759f769e",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 6.0,
       "andrey_shd": 5.0,
       "comparator_shd": 9.0,
       "empty_shd": 20.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.1509863343089819,
     "comparator_s": 5.052152251824737,
     "ratio": 32.64449092732957,
     "same_graph": 0,
     "between_shd": 9.0,
     "andrey_shd": 18.0,
     "comparator_shd": 14.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 1,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.8717948717948718,
     "comparator_skeleton_f1": 0.8860759493670887,
     "andrey_arrowhead_f1": 0.6779661016949153,
     "comparator_arrowhead_f1": 0.7307692307692307,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0034aba4d166",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 18.0,
       "comparator_shd": 20.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "08fed1db067e",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 10.0,
       "andrey_shd": 21.0,
       "comparator_shd": 12.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "428d2f6d48bb",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 2.0,
       "andrey_shd": 13.0,
       "comparator_shd": 13.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "8b60660c2974",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 18.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "dc228571267c",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 17.0,
       "comparator_shd": 14.0,
       "empty_shd": 40.0
      }
     ]
    }
   ]
  },
  {
   "method": "Hill climbing on discrete data, BIC score",
   "setting": "score_func='local_score_BIC_categorical', lambda_value=1, max_iter=100000, from the empty graph",
   "solution": "andrey.hc.BIC_categorical",
   "comparator": "bnlearn",
   "comparator_method": "hc",
   "comparator_setting": "score='bic', k=log(n)/2, restart=0, maxp=Inf, max.iter=100000",
   "comparator_solution": "bnlearn.hc.BIC_categorical",
   "regime": "discrete_er",
   "note": "run in an embedded R session; the timed region holds the data's conversion to an R data frame with factor columns. Both searches take the best add, remove, or reverse move from the empty graph until none improves the score, with no restarts and no parent cap. hc returns a DAG, compared through its CPDAG",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.014135120436549187,
     "comparator_s": 0.046051510609686375,
     "ratio": 3.7113134964024286,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 6.0,
     "comparator_shd": 6.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9,
     "comparator_skeleton_f1": 0.9,
     "andrey_arrowhead_f1": 0.5454545454545454,
     "comparator_arrowhead_f1": 0.5454545454545454,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.037800793536007404,
     "comparator_s": 0.06695629935711622,
     "ratio": 1.8590513303064968,
     "under_speed_floor": true,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 8.0,
     "comparator_shd": 8.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9090909090909091,
     "comparator_skeleton_f1": 0.9090909090909091,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.6666666666666666,
     "complete": true,
     "different_graph": []
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.1469763172790408,
     "comparator_s": 0.1502976818010211,
     "ratio": 1.1349290144026518,
     "same_graph": 5,
     "between_shd": 0.0,
     "andrey_shd": 20.0,
     "comparator_shd": 20.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 0,
     "comparator_fewer_errors": 0,
     "andrey_skeleton_f1": 0.9,
     "comparator_skeleton_f1": 0.9,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.6666666666666666,
     "complete": true,
     "different_graph": []
    }
   ]
  },
  {
   "method": "Hill climbing on discrete data, BIC score",
   "setting": "score_func='local_score_BIC_categorical', lambda_value=1, max_iter=100000, from the empty graph",
   "solution": "andrey.hc.BIC_categorical",
   "comparator": "pgmpy",
   "comparator_method": "HillClimbSearch",
   "comparator_setting": "BIC, tabu_length=0, max_indegree=None, max_iter=100000",
   "comparator_solution": "pgmpy.hc.BIC_categorical",
   "regime": "discrete_er",
   "note": "pgmpy reads the category codes as integer columns, named by position so that its order among equal moves is fixed. HillClimbSearch with tabu_length=0 is plain hill climbing: the best add, remove, or reverse move from the empty graph until none improves the score by its epsilon, 1e-4 log-likelihood units, with no parent cap. pgmpy has no structure prior for BDeu, so the harness adds Andrey's through pgmpy's structure_prior_ratio hook. It returns a DAG, compared through its CPDAG. The two scores agree on every move (Andrey's is -2 times pgmpy's), but adding x -> y and adding y -> x always tie, and the two searches break that tie differently: Andrey takes the lower column pair, pgmpy the first in its own move order. From the first such tie on, the searches follow different paths to different local optima of the same score",
   "hardware": "Intel Core i7-7820X, 4 cores",
   "cores": 4,
   "build": "pre-release Andrey 0.6.0 build, 16 October 2026",
   "category_settings": [
    "2-3"
   ],
   "fit_protocol": "one fit at a time, 4 cores per fit, 1 timed repeat and 1 warm-up fits per dataset, a 1800 s wall cap and a 30000 MB memory cap per fit",
   "same_graph_test": "the same CPDAG: SHD 0 between the two packages' CPDAGs",
   "complete": true,
   "rows": [
    {
     "mean_degree": 2.0,
     "d": 10,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.014135120436549187,
     "comparator_s": 0.28940291330218315,
     "ratio": 20.474032365077974,
     "same_graph": 1,
     "between_shd": 3.0,
     "andrey_shd": 6.0,
     "comparator_shd": 4.0,
     "empty_shd": 10.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 2,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.9,
     "comparator_skeleton_f1": 0.9090909090909091,
     "andrey_arrowhead_f1": 0.5454545454545454,
     "comparator_arrowhead_f1": 0.7272727272727273,
     "complete": true,
     "different_graph": [
      {
       "dataset": "3c23d1a8e37e",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 1.0,
       "andrey_shd": 3.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "8f342eae2fda",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 8.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "9ac8e6086ce7",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 3.0,
       "andrey_shd": 6.0,
       "comparator_shd": 3.0,
       "empty_shd": 10.0
      },
      {
       "dataset": "e8d54a9cf794",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 6.0,
       "comparator_shd": 4.0,
       "empty_shd": 10.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 20,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.037800793536007404,
     "comparator_s": 1.1569273239001632,
     "ratio": 31.785087361356478,
     "same_graph": 0,
     "between_shd": 8.0,
     "andrey_shd": 8.0,
     "comparator_shd": 7.0,
     "empty_shd": 20.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 1,
     "comparator_fewer_errors": 4,
     "andrey_skeleton_f1": 0.9090909090909091,
     "comparator_skeleton_f1": 0.9473684210526316,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.7407407407407408,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0d40c97e3772",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 5.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "105fec47424e",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 9.0,
       "andrey_shd": 9.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "2e3a4b84238b",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 8.0,
       "comparator_shd": 7.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "7718f052ebc5",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 8.0,
       "andrey_shd": 11.0,
       "comparator_shd": 16.0,
       "empty_shd": 20.0
      },
      {
       "dataset": "a0fe759f769e",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 5.0,
       "comparator_shd": 4.0,
       "empty_shd": 20.0
      }
     ]
    },
    {
     "mean_degree": 2.0,
     "d": 40,
     "n": 2000,
     "seeds": 5,
     "fits": 5,
     "andrey_ok": 5,
     "andrey_timeouts": 0,
     "andrey_failed": 0,
     "comparator_ok": 5,
     "comparator_timeouts": 0,
     "comparator_failed": 0,
     "paired": 5,
     "andrey_s": 0.1469763172790408,
     "comparator_s": 5.298295044340193,
     "ratio": 36.34058157185045,
     "same_graph": 0,
     "between_shd": 11.0,
     "andrey_shd": 20.0,
     "comparator_shd": 18.0,
     "empty_shd": 40.0,
     "andrey_worse_than_empty": 0,
     "comparator_worse_than_empty": 0,
     "andrey_fewer_errors": 3,
     "comparator_fewer_errors": 2,
     "andrey_skeleton_f1": 0.9,
     "comparator_skeleton_f1": 0.891566265060241,
     "andrey_arrowhead_f1": 0.6666666666666666,
     "comparator_arrowhead_f1": 0.6538461538461539,
     "complete": true,
     "different_graph": [
      {
       "dataset": "0034aba4d166",
       "seed": 0,
       "categories": "2-3",
       "between_shd": 19.0,
       "andrey_shd": 21.0,
       "comparator_shd": 18.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "08fed1db067e",
       "seed": 1,
       "categories": "2-3",
       "between_shd": 11.0,
       "andrey_shd": 22.0,
       "comparator_shd": 11.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "428d2f6d48bb",
       "seed": 4,
       "categories": "2-3",
       "between_shd": 5.0,
       "andrey_shd": 16.0,
       "comparator_shd": 17.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "8b60660c2974",
       "seed": 2,
       "categories": "2-3",
       "between_shd": 12.0,
       "andrey_shd": 16.0,
       "comparator_shd": 19.0,
       "empty_shd": 40.0
      },
      {
       "dataset": "dc228571267c",
       "seed": 3,
       "categories": "2-3",
       "between_shd": 7.0,
       "andrey_shd": 20.0,
       "comparator_shd": 24.0,
       "empty_shd": 40.0
      }
     ]
    }
   ]
  }
 ]
}
