Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4153785
chore(deps): update all non-major dependencies (#876)
renovate[bot] Aug 31, 2026
a06df8e
chore(deps): lock file maintenance (#877)
renovate[bot] Aug 31, 2026
e946f11
feat(testing): inject controlled PSF-model error in make_data (#828)
cailmdaley Aug 31, 2026
21570d1
Coverage nexp masks (#797)
martinkilbinger Sep 5, 2026
2ef07e4
Merge remote-tracking branch 'origin/develop' into feat/retire-versio…
cailmdaley Sep 5, 2026
6d160a2
config(workflow): park the coverage-mask constants before their only …
cailmdaley Sep 5, 2026
48d1732
build: guard the container's script-symlink globs against an empty match
cailmdaley Sep 5, 2026
864f486
refactor(merge_headers): drop the pre-workflow single-run-root branch
cailmdaley Sep 5, 2026
bf223fc
refactor(psfex_interp): drop the run-log-resolved multi-epoch branch
cailmdaley Sep 5, 2026
7865ef8
refactor(vignetmaker): drop the run-log-resolved multi-epoch branch
cailmdaley Sep 5, 2026
2112fba
docs(exp_utils): name the workflow, not the bash generation it came from
cailmdaley Sep 5, 2026
cc55734
config: drop the last version labels and a dead line from the live co…
cailmdaley Sep 5, 2026
c91d61a
feat(workflow): record each exposure's per-CCD sky footprint in the DAG
cailmdaley Sep 5, 2026
38a384c
test(workflow): pin the CCD-index contract exp_footprint rests on
cailmdaley Sep 5, 2026
ac2af78
feat(workflow): build the campaign coverage mask as a workflow product
cailmdaley Sep 5, 2026
30c406f
style: wrap the new coverage docstrings to the 79-col line length
cailmdaley Sep 5, 2026
c635f80
config: stop describing the ME_*_EXP_ keys by the keys they replaced
cailmdaley Sep 5, 2026
8d5956f
fix(coverage): a root of records that name no CCD is not an empty survey
cailmdaley Sep 5, 2026
9f293ae
refactor(coverage): retire the version-keyed CCD/PSF and header chain
cailmdaley Sep 5, 2026
1ac7f90
refactor(coverage): keep the geometry, drop the file-scraping CLI aro…
cailmdaley Sep 5, 2026
c116ea9
refactor: delete the summary scrape
cailmdaley Sep 5, 2026
75aa694
style: wrap the stripped coverage module to the 79-col line length
cailmdaley Sep 5, 2026
033b69d
refactor: retire the canfar-VM generation of run scripts
cailmdaley Sep 5, 2026
29e82d4
docs: retire the canfar-VM retrieval and post-processing pages
cailmdaley Sep 5, 2026
9ee5732
refactor: retire the CANFAR headless run layer
cailmdaley Sep 5, 2026
91d229c
refactor(functions.sh): keep the one helper Gen 2 still sources
cailmdaley Sep 5, 2026
c6dac3a
docs: retire the CANFAR production walkthrough
cailmdaley Sep 5, 2026
05a097f
docs: say what the canfar dependency is still for
cailmdaley Sep 5, 2026
e8079d8
refactor(collate_star_cat): keep the psfex, patch-less path and nothi…
cailmdaley Sep 5, 2026
8f58f59
docs: give the Snakemake workflow a page in the docs
cailmdaley Sep 5, 2026
bd8bf43
docs: rebuild the tutorial on the rule chain
cailmdaley Sep 5, 2026
b58551d
docs(workflow): correct the README's drift and name the decision
cailmdaley Sep 5, 2026
bde683b
docs: point the top-level docs at the workflow, and say what is in sc…
cailmdaley Sep 5, 2026
f0825fe
docs: repoint the tutorial's three dead in-page anchors
cailmdaley Sep 5, 2026
4820d4c
docs: let MyST generate heading anchors
cailmdaley Sep 5, 2026
1a59a95
docs: say plainly that the Gen-2 bash layer is still here
cailmdaley Sep 5, 2026
77af691
build: regenerate uv.lock from pyproject instead of editing it by hand
cailmdaley Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,19 +80,36 @@ Full detail: `docs/source/installation.md` and `docs/source/container.md`.

- `src/shapepipe/` — the package (src-layout). `modules/` holds the pipeline
modules and their `*_runner.py` wrappers; `pipeline/` is execution and file
I/O; `utilities/`; `canfar/` is CANFAR/cluster job orchestration. Console entry
points (`shapepipe_run`, `summary_run`, `canfar_*`) are defined under
I/O; `utilities/`; `canfar/` monitors CANFAR sessions. Console entry
points (`shapepipe_run`, `canfar_*`, `plot_coverage_map`) are defined under
`[project.scripts]`.
- `tests/` — the whole test suite, one discovery root: `module/` (per-module
unit/property/integration tests), `unit/` (structural), `science/` (fast
guardrails), `cluster/` (candide-only), `helpers/` (shared library code).
See `tests/README.md`.
- `workflow/` — **the production orchestration**: a Snakemake workflow over the
same `shapepipe_run` calls. `bin/sp` is the entry point (`run`, `report`,
`container`, `cancel`); `Snakefile` plus `rules/{prepare,exposure,tile,
coverage}.smk` are the rule graph; `scripts/` holds the plain Python each rule
shells out to; `config.yaml` declares one run (tile list, the scratch and
persistent roots, the container); `config/cfis/` holds the committed ini
chain; `profiles/nibi/config.yaml` is the SLURM executor profile. Deep
reference: `workflow/README.md`. User-facing: `docs/source/workflow.md`.
- `example/` — a runnable example pipeline (`example/config.ini`) on a single
CFIS tile; doubles as the CI smoke test.
- `scripts/` — shell / Python / notebook helpers (`sh/`, `python/`, `jupyter/`),
symlinked onto `$PATH` inside the image.
- `docs/` — Sphinx sources; the API docs are generated from docstrings.

**There is no concept of a catalogue version in the code.** Nothing branches on
`v1.3`..`v1.6` or `v2.0`, and there are no sky patches (`P1`..`P9`): a campaign
is a tile list, and the version of a catalogue is the git tag of the code that
produced it. The CANFAR layers and the summary scrape that carried those
constructs were retired, last carried at `2ef07e45`. The pre-Snakemake bash job
layer (`scripts/sh/run_job_sp_canfar_v2.0.bash`, `job_sp_canfar_v2.0.bash`,
`job_list_help.bash`, `functions.sh`) stays — it is version-free, and
sp_validation's image-simulation workflow calls it.

## Development workflow

- **`develop` is the integration branch** — open PRs against it. `main` /
Expand Down
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
--disable-dlopen --disable-sphinx && \
make -j"$(nproc)" && make install && \
cd / && rm -rf /tmp/openmpi-*
ENV PATH="/opt/ompi/bin:${PATH}" \

Check warning on line 92 in Dockerfile

View workflow job for this annotation

GitHub Actions / build-test-publish

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

Check warning on line 92 in Dockerfile

View workflow job for this annotation

GitHub Actions / build-test-publish

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

Check warning on line 92 in Dockerfile

View workflow job for this annotation

GitHub Actions / build-test-publish

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

Check warning on line 92 in Dockerfile

View workflow job for this annotation

GitHub Actions / build-test-publish

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/

Check warning on line 92 in Dockerfile

View workflow job for this annotation

GitHub Actions / Deploy API Documentation

Variables should be defined before their use

UndefinedVar: Usage of undefined variable '$LD_LIBRARY_PATH' More info: https://docs.docker.com/go/dockerfile/rule/undefined-var/
LD_LIBRARY_PATH="/opt/ompi/lib:${LD_LIBRARY_PATH}"

# uv — fast reproducible Python deps installer. pyproject.toml + uv.lock
Expand Down Expand Up @@ -118,6 +118,7 @@
uv pip install --no-deps -e . && \
for ext in .py .sh .bash; do \
for script in /app/scripts/*/*$ext; do \
[ -e "$script" ] || continue; \
link_name=$(basename $script $ext); \
ln -s $script /usr/local/bin/$link_name; \
done; \
Expand Down Expand Up @@ -169,6 +170,7 @@
uv pip install --no-deps -e . && \
for ext in .py .sh .bash; do \
for script in /app/scripts/*/*$ext; do \
[ -e "$script" ] || continue; \
link_name=$(basename $script $ext); \
ln -s $script /usr/local/bin/$link_name; \
done; \
Expand Down
3 changes: 2 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ to start:
- `Installation <https://cosmostat.github.io/shapepipe/installation.html>`_ — getting ShapePipe onto your machine or cluster.
- `Basic execution <https://cosmostat.github.io/shapepipe/basic_execution.html>`_ and `configuration <https://cosmostat.github.io/shapepipe/configuration.html>`_ — running ``shapepipe_run`` and writing pipeline configs.
- `Container workflow <https://cosmostat.github.io/shapepipe/container.html>`_ — the two image targets and the ``pyproject.toml`` / ``uv.lock`` / ``Dockerfile`` layers.
- `Running on a cluster <https://cosmostat.github.io/shapepipe/clusters.html>`_ — pulling the image and submitting jobs, with worked candide (SLURM) and CANFAR examples.
- `Running on a cluster <https://cosmostat.github.io/shapepipe/clusters.html>`_ — pulling the image and submitting jobs, with a worked candide (SLURM) example.
- `The Snakemake workflow <https://cosmostat.github.io/shapepipe/workflow.html>`_ — the production orchestration for a whole tile list, driven by ``workflow/bin/sp``.

If you use ShapePipe in academic work, please cite Guinot et al. (2022) and
Farrens et al. (2022).
3 changes: 0 additions & 3 deletions bin/canfar_submit_job.py

This file was deleted.

3 changes: 0 additions & 3 deletions bin/summary_run.py

This file was deleted.

39 changes: 12 additions & 27 deletions docs/source/clusters.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

ShapePipe runs the same way on every cluster: **through the container**. You
pull the slim `runtime` image once, bind-mount your clone, and run
`shapepipe_run` (or the CANFAR submission tooling) inside it — there is no
environment to install or activate on the host. This page covers the shared
pattern, then the specifics for each supported machine.
`shapepipe_run` inside it — there is no environment to install or activate on
the host. This page covers the shared pattern, then the specifics for each
supported machine.

For what is *inside* the image and how it is built, see
[Container Workflow](container.md).
Expand Down Expand Up @@ -67,32 +67,17 @@ over unchanged.

## CANFAR

CANFAR submission does not go through a batch scheduler. Instead you submit
container jobs to CANFAR's headless system with the `canfar_submit_job` console
script (backed by the `canfar` library), and watch them with `canfar_monitor` /
`canfar_monitor_log`. Pipeline steps are **bit-coded** through `-j` (the same
scheme as `scripts/sh/job_sp_canfar.bash`), the PSF model is chosen with
`-p psfex|mccd`, and `-V` selects the image version:
CANFAR submission has been retired. The `canfar_submit_job` console script and
the bash layers underneath it (`curl_canfar_local.sh`,
`init_run_exclusive_canfar.sh`, `job_sp_canfar.bash`) were last carried at
`2ef07e45`; the bit-coded `-j` production walkthrough went with them.

```bash
# Submit pipeline step(s) for the configured tiles (bit-coded -j).
canfar_submit_job -j 1 -p psfex -V 1.1

# Monitor sessions/jobs and stream logs.
canfar_monitor
canfar_monitor_log
```
Production orchestration is now the Snakemake workflow in `workflow/` — see
`workflow/README.md`. It is SLURM-only and has no CANFAR execution mode, so a
CANFAR campaign means moving to a SLURM site (nibi, candide).

The full production run — input preparation, the per-step `-j` table, and
post-processing — is documented in the
[CANFAR production walkthrough](pipeline_canfar.md).

```{note}
The CANFAR production submission scripts (`scripts/sh/job_sp_canfar*.bash`) still
run under the pre-container environment and are slated for the same
container-first cleanup the candide scripts received. Treat the walkthrough as
the current-but-evolving production procedure.
```
`canfar_monitor` and `canfar_monitor_log` stay: they list, filter and destroy
CANFAR sessions, independently of how those sessions were started.

## ccin2p3

Expand Down
4 changes: 4 additions & 0 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@

myst_enable_extensions = ["html_image"]

# Generate slug anchors for h1-h3 so in-page links like
# `[Mask images](#mask-images)` resolve instead of warning.
myst_heading_anchors = 3

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
Expand Down
3 changes: 1 addition & 2 deletions docs/source/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ Data access &amp; infrastructure (CANFAR / UNIONS):
| Package | Purpose |
|---------|---------|
| [vos](https://github.com/opencadc/vostools) | CADC / CANFAR VOSpace access |
| [skaha](https://github.com/shinybrar/skaha) | CANFAR Science Platform sessions |
| canfar | CANFAR container-job submission |
| canfar | CANFAR session monitoring |
| [astroquery](https://astroquery.readthedocs.io/) | external catalogue queries |
| [cs_util](https://github.com/CosmoStat/cs_util) | shared CosmoStat utilities |
| [sqlitedict](https://github.com/RaRe-Technologies/sqlitedict) | on-disk pipeline state |
Expand Down
Loading