SUPPLEMENTARY DATA S1
Calibrating mutual information and permutation tests for small stellar catalogues
Nick Barua and Koji Oda
Revision prepared 3 October 2026

PURPOSE AND SCOPE
This archive contains the numerical inputs, scripts, recorded results and figure
code for the revised manuscript. The methods use existing GC, KSG and distance-
correlation statistics. Synthetic datasets are identified as synthetic; the
Nissen-Schuster catalogue is the sole real-star application. No proprietary
catalogue or trained model is required. No external repository DOI is claimed.

The added validation matches N=78 and dimensions C4+D3. It does not reproduce
the full stellar distribution, measurement covariance, rounding, selection or
data-derived strata. The main observational analysis and added sensitivity
analyses are exploratory. Monte Carlo precision is not observational uncertainty.

SOFTWARE
Tested with Python 3.12.14. Exact tested versions of the four required Python
packages are in requirements-tested.txt. A compatible installation command is:
    python -m pip install -r requirements-tested.txt

Run all commands below from the archive root. Outputs are written beside their
scripts and overwrite the corresponding recorded results. To preserve the
distributed reference outputs, reproduce in a separate copy of the archive.
All commands run offline using included catalogue tables. Runtime metadata and
plot bytes may vary with platform; declared numerical tolerance is more useful
than byte equality for regenerated outputs.

QUICK NUMERICAL VERIFICATION
    python verify_results.py
Checks stored results against the manuscript's key values, source inputs,
permutation formula, quadrature and direct estimator calculations. It does not
rerun the entire Monte Carlo suite.

FULL REPRODUCTION
1. Original synthetic suite, including Gaussian, deformation, noise, selection,
   finite-sample, neighbour-order and analytic migration calculations:
    python baseline/analysis_and_figures.py
   Expected GC/KSG cell-mean errors: 0.0031270466/0.0045782403 nats.
   This script also creates legacy diagnostic plots in baseline/figures.
   Main-article figures are generated separately by step 8 below.

2. Original stellar numerical audit (interpretation text updated), including k grid, jitter, subsampling and element
   exclusions:
    python validation/original_star_reproduction/star_level_observational_audit.py
   Expected raw scores GC=0.1482926788; KSG5=0.2105688512 nats.
   Restricted probabilities GC=0.5932033983; KSG5=0.0059970015.

3. Matched-regime simulations and additional stellar distance-correlation test:
    python validation/validate_matched_regime.py --workers 4 --reps 500
    python validation/independent_star_benchmark.py
   The validation uses 3500 independently generated datasets, 199 permutations,
   seed 20261003, three statistics, and two null schemes for the shared-stratum
   case. There are 12000 method-level replicate records. --workers 1 is suitable
   for a constrained machine; it preserves the numerical random streams.
   Expected independent-null rejection counts GC/KSG/dCor: 24/24/28 of 500.
   Expected star squared distance correlation=0.2029094161, restricted
   p=0.00099950025. This statistic is dimensionless, not nats.

4. Direct logistic-selection density integration:
    python selection/selection_exact_audit.py
   At kappa=8, t=1.5, 800-node MI=0.376382858386 nats; Gaussian covariance
   score=0.271423639406. Original selected-sample score=0.273626694135.
   The baseline selection CSV columns explicitly say gaussian_score. They must
   not be interpreted as full mutual information of a non-Gaussian density.

5. Independent catalogue comparison and optional binary sensitivity:
    python catalogue/verify_catalogue.py
    python catalogue/verify_catalogue.py --binary-sensitivity --permutations 2000
   All 658 primary numerical cells match CDS. Four unused metadata fields for
   HD193901 differ between source versions; catalogue_verification.json gives
   the exact values. The original input is intentionally retained and the
   independently parsed CDS version is also supplied. The known visual binary
   G112-43/G112-44 is excluded one component at a time and together, recomputing
   metallicity bins in each analysis.

6. Numerical tie and printed-precision sensitivities:
    python validation/original_star_reproduction/tie_sensitivity.py
    python validation/original_star_reproduction/rounding_sensitivity.py
   Each evaluates 200 perturbed realisations against 199 shared restricted
   permutations with original strata fixed. The KSG5 probability ranges are
   0.005-0.010 and 0.005-0.025. These are dependent numerical sensitivities,
   not 200 independent confirmations.

7. Backend equivalence and environment-specific timing:
    python validation/check_backend_equivalence.py
    python validation/benchmark_runtime.py
   Fixed-scaling tree and pairwise KSG agree. Recomputing scale after a shuffle
   can move strict tied boundaries through floating-point rounding. The
   recorded maximum rounded-data discrepancy is 0.0010684 nats over the tested
   permutations. The original observed values and seeded p values are recovered.
   Timing runs contain 20 warmed calls and exclude significance permutations.

8. Main-article figures:
    python make_article_figures.py
   Writes article_figures/Figure_1...Figure_5 as vector PDF and 600 dpi PNG.
   Plots are derived directly from recorded numerical outputs. No generative
   images or manually altered data are used.

ARCHIVE MAP
baseline/             Original synthetic calculations with corrected score labels
selection/            Direct known-density integration and convergence results
validation/           Matched simulations, independent implementation and timings
validation/original_star_reproduction/
                      Input catalogue, original stellar script and sensitivities
catalogue/            Raw CDS tables, source hashes and comparison/exclusion code
article_figures/      Five revised figures in PNG and vector PDF
Supplementary_Methods.docx
                      Expanded methods and result tables for reviewers

Detailed seeds, assumptions and individual outputs are specified in
validation/validation_methods.txt, environment JSON files, and script constants.

NUMERICAL INTERPRETATION
- GC is the uncorrected plug-in score after marginal normal-score transforms.
- KSG is algorithm 1 with strict Chebyshev-radius counts and sample scaling.
- Negative finite-sample KSG estimates are retained.
- dCor2 is the biased sample squared distance correlation, calibrated by shuffles.
- Global and restricted permutations test different hypotheses. Coarse strata
  require within-stratum exchangeability and do not estimate conditional MI.
- Logistic inclusion probabilities are positive. Low effective sample size is
  practical instability, not proof of formal non-identifiability.
- Jitter and subsampling ranges are sensitivity ranges, not confidence intervals.
- The analytic migration model is illustrative and is not fitted to the Galaxy.
- The pairwise validation backend has O(B*N^2) temporary storage; it is intended
  for this small benchmark and does not establish survey-scale performance.

DATA SOURCES
Nissen, P. E., Schuster, W. J., 2010. Astronomy & Astrophysics 511, L10.
https://doi.org/10.1051/0004-6361/200913877
CDS/VizieR J/A+A/511/L10:
https://doi.org/10.26093/cds/vizier.35119010
Raw source URLs and SHA256 hashes are in catalogue/catalogue_verification.json.
The source authors retain attribution for the observational catalogue.

INTEGRITY
SHA256SUMS.txt lists every distributed file except itself. Check using:
    sha256sum -c SHA256SUMS.txt

AI ASSISTANCE
ChatGPT (OpenAI), accessed through Codex Work on 3 October 2026, assisted code
revision, literature checking and figure construction. A stable model version
was not exposed. Actual Python execution, analytic references, source-catalogue
comparison and independently written implementations supplied the numerical
checks. Human authors retain responsibility for reviewing the final work.
