DMSC Integration Testing

Last updated: December 16, 2025 22:41:25

Test: nexusfiles-scipp|odin|odin_read_choppers|

None

None

None

None

None

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009993.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:42: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009853.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:42: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009713.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:42: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009573.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009426.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009286.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009146.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00009006.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:175:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008859.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for name, chopper in choppers.items():
> check_chopper(chopper, name=name)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:175:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])
name = 't0'

def _check_chopper(chopper: sc.DataGroup, name: str = "UNKNOWN") -> None:
assert "position" in chopper, f"Chopper '{name}' missing 'position'"
assert "rotation_speed" in chopper, f"Chopper '{name}' missing 'rotation_speed'"
> assert "rotation_speed_setpoint" in chopper, (
f"Chopper '{name}' missing 'rotation_speed_setpoint'"
)
E AssertionError: Chopper 't0' missing 'rotation_speed_setpoint'
E assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008712.hdf')
check_chopper =

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path, check_chopper: Callable
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for chopper in choppers.values():
> check_chopper(chopper)

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chopper = DataGroup(sizes={'dim_0': None}, keys=[
type: Chopper type single,
position: Variable({}),
transform: Vari... slits: 1,
time: Variable({'dim_0': 0}),
transformations: DataGroup(1, {}),
nexus_component_name: t0,
])

def _check_chopper(chopper: sc.DataGroup) -> None:
assert "position" in chopper
assert "rotation_speed" in chopper
> assert "rotation_speed_setpoint" in chopper
E AssertionError: assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dmsc_nightly/testing/nexusfiles/validation_fixtures.py:43: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008572.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for chopper in choppers.values():
assert "position" in chopper
assert "rotation_speed" in chopper
> assert "rotation_speed_setpoint" in chopper
E AssertionError: assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:159: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008432.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for chopper in choppers.values():
assert "position" in chopper
assert "rotation_speed" in chopper
> assert "rotation_speed_setpoint" in chopper
E AssertionError: assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:159: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008299.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
choppers = workflow.compute(RawChoppers[SampleRun])

assert len(choppers) == 10
for chopper in choppers.values():
assert "position" in chopper
assert "rotation_speed" in chopper
> assert "rotation_speed_setpoint" in chopper
E AssertionError: assert 'rotation_speed_setpoint' in DataGroup(sizes={'dim_0': None}, keys=[\n type: Chopper type single,\n position: Variable({}),\n transform: Variable({}),\n alarm_message: Variable({'dim_0': 0}),\n alarm_severity: Variable({'dim_0': 0}),\n alarm_time: Variable({'dim_0': 0}),\n connection_status: Variable({'dim_0': 0}),\n connection_status_time: Variable({'dim_0': 0}),\n delay: DataArray({}),\n depends_on: TransformationChain(parent='/entry/instrument/t0', value='/entry/instrument/t0/transformations/translation', transformations=DataGroup(sizes={}, keys=[\n /entry/instrument/t0/transformations/translation: Transform({}),\n])),\n radius: Variable({}),\n rotation_speed: DataArray({}),\n slit_edges: Variable({'dim_0': 2}),\n slit_height: Variable({}),\n slits: 1,\n time: Variable({'dim_0': 0}),\n transformations: DataGroup(1, {}),\n nexus_component_name: t0,\n])

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:159: AssertionError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008166.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:496: in
nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:159: in compute_component_position
return snx.compute_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:391: in compute_positions
return _with_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:442: in _with_positions
if (transform := chain.compute()) is not None:
^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:270: in compute
transform = combine_transformations([t.build() for t in chain])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chain = [ () translation3 [m] (0, 0, 6.775),
Dimensions: Sizes[time:0, ]
Coor... datetime64 [ns] (time) []
Data:
translation3 [m] (time) []

]

def combine_transformations(
chain: list[sc.DataArray | sc.Variable],
) -> sc.DataArray | sc.Variable:
"""
Take the product of a chain of transformations, handling potentially mismatching
time-dependence.

Time-dependent transformations are interpolated to a common time-coordinate.
"""
if any((x.sizes.get('time') == 0) for x in chain):
> warnings.warn(
UserWarning('depends_on chain {x} contains empty time-series, '),
stacklevel=2,
)
E UserWarning: depends_on chain {x} contains empty time-series,

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00008026.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:496: in
nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:159: in compute_component_position
return snx.compute_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:391: in compute_positions
return _with_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:442: in _with_positions
if (transform := chain.compute()) is not None:
^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:270: in compute
transform = combine_transformations([t.build() for t in chain])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chain = [ () translation3 [m] (0, 0, 6.775),
Dimensions: Sizes[time:0, ]
Coor... datetime64 [ns] (time) []
Data:
translation3 [m] (time) []

]

def combine_transformations(
chain: list[sc.DataArray | sc.Variable],
) -> sc.DataArray | sc.Variable:
"""
Take the product of a chain of transformations, handling potentially mismatching
time-dependence.

Time-dependent transformations are interpolated to a common time-coordinate.
"""
if any((x.sizes.get('time') == 0) for x in chain):
> warnings.warn(
UserWarning('depends_on chain {x} contains empty time-series, '),
stacklevel=2,
)
E UserWarning: depends_on chain {x} contains empty time-series,

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007886.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:496: in
nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:159: in compute_component_position
return snx.compute_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:391: in compute_positions
return _with_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:442: in _with_positions
if (transform := chain.compute()) is not None:
^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:270: in compute
transform = combine_transformations([t.build() for t in chain])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chain = [ () translation3 [m] (0, 0, 6.775),
Dimensions: Sizes[time:0, ]
Coor... datetime64 [ns] (time) []
Data:
translation3 [m] (time) []

]

def combine_transformations(
chain: list[sc.DataArray | sc.Variable],
) -> sc.DataArray | sc.Variable:
"""
Take the product of a chain of transformations, handling potentially mismatching
time-dependence.

Time-dependent transformations are interpolated to a common time-coordinate.
"""
if any((x.sizes.get('time') == 0) for x in chain):
> warnings.warn(
UserWarning('depends_on chain {x} contains empty time-series, '),
stacklevel=2,
)
E UserWarning: depends_on chain {x} contains empty time-series,

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007746.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:496: in
nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:159: in compute_component_position
return snx.compute_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:391: in compute_positions
return _with_positions(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:442: in _with_positions
if (transform := chain.compute()) is not None:
^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:270: in compute
transform = combine_transformations([t.build() for t in chain])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

chain = [ () translation3 [m] (0, 0, 6.775),
Dimensions: Sizes[time:0, ]
Coor... datetime64 [ns] (time) []
Data:
translation3 [m] (time) []

]

def combine_transformations(
chain: list[sc.DataArray | sc.Variable],
) -> sc.DataArray | sc.Variable:
"""
Take the product of a chain of transformations, handling potentially mismatching
time-dependence.

Time-dependent transformations are interpolated to a common time-coordinate.
"""
if any((x.sizes.get('time') == 0) for x in chain):
> warnings.warn(
UserWarning('depends_on chain {x} contains empty time-series, '),
stacklevel=2,
)
E UserWarning: depends_on chain {x} contains empty time-series,

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007613.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007473.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007333.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007193.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00007060.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006927.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006787.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006647.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006507.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006367.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006220.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00006080.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/odin_999999_00005940.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005789.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005657.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005524.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005384.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:494: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:495: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005244.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:489: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:490: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00005104.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:489: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:490: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004964.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:489: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:490: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004677.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004537.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004397.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004250.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00004110.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00003963.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError

workflow =
coda_nexus_file_path = PosixPath('/ess/data/coda/2025/999999/raw/odin_999999_00003891.hdf')

def test_odin_read_choppers(
workflow: sciline.Pipeline, coda_nexus_file_path: Path
) -> None:
workflow[Filename[SampleRun]] = coda_nexus_file_path
> choppers = workflow.compute(RawChoppers[SampleRun])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
return self.get(tp, **kwargs).compute(reporter=reporter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/task_graph.py:122: in compute
return self._scheduler.get(self._graph, [targets], reporter=reporter)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/scheduler.py:119: in get
return self._dask_get(dsk, list(map(_to_dask_key, keys)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/threaded.py:91: in get
results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:549: in get_async
raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:353: in reraise
raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:258: in execute_task
result = task(data)
^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:759: in __call__
return self.func(*new_argspec)
^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:80: in apply
return func(*args)
^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:528: in parse_disk_choppers
choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:268: in apply
return DataGroup({key: func(v, *args, **kwargs) for key, v in self.items()})
^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:529: in
lambda chopper: extract_chopper_from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:37: in extract_chopper_from_nexus
**{key: _parse_field(key, val) for key, val in chopper.items()},
^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:44: in _parse_field
return _parse_tdc(value)
^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/nexus_chopper.py:53: in _parse_tdc
return tdc["time"]
^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = DataGroup(sizes={'time': 0}, keys=[
value: DataArray({'time': 0}),
alarm: DataArray({'time': 0}),
connection_status: DataArray({'time': 0}),
])
name = 'time'

def __getitem__(self, name: Any) -> Any:
"""Return item of given name or index all items.

When ``name`` is a string, return the item of the given name. Otherwise, this
returns a new DataGroup, with items created by indexing the items in this
DataGroup. This may perform, e.g., Scipp's positional indexing, label-based
indexing, or advanced indexing on items that are scipp.Variable or
scipp.DataArray.

Label-based indexing is only possible when all items have a coordinate for the
indexed dimension.

Advanced indexing comprises integer-array indexing and boolean-variable
indexing. Unlike positional indexing, integer-array indexing works even when
the item shapes are inconsistent for the indexed dimensions, provided that all
items contain the maximal index in the integer array. Boolean-variable indexing
is only possible when the shape of all items is compatible with the boolean
variable.
"""
from .bins import Bins

if isinstance(name, str):
> return self._items[name]
^^^^^^^^^^^^^^^^^
E KeyError: 'time'

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:164: KeyError