Skip to content

v7.2.0

Choose a tag to compare

@michael-denyer michael-denyer released this 27 Jul 21:08
11169d0

Two refactors on the pipeline's internal orchestration. Both documented public
entry points are unchanged: gwas() and every CLI flag behave exactly as in
7.1.0, and output is byte-identical on mouse_hs1940.

One phenotype field on PipelineConfig (#141)

PipelineConfig carried phenotype_column and phenotype_columns for one
concept, and __post_init__ kept them in step by mutating itself. A reader had
to know that an empty list meant "unspecified" rather than "no columns", and
that assigning either field after construction desynchronised them.

# Before
PipelineConfig(bfile=..., phenotype_column=2)
# After
PipelineConfig(bfile=..., phenotype_columns=[2])

gwas(phenotype_column=2) is unchanged. It is a single-phenotype entry point, so
a scalar is the right parameter there, and it now maps to phenotype_columns=[2]
internally. The CLI's -n is unchanged.

An out-of-range column is now rejected when the config is built rather than
part-way through PipelineRunner.validate_inputs, and every index is checked
rather than just the first. Same ValueError, raised earlier.

pipeline.py split along its existing seams (#142)

1476 lines down to 1016. Four groups moved out whole:

Module What moved
pipeline_banner.py log_dataset_banner, log_pipeline_banner
pipeline_phenotype_loop.py run_phenotype_loop, the batch and streaming runner calls, PhenoLoopOutcome
pipeline_kinship.py compute_kinship, the -gk program
jamma.io.snp_list resolve_snp_list_file

PipelineRunner.compute_kinship() is now
jamma.pipeline_kinship.compute_kinship(config, mode). KinshipResult is still
importable from jamma.pipeline.

The 628-line execution group was deliberately left whole. _run_inner calls
thirteen siblings and everything under it is reachable only through it, so
cutting there would put one program across two files.

Versioning note

Three entries sit under Breaking in the changelog and this is still a minor
release. That is a deliberate departure from strict SemVer: all three breaks are
on internal orchestration surfaces that no documented usage touches, so a major
bump would cost every user a compatibility review for a change none of them can
observe.

Verification

Byte-identical output on mouse_hs1940 across -lmm 1/2/3/4, a two-phenotype run,
LOCO, and five -gk invocations. The four -lmm digests and the LOCO pve match
values held constant across roughly twenty prior releases and PRs.

Full CHANGELOG entry: https://github.com/michael-denyer/jamma/blob/master/CHANGELOG.md