Scrub the legacy n(z) A/B/C blind: an n(z) is a catalogue entry's - #359
Merged
Merged
Conversation
…logue paths The synthetic pure-E/B pins passed in CI and failed on candide because TreeCorr's default bin_slop/angle_slop make ξ± follow the tree's top-level split, which varies with the jackknife patches and, through min_top, with the thread count TreeCorr takes from cpu_count(). Fixed patch centres alone leave a 4-vs-48-thread spread (reporting ξ− up to 16%); exact binning removes it (1e-12). The test measures with bin_slop = angle_slop = 0, and test_b_modes pins pure_eb_from_xi on the same ξ±, committed as tests/data/pure_eb_xi_fixture.npz. The configured-path guard skips cat_config's paths.output and directory-less calibration params.input_path values. The two LFmask entries (data gone) and the six unread covmat_file keys leave cat_config.yaml, and the slow duplicate test_catalog_paths_exist goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
TreeCorr derives min_top, the depth of its root cells, from its thread count (max(3, ceil(log2 n)), with n from cpu_count() when unset). The root cells set which pairs bin_slop approximates, so at default slop calculate_2pcf's ξ± depended on the node: on the synthetic catalogue, 48 threads move ξ± by 0.038σ against 4. The shared treecorr_config pins min_top = 6, which is what TreeCorr derives on candide's 48- and 64-CPU nodes; the same config reaches the aperture-mass, leakage and ρ/τ correlations. test_calculate_2pcf_does_not_depend_on_thread_count measures at production binning on 4 and 48 threads (fresh Catalog each, shared patch centres) and requires agreement below 1e-6σ; it is red without the pin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
calculate_pure_eb_correlation (modes and jackknife) and pure_eb_covariance_mc call cosmo_numba through pure_eb_from_xi, so the transform test_b_modes pins is the one every pure-E/B product runs through. The committed ξ± fixture is now a conftest fixture (pure_eb_xi) with two users. The synthetic pure-E/B test asserts that the ξ± and edges it measures equal the fixture (agreement 2e-13), and that its modes are pure_eb_from_xi of them; this replaces its copy of the mode pins, and np.savez of what it measures regenerates the fixture. test_b_modes pins pure_eb_from_xi on the fixture, which fails loudly if cosmo_numba does not import, with no skip. A failure now names what moved: the measured ξ±, the wiring into the kernel, or the transform. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
The jackknife covariance function indexed pure_EB(x) once per key, so every realisation ran cosmo_numba's transform six times (55 transforms at npatch=8 where 10 suffice; values unchanged). _eb_vector concatenates the modes in _EB_KEYS order for both the jackknife and the MC covariance. The synthetic pure-E/B test counts transforms around calculate_pure_eb and is red on the per-key closure (55 > npatch + 2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
Two tests in the section compare values (pure-E/B against committed ξ±, ξ± across TreeCorr thread counts); the header defers to each test's docstring instead of listing them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
…, one output root, one integration grid - Launch-time parity: container.image_runtime reads the image's Python minor and Snakemake version (SIF via apptainer, sandbox off disk, tags skipped); common.check_host_parity stops a launch whose host Snakemake differs, with the reinstall command. configure() and image_sims.smk call it; the README install line pins --python 3.12. - The catalogue config is the launched checkout's cosmo_val/cat_config.yaml, loaded by configure() into CATALOG_CONFIG; the paper Snakefiles no longer merge it into `config`, and covariance.smk / ecut.smk read CATALOG_CONFIG. - One output root: cv_init_params passes output_dir=COSMO_VAL, cv_runner no longer chdirs into the live checkout, and CosmologyValidation drops its COSMO_VAL environment fallback. - One integration grid (R12): the cosebis grid is gone; cv_cosebis reads the integration part and the CosmoCov g covariance on that grid (the one pure-E/B uses). An npatch=1 grid defaults to the diagonal covariance, and a binning outside the named grids takes its covariance from its own patches. - The candide profile sets jobs: 100. - workflow/tests: host-launcher DAG tests on a toy checkout (P1-P3) and the real papers on candide (P4, P5 = the container smoke test, moved here); CI runs them in a workflow-dag job. test_bmodes_workflow_dry_run.py is replaced by P4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
… image - container.CACHE_DIR is ~/.cache/sp_validation whatever XDG_CACHE_HOME says. A job runs the image from the path the launching host resolved, and on candide XDG_CACHE_HOME is node-local /scratch: from such a shell the launch fell back to the registry tag and skipped the parity check. SPV_CONTAINER / SPV_SANDBOX remain the overrides. - test_launch_reads_the_image_under_home: a mismatched image under a fake ~/.cache stops the launch while XDG_CACHE_HOME points elsewhere. - test_papers_resolve_on_candide asserts unconditionally that the launch read a local image (no "parity unchecked"). - test_image_sims_checks_parity_at_launch: the standalone image-sims Snakefile stops on a mismatched image. - test_assemble_resolves pins each terminal file's inputs: the reporting ξ± part with its CosmoCov ng covariance, the fiducial-binning pseudo-Cl part with its NaMaster covariance, COSEBIs, pure-E/B and ρ/τ. - The container smoke test launches as the README does (no --jobs), so the candide profile's job bound is under test. - Test docstrings drop the design-table row IDs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
A grid is a binning; rule xi takes cov=patch_cov(npatch) directly, so grid_cov, _named_grid and the grids' cov key go. cv_init_params loses its unused version_list, and the cosmo_val rules pass one CV_INIT. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
Name where the other rules write: masks under the run directory's output/masks/, papers/bmodes' figures and macros under its docs/, image sims under grids_base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
…5 test what a launch does A job's Snakemake inherits the launching shell's environment (--export=ALL), and a login shell may point XDG_CACHE_HOME at node-local storage: every job then fails creating its source cache. Two halves close it, each needed (shown on n33 by replaying the captured sbatch job command with srun stubbed): - the candide profile leaves source-cache out of shared-fs-usage, so a job neither reuses the launch's cache path nor creates its own under XDG; - common.py drops XDG_CACHE_HOME from what jobs inherit, because the slurm-jobstep executor forces a shared source cache on the Snakemake it starts for each job step. test_a_job_needs_no_launch_cache covers both (each mutation turns it red). P4 (test_papers_resolve_on_candide) now passes from a shell with node-local XDG_CACHE_HOME under srun, and its bmodes case also resolves an e-cut catalogue, so both CATALOG_CONFIG readers in ecut.smk are exercised. P5 hands the smoke Snakefile the image a launch resolves (no registry pull). The host launcher and CI carry snakemake-executor-plugin-slurm, as the README install line does, so the candide profile is parsed in CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
…tainer.py does container_env.sh still followed XDG_CACHE_HOME, so from a login shell that points it at node-local storage the sweep drivers ran a missing image while spv-container and the workflow found the real one. test_sweep_drivers_run_the_resolved_image pins the shell copy of the resolution (cache and sandbox precedence) to container.resolve_image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
Which covariance a part carries had two homes that disagreed: rule xi passed
cov=patch_cov(npatch) ("diagonal" at npatch=1), while run_2pcf's own default,
reached by the CLI and papers/bmodes' run_xi_sweep, was "none". The same
file name then held variances or not depending on who wrote it. run_2pcf now
carries what TreeCorr estimated (gg.var_method, which calculate_2pcf sets from
npatch): the jackknife covariance with patches, the shot-noise diagonal
without. The cov argument, --cov, the jackknife guard, rule xi's cov param
and common.patch_cov (with its test) go. Rule xi hands its wildcards to
grid_of directly (xi_binning_of goes).
test_xi_part_carries_the_covariance_the_measurement_estimated runs run_2pcf
on the synthetic catalogue at npatch 1 and 4; the previous run_2pcf fails
both cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
… check with a stub The candide profile deploys with apptainer, and Snakemake asks for the apptainer binary and its version even in a dry-run, so test_a_job_needs_no_launch_cache failed on GitHub's runners, which have no apptainer. A stub apptainer on the test's PATH answers that check; the dry-run reads nothing else from it. In a CI emulation (a clean checkout, a fresh HOME, no apptainer or SLURM on PATH, the workflow-dag command) the suite goes from 1 failed, 11 passed to 12 passed. Both mutations still turn the test red there: source-cache added back to the profile's shared-fs-usage (NotADirectoryError under the blocked XDG_CACHE_HOME) and the XDG_CACHE_HOME pop removed from common.py (the job sees the launch's cache). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
…nakefiles do P5's Snakefile never imported common, so its launch did not drop XDG_CACHE_HOME: from a login shell pointing it at node-local /scratch, the job's inner Snakemake died creating its source cache (PermissionError), which says nothing about what a real launch does. The Snakefile now imports common, resolves its image with common.resolve_container and checks host/image parity, as the entry Snakefiles do. P5 launches exactly as the README does, with no --config container=, and the literal default image and the test that kept it in step with CONTAINER_URI go. Checked on n33 with sbatch stubbed to record what it would submit, then the recorded job replayed with srun stubbed, from a shell with XDG_CACHE_HOME set to /scratch/cdaley/tmp/xdg: at the parent commit the job environment carries XDG_CACHE_HOME and the replay fails with PermissionError; with this commit it carries none, the job runs in the SIF, and P5's assertions pass on its report. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
The host/image parity check had a home beside the resolver, so configure() resolved the image once only to check it, and every Snakefile that picks its own image (image_sims.smk, the smoke Snakefile) had to remember a second line. resolve_container now runs check_host_parity on the image it returns: the image checked is the image that runs, and the extra call sites go. check_host_parity stays cached, since composed Snakefiles evaluate container: more than once. Removing the check from resolve_container turns 5 host tests red (both parity cases, the unreadable-image line, the image under ~/.cache, image sims). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
…s src The smoke Snakefile imported common but never put the checkout's src/ on the job's PYTHONPATH, so its job imported the image's baked sp_validation, and P5's assertion (any editable src/ layout) passed on it. The smoke Snakefile now calls inject_checkout_pythonpath as configure() does for the entry Snakefiles, and P5 asserts the job's sp_validation is this checkout's src/sp_validation/__init__.py. Run on n08 through the default profile (apptainer, no SLURM): the job reports <checkout>/src/sp_validation/__init__.py; with the injection removed it reports /sp_validation/src/sp_validation/__init__.py, which the new assertion rejects and the old one accepted. P5 itself needs a SLURM submit host and has not been run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
A launch from any checkout that named no COSMO_VAL read that checkout's catalogue config and code but wrote every cosmo_val product into the production tree, silently. COSMO_VAL now defaults to the launched checkout's (gitignored) cosmo_val/output, so production is written only from the production checkout or when a launch names it; COSMO_INFERENCE keeps its shared default. README says so. P2 gains an unnamed case: with COSMO_VAL unset, every declared output lies under the toy checkout's cosmo_val/output, the inference root or results/. Restoring the production default turns it red (outputs under /n17data/cdaley/unions/code/sp_validation/cosmo_val/output). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
With patches, calculate_2pcf wrote its .txt with write_cov=True and no
per-patch results. TreeCorr 5.1.4 writes num_rows only alongside patch
results, so its reader ran on into the cov block and raised ("got 12 columns
instead of 11"). The two ξ± figure rules re-enter calculate_2pcf on the
reporting grid (npatch=100) and hit exactly that read. The dump now carries
the columns only; the covariance matrix lives in the SACC part, and the
figure readers use the columns.
test_a_patched_xi_dump_reads_back measures at npatch=4, then re-enters
calculate_2pcf from a fresh CosmologyValidation and compares the columns;
under write_cov=True it fails with the ValueError above.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
A real launch through the committed candide profile, of an up-to-date target, submits nothing, so it runs in CI and on an allocation; the same launch through the profile without `jobs` is refused. test_container_smoke submits a real job and needs sbatch, which only a login node has; it is documented as the login-node check it is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013EGDJZeA8v26eKGAHQqh5j
P5 (one real SLURM job through the candide profile, from a login node) passed, but only on its retry: the job finished, its output took more than 5 s to show on the login node's /home, and Snakemake re-ran it. On a multi-hour job that retry costs hours, and a second miss fails the run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
…efault Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
Choosing an n(z) is choosing a catalogue entry: each entry's
shear.redshift_path is its n(z), read by CosmologyValidation.get_redshift
and by the workflow's redshift_path(version). CosmologyValidation loses its
blind override, and the pseudo-Cl, covariance, inference and papers/bmodes
filenames lose their blind token and wildcard.
- common: catalogue_entry()/redshift_path() replace build_redshift_path;
covariance_{base,dir,path} and pseudo_cl_tag drop blind; the version
constraint admits the _A/_B/_C entries.
- covariance.smk: get_cat_params and the star-halo mask resolve through
the catalogue entry.
- papers/bmodes: bb_covariance_blind_independence and the talk n(z) plot
compare fiducial.nz_realisations, the SP_v1.4.6.3_{A,B,C}_leak_corr
entries; pure-E/B, COSEBIs PTE and pseudo-Cl paths are per version.
- cat_config: SP_v1.4.6.3_{A,B,C} match SP_v1.4.6.3 but for their n(z);
SP_v1.4.8 and SP_v1.4.11.3(_ecut07) name the n(z) their covariances used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
nz.dndz.path names the file with {pipeline}; the same file as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
Like SP_v1.4.11.3, its covariance was built from nz_SP_v1.4.6_A.txt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
A script: job unpickles the host's snakemake object with whichever snakemake it imports first, and the image's site-packages precede the host's appended sys.path. The image carried its own (the workflow extra, and the base image's jupyter extra), so the host had to match its version exactly. The Dockerfile now uninstalls every snakemake* package after the sync and the workflow extra drops snakemake; the job then reads the pickle with the package that wrote it. The launch check keeps only the Python minor (check_host_python): the host's snakemake and its compiled dependencies load into the image's interpreter. The README install line, CI's DAG job and the test harness no longer pin a Snakemake version. The container smoke job now reports which snakemake unpickled its object and asserts it is the host's version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
Drops the candide LD_LIBRARY_PATH to /softs/openmpi: /softs is not bound, so the path does not exist inside the container, and no containerized rule uses MPI. Drops the default profile's --bind /home (apptainer mounts $HOME already). States the real reasons for the rest: rerun-triggers leaves out software-env because it hashes the per-person image path; shared-fs-usage leaves out source-cache because jobs would be handed the launch's node-local cache path; slurm_account because the executor's guess fails on candide; retries and kept logs for fan-outs and their printed output. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
…actor/scrub-legacy-blind
Apptainer binds $HOME, so a job read the launcher's own matplotlibrc, and a LaTeX preamble there the image cannot typeset stopped every figure rule. common.py points each job's MATPLOTLIBRC (through APPTAINERENV_, past --cleanenv) at an empty workflow/matplotlibrc. The container smoke job reports the matplotlibrc it would read and the test asserts it is the repo's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
workflow.common runs in the host Snakemake with no sp_validation installed, and loads container.py by path; container.py imports only the standard library, since it also runs as the spv-container CLI before any image exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
…ainer from mounting it A job's home is its working directory, so a checkout or output tree under the launching user's home was invisible to the job: the toy run's jobs imported the image's sp_validation instead of the checkout's src/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TJSfyQjoQXjPKsEfkGhZLj
#358 deleted the ecut rules and the sweep drivers' container_env.sh, so their edits here, the dry-run test this branch folded into workflow/tests, and the test pinning container_env.sh go with them; the bmodes DAG test resolves the 'paper' target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The image's TeX now carries sfmath, so a usetex preamble typesets inside jobs and the repo matplotlibrc override has nothing left to guard. The shapepipe:develop base ships no snakemake, so the uninstall step is gone; pyproject says why the workflow extra must not re-add it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rofile and README The launch resolves its image and runs it; the README states that the host Snakemake runs on the image's Python (3.12). The CONTRACTS notes go (the workflow-dag CI job is what enforces host-importability). The candide profile excludes n17 and n36 only, and the README's output-roots paragraph and the profile's shared-fs-usage comment say what they need to in fewer lines. The DAG tests drop the Python-check tests and the profile job-bound test, and test_one_integration_grid checks only the shared COSEBIs/pure-E/B inputs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The container smoke job reports and checks placement, imports, Snakemake version and provenance; the host-side suite no longer needs numpy. test_xi_grids loses its grid-count test, and the pure-E/B cosmo_val test keeps its value checks without counting kernel calls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Combines #358's removal of the papers/bmodes claims layer with this branch's removal of the n(z) A/B/C blind axis. Files #358 deletes stay deleted (spec .md files, claims/presentation/ecut rules, sweep scripts), since this branch's edits to them only renamed blind tokens. figures.smk takes #358's spec-less inputs with this branch's blind-free paths: cosebis_binning_comparison stays dropped, precompute_pure_eb carries no blind wildcard constraint, pure_eb_covariance reads the fiducial version's npz directly, and bb_covariance_blind_independence iterates over NZ_REALISATIONS. pure_eb_data_vector.main and harmonic_space_pte_matrices take neither specs nor a blind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lind macros pure_eb_data_vector writes one fiducial `pte_joint`, so \ebfiducialPte and \ebfullPte read that key. The covariance_blind_consistency and per-blind PTE-spread macros go: nothing produces their inputs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> # Conflicts: # src/sp_validation/tests/test_cv_init_params.py # workflow/common.py # workflow/rules/cosmo_val.smk # workflow/rules/covariance.smk # workflow/tests/conftest.py
… reads generate_paper_macros no longer emits \cosebisfiducialPte, \cosebisfullPte or \cosebisthetaMin/Max: they read keys cosebis_version_comparison evidence does not carry and no paper uses them (the COSEBIS PTEs come from \configPte<Ver>Cosebis[Full]). The macro rules drop the cosebis and BB realisation evidence inputs accordingly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions The BB-covariance n(z)-independence check (renamed from bb_covariance_blind_independence: rule, script, tapestry outputs) takes its realisation labels from config fiducial.nz_realisations, the first as the reference and every other compared against it; figure markers, evidence keys (<label>_to_<reference>, plus reference_realisation) and summary maxima follow the configured set rather than a hardcoded A/B/C. The summary flag is cosebis_bb_nz_independent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Matches CosmologyValidation.get_redshift, which does not join the entry's subdir; base_version's docstring names what uses it (footprint, plotting style). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cailmdaley
added a commit
that referenced
this pull request
Sep 28, 2026
The branch's own change (ddeb904..e34b46a) is laid onto develop, which now carries #357, #358 and #359 as squashes, and each cut there holds: * workflow/common.py: no image_python/check_host_python and no APPTAINERENV_MATPLOTLIBRC. base_version is custody's base catalogue; variants share their base's footprint and plotting style. * workflow/README.md: develop's shorter output-roots paragraph, plus how a collaborator names their own COSMO_INFERENCE and how patch centres are drawn. * workflow/tests: no fake image and no container= launch argument; the image-Python, image-under-home, profile-bounds and image-sims launch tests stay cut. test_one_integration_grid stays and reads the forced listing; the toy keeps its covariances map for it. The candide paper dry-runs target bmodes' `paper` and write into a tree of their own with stand-in centres. The candide toy run no longer plants a user matplotlibrc. * test_cosmo_val: the pure-E/B test checks the jackknife against TreeCorr's, without a transform count. * papers/bmodes: the ξ± parts replace the text dumps in rules/figures.smk and bb_covariance_nz_independence.py; the deleted sweep scripts and cosebis_binning_comparison stay deleted. * No CONTRACTS files: the blind registry's layout lives in blinding.py's docstring, and custody.py's says it is stdlib-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Removes the legacy n(z) A/B/C "blind" axis. It has nothing to do with Smokescreen blinding (#253). Picking an n(z) now means picking a
cat_configentry, which already names its n(z) inshear.redshift_path.What changes
CosmologyValidationlosesblind=.get_redshiftreads the entry'sshear.redshift_pathas written.BLINDS,FIDUCIAL["blind"],harmonic.fiducial.blind, the pseudo-Cl/covariance/inference{blind}wildcard, and--blindon the pseudo-Cl scripts.build_redshift_pathis replaced bycatalogue_entry(version)andredshift_path(version).SP_v1.4.6.3_{A,B,C}are copies ofSP_v1.4.6.3that differ only in their n(z): same mask,cov_thand paths.papers/bmodescompares them throughfiducial.nz_realisations.nz.dndz.pathis a{pipeline}template. It points to the same file as before.papers/bmodespaper macros:pte_jointthatpure_eb_data_vectorwrites. They were never emitted, because the script readpte_joint_min, which nothing writes.bb_covariance_blind_independencebecomesbb_covariance_nz_independence. It takes its realisations fromnz_realisations, and the first entry is the reference. For A/B/C the figure and theB_to_A/C_to_Aevidence are unchanged.redshift_path(version)returns the entry'sshear.redshift_pathas written, the same wayget_redshiftreads it.Result-affecting config changes
SP_v1.4.8,SP_v1.4.11.3,SP_v1.4.11.3_ecut07andSP_v1.4.11.2now read the n(z) their CosmoCov covariances were built with (nz_SP_v1.4.8_A,nz_SP_v1.4.6_A), notdndz_SP_A.txt. Their harmonic products (pseudo-Cℓ, theory) shift. Their covariances do not change.SP_v1.4.6.3path is unchanged, in both configuration and harmonic space.For users: existing products need renaming on disk to avoid recomputing them.
blind=A/_A_token is dropped:pseudo_cl_{v}_blind=A_powspace_nbins=32.saccbecomespseudo_cl_{v}_powspace_nbins=32.sacc, andcovariance_{v}_A_g_…becomescovariance_{v}_g_….covariance_SP_v1.4.6.3_leak_corr_B_g_…becomescovariance_SP_v1.4.6.3_B_leak_corr_g_…. The same goes for…_leak_corr_B_pure_eb_*andpseudo_cl_cov_SP_v1.4.6.3_leak_corr_blind=B_….Verified on candide at
d887c936:workflow/tests: 7 passed, 1 skipped (the SLURM smoke test runs only from a login node), including dry-runs of the realpapers/cosmo_valandpapers/bmodesDAGs.— Claude (Opus) on behalf of Cail.
🤖 Generated with Claude Code