Skip to content

packaging: pip-only install identity, declared pyccl, backend-smoke CI, docs#5

Draft
cailmdaley wants to merge 2 commits into
feat/theory-backend-protocolfrom
feat/packaging-ci-docs
Draft

packaging: pip-only install identity, declared pyccl, backend-smoke CI, docs#5
cailmdaley wants to merge 2 commits into
feat/theory-backend-protocolfrom
feat/packaging-ci-docs

Conversation

@cailmdaley

Copy link
Copy Markdown
Member

Closes #3

Stacked on #2's branch (feat/theory-backend-protocol). Base is set to that branch so the diff shows only the packaging/CI/docs slice; retarget to main after the protocol PR merges.

What this settles

The fork's install identity is a pinned git tag, pip-only:

pip install git+https://github.com/UNIONS-WL/Smokescreen@<tag>

The <tag> placeholder is literal by design: the tag is cut after this PR and the protocol PR are both on the default branch, on the merged tip — it is not part of this PR. That tag is the value the downstream (sp_validation) deps PR pins verbatim.

Dependency metadata

[project].dependencies is exactly stock Smokescreen 1.5.6 Requires-Dist plus pyccl:

astropy>=5.2.0, cryptography, jsonargparse[signatures]>=4.0,
numpy>=2.2.0, pyccl, sacc>=0.12, scipy>=1.9.0
  • pyccl is the one addition: the default CCL backend uses it, and stock relied on an undeclared conda stack. Declaring it makes a clean pip install of the default blinding path self-contained.
  • pytest/pytest-cov leave runtime position and move to a new [project.optional-dependencies].test extra.
  • requires-python = ">=3.12"; the numpy>=2.2.0 floor is retained; no numpy upper bound anywhere.

CI

The old conda/firecrown workflow (which cannot pass on this fork) is replaced by two pip-only jobs:

  • backend-smoke (the required gate): fresh runner, pip install . from the pyproject, assert import smokescreen, then run .github/scripts/backend_smoke.py — an end-to-end blind of a ~10-point in-memory SACC vector through a synthetic theory_fn (no CCL), asserting the blinded vector changed (not np.allclose), the same seed reproduces it bit-for-bit (np.array_equal), and a different seed diverges.
  • tests: full pytest suite via pip install '.[test]', plus flake8.

build_docs.yml likewise drops conda; environment.yml is removed.

Docs

README and docs/source/installation.rst document the pip-only form as the single supported install (no conda-forge, no PyPI), and state that the firecrown integration path is inherited from upstream and unsupported in this fork — not installed, not tested, not maintained; the default and supported theory path is the built-in CCL backend.

Verified locally

Fresh empty venv (Python 3.12): install resolves the full closure including pyccl; Requires-Dist matches the set above exactly; import smokescreen imports neither pyccl nor firecrown; the three smoke assertions pass; smokescreen.backends.ccl imports cleanly.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KpaRHk3QwN13myduQ3hJyf

cailmdaley and others added 2 commits July 11, 2026 00:01
…I, docs

Runtime dependencies are now exactly the blinding closure: stock
Requires-Dist (astropy>=5.2.0, cryptography, jsonargparse[signatures]>=4.0,
numpy>=2.2.0, sacc>=0.12, scipy>=1.9.0) plus pyccl, which the default CCL
backend uses but stock never declared. pytest/pytest-cov move out of runtime
into a [project.optional-dependencies].test extra. requires-python >=3.12;
numpy keeps its >=2.2.0 floor and gains no ceiling.

CI is re-pointed from the conda/firecrown environment to a pip-only pair of
jobs: backend-smoke (the required gate — fresh install from pyproject,
'import smokescreen', and an end-to-end blind of a synthetic in-memory SACC
vector through a synthetic theory callable, asserting changed /
seed-reproducible / seed-sensitive) and tests (full pytest suite via the
[test] extra). build_docs.yml likewise drops conda; environment.yml is
removed.

README and docs document the single supported install form —
pip install git+https://github.com/UNIONS-WL/Smokescreen@<tag> — with no
conda-forge or PyPI path, and state that the firecrown integration is
inherited from upstream and unsupported in this fork.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KpaRHk3QwN13myduQ3hJyf
- Add h5py to the [test] extra so the CI tests job (and any pip-only test
  run) can exercise the HDF5 SACC paths; runtime Requires-Dist unchanged
  (seven-package contract intact).
- load_sacc_file: re-raise ModuleNotFoundError with an actionable
  'pip install h5py' message for .h5/.hdf5 inputs instead of swallowing it
  into a misleading FITS-failure ValueError.
- Split flake8 into its own CI lint job so lint and tests fail independently.
- README docs links now point at the fork's gh-pages
  (unions-wl.github.io/Smokescreen), with upstream qualified as upstream.
- __version__ = '1.5.6' (drop the leading v; matches normalized dist metadata).
- Drop dead [tool.setuptools.packages.find] and [tool.flake8] blocks
  (hatchling backend; flake8 config comes from the CI flag).

Verified: fresh uv venv install of '.[test]' on py3.12; importlib.metadata
version == smokescreen.__version__ == 1.5.6; import discipline holds;
pytest 57 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KpaRHk3QwN13myduQ3hJyf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant