Tracking issue for the ESS side of sciline ADR 0003, Replace map/reduce with stages composed outside the graph, proposed in scipp/sciline#245. The rollout plan in the design document has the file-level sites for every item below, from a survey of the monorepo and esslivedata on 2026-09-11. Links point at the sciline branch until the ADR PR merges. Nothing here starts before the ADR is accepted and the additive sciline release is out.
In short: a Stage is the part of a pipeline from input keys to output keys with the static part held; an Aggregation is two stages with an accumulator per accumulation key between them. Each package returns its own object in place of a map/reduced pipeline, holding the pipeline, its aggregations, and the contributions by member.
ess.reduce, additive
Reduction packages, one PR each, in this order
Every package also drops visualize(compact=) from its notebooks in its own PR. constraints= (essreduce nexus workflows, offspec, amor) stays until the breaking sciline release.
esslivedata
Then
Tracking issue for the ESS side of sciline ADR 0003, Replace map/reduce with stages composed outside the graph, proposed in scipp/sciline#245. The rollout plan in the design document has the file-level sites for every item below, from a survey of the monorepo and esslivedata on 2026-09-11. Links point at the sciline branch until the ADR PR merges. Nothing here starts before the ADR is accepted and the additive sciline release is out.
In short: a
Stageis the part of a pipeline from input keys to output keys with the static part held; anAggregationis two stages with an accumulator per accumulation key between them. Each package returns its own object in place of a map/reduced pipeline, holding the pipeline, its aggregations, and the contributions by member.ess.reduce, additive
maybe_histmoves out ofAccumulator.pushinto the subclasses that histogram; aForwarder; a test that every accumulator satisfiessciline.Accumulator.StreamProcessorrewritten as a driver over three stages, a forwarder, and accumulators, keeping its interface, against the streaming, visualize, and accumulator tests. Needs the sciline follow-up (provide, reporter, visualize support).assign_parameter_valuesandparameter_mappersreplaced by the package-object protocol, with or after esssans.docs/user-guide/polarization/zoom.ipynb(usesget_mapped_node_namesandwith_sample_runs) migrates with esssans.Reduction packages, one PR each, in this order
with_sample_runs/with_background_runsbecome one aggregation per run type with a shared finalize stage held by a package object;with_pixel_mask_filenamesbecomes aPixelMaskFilenameslist parameter and two providers;with_banksbecomescompute_members;ZoomTransmissionFractionWorkflow;parameter_mappersregistrations; LoKI and zoom notebooks; tests usingcompute_mapped. Sets the package-object pattern.with_pixel_mask_filenamesbecomes a list parameter and one provider and loses the empty-list cyclebane workaround. All 22 test call sites pass[], so add one test with a mask file. The two DREAM advanced-notebook tables (one with two columns) become an aggregation.NeXusDatadepends on the run, so the bank aggregation sits inside per-run work when runs are members; either the package object owns a per-run bank aggregation or aDetectorNameslist parameter with a looping provider.compute_mappedin one test and one notebook becomescompute_members.with_filenamesbecomes an aggregation with up to seven accumulation keys and loses thetry/exceptaround each reduce;BatchProcessor.computeloses itscompute_mappedfallback;batch_processorenters the aggregation for a list-valuedFilename[SampleRun]; the GUI folds; amor and estia notebooks; tests.mcstas_workflow.ipynbimportscyclebane.graphdirectly and must stop.visualize(compact=)in two notebooks.Every package also drops
visualize(compact=)from its notebooks in its own PR.constraints=(essreduce nexus workflows, offspec, amor) stays until the breaking sciline release.esslivedata
config/instruments/bifrost/factories.pysits in the static part of the streaming pipeline; it becomesAggregation(...).compute(...)with the result set as a parameter before theStreamProcessoris built. Consumes the rewrittenStreamProcessorthrough the essreduce bump.cyclebane>=26.9.0pin once sciline drops cyclebane.Then
constraints=in the same bump.stages.mdon brancharchitecture-sketch, readingFoldasAggregationand "accumulation point" as accumulation key.