The earlier audit found one observation: pyproject.toml's `dev` extras includes arborist[math] (sympy for ticket #000030's SymPy substrate) but NOT arborist[hessian] (numpy + scipy for #000034's φ_linear alignment probe). Without this, fresh checkouts running `make bootstrap` (which uses `pip install -e '.[dev]'`) skip tests/test_phi_alignment_probe.py via pytest.importorskip("numpy") + pytest.importorskip( "scipy.sparse.linalg") at module top. Tests show as collected-but-skipped instead of actively running. Phase 1a regressions (algorithm drift, KAT fixture corruption, threshold-band drift) would only surface when an operator deliberately ran `pip install '.[hessian]'` first. Following fox's pattern with `[math]` in dev — arborist[math] pulls sympy (~30 MB) into every fresh dev checkout so CI runs test_canonical_projection.py + math π* tests by default. arborist[hessian] adds ~80 MB combined (numpy + scipy) — a real cost, but numpy/scipy are nearly universal Python deps and already installed on most modern dev environments. Verification: - ``pip install -e '.[dev]' --dry-run`` now resolves numpy>=1.26 + scipy>=1.11 (previously did not). - ``make test`` → 1986 passed, 45 skipped (no new failures; no test count change since I already had the extras locally installed for #000034 Phase 1a development). Effect: - New dev checkout: phi_alignment_probe's 23 tests run by default (no skip). - CI catches algorithm drift / KAT corruption / threshold drift in #000034 Phase 1a code on every push, same as how the [math] inclusion catches drift in canonical_cache / canonical_projection tests. Test/code ratio (per cookbook appendix § "Unit-test density"): phi_alignment_probe at 419 test LOC / 200 code LOC = 2.10× puts it firmly in the "contract-defining foundation" bracket (≥1× threshold fox flagged for substrate-paper-spec'd primitives). Matches the discipline.
85 lines
2.2 KiB
TOML
85 lines
2.2 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "arborist"
|
|
version = "0.0.1"
|
|
description = "An arborist for trees and forests of cross-linked information"
|
|
readme = "README.md"
|
|
license = { text = "AGPL-3.0-only" }
|
|
requires-python = ">=3.10"
|
|
authors = [
|
|
{ name = "Russell Ballestrini", email = "russell@unturf.com" },
|
|
{ name = "foxhop" },
|
|
{ name = "TimeHexOn" },
|
|
]
|
|
dependencies = [
|
|
"httpx>=0.27",
|
|
"zstandard>=0.22",
|
|
"cryptography>=42",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
html = [
|
|
"selectolax>=0.3",
|
|
]
|
|
wikitext = [
|
|
"mwparserfromhell>=0.6",
|
|
]
|
|
mesh = [
|
|
# httpx is already in core deps; mesh wire only depends on stdlib +
|
|
# cryptography (also core). This extras block exists as the documented
|
|
# opt-in surface even though no extra packages are required today.
|
|
]
|
|
math = [
|
|
# Symbolic algebra/calculus π* substrate (ticket #000030). SymPy is
|
|
# ~30 MB installed; pulling it into core deps would inflate every
|
|
# fresh checkout. Tests skip via pytest.importorskip when absent.
|
|
"sympy>=1.13",
|
|
]
|
|
hessian = [
|
|
# Phi_alignment_probe (ticket #000034 Phase 1a). Lanczos top-k +
|
|
# bottom-k eigendecomposition for measuring whether v7's frozen
|
|
# linear projection W aligns with the loss Hessian's low-eigenvalue
|
|
# subspace. Numpy + scipy together ~80 MB; gated separately from
|
|
# core to keep the default install lightweight. Tests skip via
|
|
# pytest.importorskip when absent. Install with:
|
|
# pip install 'arborist[hessian]'
|
|
"numpy>=1.26",
|
|
"scipy>=1.11",
|
|
]
|
|
crawler = [
|
|
# Verbatim lift from agents.ai.unturf.com/core. Off by default — the
|
|
# default test suite never imports the crawler. Install with:
|
|
# pip install 'arborist[crawler]'
|
|
# then run `make test-crawler`.
|
|
"aiohttp>=3.8",
|
|
"beautifulsoup4>=4.11",
|
|
"lxml>=4.9",
|
|
"html5lib>=1.1",
|
|
"html2text>=2024.2.26",
|
|
"miniuri>=1.1",
|
|
"feedparser>=6.0",
|
|
"Pillow>=10.0",
|
|
"cairosvg>=2.7",
|
|
"pypdf>=4.0",
|
|
]
|
|
dev = [
|
|
"pytest>=8",
|
|
"pytest-asyncio>=0.23",
|
|
"pytest-xdist>=3.5",
|
|
"arborist[html]",
|
|
"arborist[wikitext]",
|
|
"arborist[mesh]",
|
|
"arborist[crawler]",
|
|
"arborist[math]",
|
|
"arborist[hessian]",
|
|
]
|
|
|
|
[project.scripts]
|
|
arborist = "arborist.cli:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["arborist*"]
|