Restructure: descriptive tier and experiment names, paper/manuscript
- paper/pnas -> paper/manuscript (venue-neutral)
- configs/layer1 -> configs/inheritance, src/knowledge -> src/inheritance
(imported as `inheritance`), make layer1 -> make inheritance; layer2 alias dropped
- inheritance and trained-network bundles named after the manuscript figure
they feed (fig2_grounding_sweep, figS3_rebaselining, ...), or descriptively
where they feed none; configs keep their `experiment:` value so parquet
hashes are unchanged, only output.dir moves
- figure scripts, SI figure sources, notebooks, REPRODUCING.md, README and the
SI Methods/tables updated; make clean no longer deletes tracked manifests;
reproduce.sh hashes the s{seed}/ layouts too
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y64o8FKP7rCuXzC48pxpMm
This commit is contained in:
parent
84124de143
commit
ab3dc10587
240 changed files with 477 additions and 476 deletions
|
|
@ -46,9 +46,9 @@
|
|||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"from knowledge.lineage import run_lineage\n",
|
||||
"from knowledge.metrics import heterozygosity\n",
|
||||
"from knowledge.truth import make_true_distribution\n",
|
||||
"from inheritance.lineage import run_lineage\n",
|
||||
"from inheritance.metrics import heterozygosity\n",
|
||||
"from inheritance.truth import make_true_distribution\n",
|
||||
"\n",
|
||||
"K, N_SAMPLES = 200, 100 # K items of knowledge; n samples drawn per generation\n",
|
||||
"print('ready')"
|
||||
|
|
@ -127,7 +127,7 @@
|
|||
"process — the textbook model of neutral evolution in a finite population of size `n`.\n",
|
||||
"\n",
|
||||
"The config below is the same schema the experiments use, so anything you learn here transfers\n",
|
||||
"directly to `configs/layer1/*.yaml`."
|
||||
"directly to `configs/inheritance/*.yaml`."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -430,7 +430,7 @@
|
|||
"output_type": "stream",
|
||||
"text": [
|
||||
"first swept point retaining 95% of H*: g = 0.091 (m = 10)\n",
|
||||
"the paper reports g ~ 0.05 for its tested setting; see results/E2 and Fig. 2A\n",
|
||||
"the paper reports g ~ 0.05 for its tested setting; see results/fig2_grounding_sweep and Fig. 2A\n",
|
||||
"\n",
|
||||
"common item (p=1e-02): seen once per batch at m ~ 100 -> P(seen | m=1000) = 100.0%\n",
|
||||
"rare item (p=1e-03): seen once per batch at m ~ 1,000 -> P(seen | m=1000) = 63.2%\n",
|
||||
|
|
@ -442,7 +442,7 @@
|
|||
"target = 0.95\n",
|
||||
"i = int(np.argmax(np.array(sim) >= target * H_star))\n",
|
||||
"print(f'first swept point retaining {target:.0%} of H*: g = {g[i]:.3f} (m = {ms[i]})')\n",
|
||||
"print('the paper reports g ~ 0.05 for its tested setting; see results/E2 and Fig. 2A\\n')\n",
|
||||
"print('the paper reports g ~ 0.05 for its tested setting; see results/fig2_grounding_sweep and Fig. 2A\\n')\n",
|
||||
"\n",
|
||||
"for p, label in [(1e-2, 'common'), (1e-3, 'rare'), (1e-4, 'very rare')]:\n",
|
||||
" need = 1 / p\n",
|
||||
|
|
@ -458,7 +458,7 @@
|
|||
"## Where to go next\n",
|
||||
"\n",
|
||||
"- `02_paper_figures.ipynb` — regenerate every manuscript figure from the committed artifacts.\n",
|
||||
"- `configs/layer1/E2.yaml` — the full grounding sweep this notebook miniaturises (Fig. 2A).\n",
|
||||
"- `configs/inheritance/fig2_grounding_sweep.yaml` — the full grounding sweep this notebook miniaturises (Fig. 2A).\n",
|
||||
"- `REPRODUCING.md` — the map from each paper panel to its config and seed.\n",
|
||||
"- `tests/test_scientific_validation.py` — these same identities as assertions; if they fail, the\n",
|
||||
" science is wrong, not just the code."
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
"import sys, pathlib, json, hashlib\n",
|
||||
"\n",
|
||||
"ROOT = pathlib.Path.cwd().parent\n",
|
||||
"sys.path.insert(0, str(ROOT / 'paper' / 'pnas'))\n",
|
||||
"sys.path.insert(0, str(ROOT / 'paper' / 'manuscript'))\n",
|
||||
"\n",
|
||||
"import make_figs # note: importing this chdir's to the repo root, by design\n",
|
||||
"from IPython.display import IFrame, display, Markdown\n",
|
||||
|
|
@ -79,18 +79,18 @@
|
|||
"| Panel | Artifact | Config | Seed(s) |\n",
|
||||
"|---|---|---|---|\n",
|
||||
"| Fig. 1A/1B | `schematics (no data)` | `-` | - |\n",
|
||||
"| Fig. 2A | `results/E2` | `configs/layer1/E2.yaml` | 20260704 |\n",
|
||||
"| Fig. 2B | `results/mnist_collapse` | `configs/neural/mnist_collapse.yaml` | 20260705 |\n",
|
||||
"| Fig. 2A | `results/fig2_grounding_sweep` | `configs/inheritance/fig2_grounding_sweep.yaml` | 20260704 |\n",
|
||||
"| Fig. 2B | `results/fig2_mnist_collapse` | `configs/neural/fig2_mnist_collapse.yaml` | 20260705 |\n",
|
||||
"| Fig. 3A | `results/llm_merge_seeds` | `configs/llm/merge_seeds.yaml` | 1-5 |\n",
|
||||
"| Fig. 3B | `results/llm_moe_hard_hpc` | `configs/llm/moe_hard_hpc.yaml` | 1 |\n",
|
||||
"| Fig. 3C/3D | `results/llm_epistasis(_compat)` | `configs/llm/epistasis*.yaml` | 1-3 |\n",
|
||||
"| Fig. 4A | `results/E4` | `configs/layer1/E4.yaml` | 20260704 |\n",
|
||||
"| Fig. 4B | `results/E8` | `configs/layer1/E8.yaml` | 20260705 |\n",
|
||||
"| Fig. 5A | `results/E9` | `configs/layer1/E9.yaml` | 20260705 |\n",
|
||||
"| Fig. 5B | `results/E10` | `configs/layer1/E10.yaml` | 20260705 |\n",
|
||||
"| Fig. 5C/5D | `results/E14` | `configs/layer1/E14.yaml` | 20260709 |\n",
|
||||
"| Fig. 6A-C | `results/E11` | `configs/layer1/E11.yaml` | 20260705 |\n",
|
||||
"| Fig. 7A/7B | `results/E12` | `configs/layer1/E12.yaml` | 12 |\n",
|
||||
"| Fig. 4A | `results/figS8_multiparent_union` | `configs/inheritance/figS8_multiparent_union.yaml` | 20260704 |\n",
|
||||
"| Fig. 4B | `results/figS9_specialist_superparent` | `configs/inheritance/figS9_specialist_superparent.yaml` | 20260705 |\n",
|
||||
"| Fig. 5A | `results/figS10_rugged_landscapes` | `configs/inheritance/figS10_rugged_landscapes.yaml` | 20260705 |\n",
|
||||
"| Fig. 5B | `results/figS11_directed_recombination` | `configs/inheritance/figS11_directed_recombination.yaml` | 20260705 |\n",
|
||||
"| Fig. 5C/5D | `results/figS13_mating_breadth` | `configs/inheritance/figS13_mating_breadth.yaml` | 20260709 |\n",
|
||||
"| Fig. 6A-C | `results/fig4_society_ablation` | `configs/inheritance/fig4_society_ablation.yaml` | 20260705 |\n",
|
||||
"| Fig. 7A/7B | `results/fig5_speciation_bdm` | `configs/inheritance/fig5_speciation_bdm.yaml` | 12 |\n",
|
||||
"| Fig. 7C | `results/speciation_real` | `configs/neural/speciation_real.yaml` | 13 |\n",
|
||||
"| Fig. 7D | `results/speciation_real_cliff` | `configs/neural/speciation_real_cliff.yaml` | 13 |\n",
|
||||
"| Fig. 7E/7F | `results/llm_speciation` | `configs/llm/speciation.yaml` | 1 |"
|
||||
|
|
@ -106,18 +106,18 @@
|
|||
"source": [
|
||||
"PROVENANCE = [\n",
|
||||
" ('Fig. 1A/1B', 'schematics (no data)', '-', '-'),\n",
|
||||
" ('Fig. 2A', 'results/E2', 'configs/layer1/E2.yaml', '20260704'),\n",
|
||||
" ('Fig. 2B', 'results/mnist_collapse', 'configs/neural/mnist_collapse.yaml', '20260705'),\n",
|
||||
" ('Fig. 2A', 'results/fig2_grounding_sweep', 'configs/inheritance/fig2_grounding_sweep.yaml', '20260704'),\n",
|
||||
" ('Fig. 2B', 'results/fig2_mnist_collapse', 'configs/neural/fig2_mnist_collapse.yaml', '20260705'),\n",
|
||||
" ('Fig. 3A', 'results/llm_merge_seeds', 'configs/llm/merge_seeds.yaml', '1-5'),\n",
|
||||
" ('Fig. 3B', 'results/llm_moe_hard_hpc', 'configs/llm/moe_hard_hpc.yaml', '1'),\n",
|
||||
" ('Fig. 3C/3D', 'results/llm_epistasis(_compat)', 'configs/llm/epistasis*.yaml', '1-3'),\n",
|
||||
" ('Fig. 4A', 'results/E4', 'configs/layer1/E4.yaml', '20260704'),\n",
|
||||
" ('Fig. 4B', 'results/E8', 'configs/layer1/E8.yaml', '20260705'),\n",
|
||||
" ('Fig. 5A', 'results/E9', 'configs/layer1/E9.yaml', '20260705'),\n",
|
||||
" ('Fig. 5B', 'results/E10', 'configs/layer1/E10.yaml', '20260705'),\n",
|
||||
" ('Fig. 5C/5D', 'results/E14', 'configs/layer1/E14.yaml', '20260709'),\n",
|
||||
" ('Fig. 6A-C', 'results/E11', 'configs/layer1/E11.yaml', '20260705'),\n",
|
||||
" ('Fig. 7A/7B', 'results/E12', 'configs/layer1/E12.yaml', '12'),\n",
|
||||
" ('Fig. 4A', 'results/figS8_multiparent_union', 'configs/inheritance/figS8_multiparent_union.yaml', '20260704'),\n",
|
||||
" ('Fig. 4B', 'results/figS9_specialist_superparent', 'configs/inheritance/figS9_specialist_superparent.yaml', '20260705'),\n",
|
||||
" ('Fig. 5A', 'results/figS10_rugged_landscapes', 'configs/inheritance/figS10_rugged_landscapes.yaml', '20260705'),\n",
|
||||
" ('Fig. 5B', 'results/figS11_directed_recombination', 'configs/inheritance/figS11_directed_recombination.yaml', '20260705'),\n",
|
||||
" ('Fig. 5C/5D', 'results/figS13_mating_breadth', 'configs/inheritance/figS13_mating_breadth.yaml', '20260709'),\n",
|
||||
" ('Fig. 6A-C', 'results/fig4_society_ablation', 'configs/inheritance/fig4_society_ablation.yaml', '20260705'),\n",
|
||||
" ('Fig. 7A/7B', 'results/fig5_speciation_bdm', 'configs/inheritance/fig5_speciation_bdm.yaml', '12'),\n",
|
||||
" ('Fig. 7C', 'results/speciation_real', 'configs/neural/speciation_real.yaml','13'),\n",
|
||||
" ('Fig. 7D', 'results/speciation_real_cliff','configs/neural/speciation_real_cliff.yaml','13'),\n",
|
||||
" ('Fig. 7E/7F', 'results/llm_speciation', 'configs/llm/speciation.yaml', '1'),\n",
|
||||
|
|
@ -200,7 +200,7 @@
|
|||
"source": [
|
||||
"## Regenerate the figures\n",
|
||||
"\n",
|
||||
"One call per manuscript figure. Each writes `paper/pnas/figs/<name>.pdf` — exactly the files the\n",
|
||||
"One call per manuscript figure. Each writes `paper/manuscript/figs/<name>.pdf` — exactly the files the\n",
|
||||
"manuscript includes, so a rebuilt PDF picks them up unchanged."
|
||||
]
|
||||
},
|
||||
|
|
@ -221,46 +221,46 @@
|
|||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig1a.pdf\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig1a.pdf\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig1b.pdf\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig1b.pdf\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig2.pdf\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig2.pdf\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig3.pdf\n",
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig4.pdf\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig3.pdf\n",
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig4.pdf\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig5.pdf\n",
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig6.pdf\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig5.pdf\n",
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig6.pdf\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/figs/fig7.pdf\n",
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/figs/fig7.pdf\n",
|
||||
"\n",
|
||||
"all manuscript figures regenerated into paper/pnas/figs/\n"
|
||||
"all manuscript figures regenerated into paper/manuscript/figs/\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -278,7 +278,7 @@
|
|||
"\n",
|
||||
"for name, caption in FIGURES:\n",
|
||||
" getattr(make_figs, name)()\n",
|
||||
"print('\\nall manuscript figures regenerated into paper/pnas/figs/')"
|
||||
"print('\\nall manuscript figures regenerated into paper/manuscript/figs/')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -490,7 +490,7 @@
|
|||
"\n",
|
||||
"has_poppler = shutil.which('pdftoppm') is not None\n",
|
||||
"for name, caption in FIGURES:\n",
|
||||
" pdf = ROOT / 'paper' / 'pnas' / 'figs' / f'{name}.pdf'\n",
|
||||
" pdf = ROOT / 'paper' / 'manuscript' / 'figs' / f'{name}.pdf'\n",
|
||||
" display(Markdown(f'### {caption}'))\n",
|
||||
" if not has_poppler:\n",
|
||||
" print(f'(install poppler-utils to preview inline) {pdf}'); continue\n",
|
||||
|
|
@ -507,7 +507,7 @@
|
|||
"source": [
|
||||
"## Rebuild the manuscript PDF (optional)\n",
|
||||
"\n",
|
||||
"`build.py` converts `paper/pnas/main.md` to LaTeX, placing these figures; compiling needs a TeX\n",
|
||||
"`build.py` converts `paper/manuscript/main.md` to LaTeX, placing these figures; compiling needs a TeX\n",
|
||||
"toolchain (`tectonic main.tex`), so it is left as a shell step rather than run here."
|
||||
]
|
||||
},
|
||||
|
|
@ -528,16 +528,16 @@
|
|||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/pnas/body.tex\n",
|
||||
"now: cd paper/pnas && tectonic main.tex\n"
|
||||
"wrote /home/gg/ownCloud/Work/Projects/LamarckianAI/paper/manuscript/body.tex\n",
|
||||
"now: cd paper/manuscript && tectonic main.tex\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import subprocess\n",
|
||||
"print(subprocess.run([sys.executable, str(ROOT / 'paper' / 'pnas' / 'build.py')],\n",
|
||||
"print(subprocess.run([sys.executable, str(ROOT / 'paper' / 'manuscript' / 'build.py')],\n",
|
||||
" capture_output=True, text=True).stdout.strip())\n",
|
||||
"print('now: cd paper/pnas && tectonic main.tex')"
|
||||
"print('now: cd paper/manuscript && tectonic main.tex')"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue