Zenodo package (open release) and the PDF rebuilt with the published history's hashes.
make_open_package.py builds the archive from HEAD - source (git archive, LF line ends), the full history (git bundle), both simbracket wheels, README, requirements, reproduce.sh, LICENSE, NOTICE, SHA256SUMS - and refuses if any commit of the branch carries a string from a private list kept outside the repository, or if a text file has CRLF line ends; cleanroom_check.sh verifies the archive on Linux. Appendix D states that the history was rewritten once before publication to remove a server address, and that Table D1 is recomputed from the published history. lib/LICENSE so the wheels carry the licence. Server: verify 548 OK / 0 BAD, regression x2 1239 passed, PDF 32 pages, 0 errors, 0 overfull. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# Root Finding by Similarity and Analogy — code, data and history
|
||||
|
||||
Companion archive to the paper *Root Finding by Similarity and Analogy: A Bracketing Method with a
|
||||
Data-Selected Decision Layer* (V. Sitnikov). Everything behind the paper is here, under the Apache
|
||||
License 2.0: the method's reference implementation, a compiled library of the proposed method A′, the
|
||||
benchmark harness, the problem corpora, every results file, the records written before each run, the
|
||||
paper itself, and the full development history.
|
||||
|
||||
## Contents
|
||||
|
||||
| path | what |
|
||||
|---|---|
|
||||
| `source/` | the repository at the commit the paper was built from: `simroot/` (the reference implementation of the base rule, A′ and every variant the paper measures), `lib/` (the source of the compiled library `simbracket`), the sweep scripts, corpora (`corpus_*.py`), diagnoses, the verifier `verify_article.py`, the tests, every results file (`sweep_*.json`, `results_*.txt`), the records written before the runs (`PREREG_*.md`, `POSTHOC_*.md`), the findings (`FINDINGS_*.md`) and the paper (`article/`) |
|
||||
| `sim-numerics.bundle` | the full git history of that branch (`git clone sim-numerics.bundle`); the commits cited in the paper's Appendix D are in it |
|
||||
| `wheels/` | `simbracket`, A′ as a compiled library (Python ≥ 3.10; Linux and Windows builds) |
|
||||
| `requirements.txt`, `reproduce.sh` | the Python packages used, and the one-command reproduction |
|
||||
| `SHA256SUMS` | checksums of every file in the archive |
|
||||
|
||||
## Requirements
|
||||
|
||||
**Linux x86_64 for reproducing the numbers.** The paper's numbers come from one Linux machine (Ubuntu
|
||||
24.04, glibc 2.39, Python 3.12.3). The test functions call the platform's `libm`, whose last digit
|
||||
differs between platforms; on Windows, TOMS 748 needs 2635 evaluations on the Alefeld–Potra–Shi set
|
||||
instead of 2636, and two of the paper's fresh recomputations move by a few evaluations. Using the
|
||||
method needs no particular platform.
|
||||
|
||||
## Reproduce
|
||||
|
||||
```bash
|
||||
./reproduce.sh
|
||||
```
|
||||
|
||||
creates a virtual environment, installs `requirements.txt` and the `simbracket` wheel, and in `source/`
|
||||
runs
|
||||
|
||||
1. `python -u verify_article.py` — recomputes or re-reads every number stated in the paper (548) and
|
||||
compares it with the value printed there; it ends with *every number stated in the paper matches the
|
||||
sweep data*;
|
||||
2. `python -m pytest tests/test_simbracket_equivalence.py` — the compiled library equals the reference
|
||||
implementation bit for bit, point and evaluation count, on all 868 problems of the six corpora.
|
||||
|
||||
Any table can be recomputed from scratch with its sweep script; each script's docstring names the table
|
||||
it produces (for example `python -u rescore_uniform.py` for the protocol tables, `python -u
|
||||
sweep_fourth.py --fourth` for corpus 4, `python -u sweep_controls.py` and `python -u sweep_estimated.py`
|
||||
for the controls). The full test suite is `python -m pytest tests`.
|
||||
|
||||
## Use A′ on your own problem
|
||||
|
||||
```python
|
||||
from simbracket import find_root, evaluation_bound
|
||||
|
||||
x, nfev, converged = find_root(f, a, b, xtol=1e-12, maxfev=200)
|
||||
# f(a) and f(b) of opposite signs; stops when the bracket is no wider than xtol or f(x) == 0;
|
||||
# never more than evaluation_bound(a, b, xtol) = 2*ceil(log2(|b-a|/xtol)) + 3 evaluations
|
||||
```
|
||||
|
||||
or, from source, `simroot.pure.pure_root` with the configuration named `APRIME` in `sweep_full.py`.
|
||||
|
||||
## The records and their order
|
||||
|
||||
`PREREG_*.md` were written, and committed, before the runs they describe; `POSTHOC_*.md` after, as
|
||||
marked. Appendix D of the paper lists each record with its commit and the commit of its results;
|
||||
`check_prereg_order.py` recomputes that table from the history in `sim-numerics.bundle`. The order is
|
||||
attested by the author's git history, not by an external registry. Before publication the history was
|
||||
rewritten once to remove infrastructure details (a server address); the commit hashes cited in the paper
|
||||
are those of the rewritten history in this archive.
|
||||
|
||||
## Licence
|
||||
|
||||
Apache License 2.0 (`LICENSE`); copyright Valeri Sitnikov (`NOTICE`).
|
||||
Reference in New Issue
Block a user