DMSC Integration Testing

Last updated: September 25, 2026 08:02:48

Test: nexusfiles-scipp|odin|odin_read_choppers_to_disk_choppers|t0

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f814b68f7a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00022385.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f81ab92fec0>
check_disk_chopper = <function _check_disk_chopper at 0x7f8153b95620>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:30: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f7a901aa690>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00022255.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f7aec713ec0>
check_disk_chopper = <function _check_disk_chopper at 0x7f7a948f9620>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:30: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f00621e0410>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00022115.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f00659b1580>
check_disk_chopper = <function _check_disk_chopper at 0x7f0064059800>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f7ba1378470>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021975.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f7c0c5f6a20>
check_disk_chopper = <function _check_disk_chopper at 0x7f7bba40d3a0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f3c620ef260>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021701.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f3cb5fdea20>
check_disk_chopper = <function _check_disk_chopper at 0x7f3c6376d260>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f663819a840>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021561.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f66983faa20>
check_disk_chopper = <function _check_disk_chopper at 0x7f6645c1d260>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f4360328ec0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021411.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f43b99faa20>
check_disk_chopper = <function _check_disk_chopper at 0x7f43673a53a0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f08144815e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021271.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f08677f6a20>
check_disk_chopper = <function _check_disk_chopper at 0x7f0815a113a0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f31c5b22450>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00021131.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f32191f2a20>
check_disk_chopper = <function _check_disk_chopper at 0x7f31c68993a0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        choppers = workflow.compute(RawChoppers[SampleRun])
    
>       disk_choppers = to_disk_choppers({chopper_name: choppers[chopper_name]})
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/nexusfiles-scipp/conftest.py:89: in _to_disk_choppers
    key: DiskChopper.from_nexus(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:352: in from_nexus
    frequency = _get_0d_variable(chopper, 'rotation_speed_setpoint')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dg = {'beam_position': <scipp.Variable> ()    float64            [deg]  0, 'type': <DiskChopperType.single: 'Chopper type s...             [m]  (0, 0, -46.9), 'transform': <scipp.Variable> ()  translation3              [m]  (-0, -0, -46.9), ...}
name = 'rotation_speed_setpoint'

    def _get_0d_variable(
        dg: Mapping[str, sc.Variable | sc.DataArray], name: str
    ) -> sc.Variable:
        if (val := dg.get(name)) is None:
            raise ValueError(f"Chopper field '{name}' is missing")
    
        msg = (
            "Chopper field '{name}' must be a scalar variable, {got}. "
            "See the chopper user-guide for more information: "
            "https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html"
        )
    
        if isinstance(val, sc.DataArray):
            val = val.data
        if not isinstance(val, sc.Variable):
            raise TypeError(msg.format(name=name, got=f'got a {type(val)}'))
        val = val.squeeze()
        if val.ndim != 0:
>           raise sc.DimensionError(
                msg.format(name=name, got=f'got a {val.ndim}d variable')
            )
E           scipp._scipp.core.DimensionError: Chopper field 'rotation_speed_setpoint' must be a scalar variable, got a 1d variable. See the chopper user-guide for more information: https://scipp.github.io/scippneutron/user-guide/chopper/processing-nexus-choppers.html

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippneutron/chopper/disk_chopper.py:686: DimensionError

View job log here


UserWarning: depends_on chain {x} contains empty time-series, 
In provider ess.reduce.nexus.workflow.parse_raw_choppers(
    choppers: ess.reduce.nexus.types.AllNeXusComponents[scippnexus.nexus_classes.NXdisk_chopper, ess.reduce.nexus.types.SampleRun],
) -> ess.reduce.nexus.types.RawChoppers[ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f83a1bed8b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00020415.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f83ce30a200>
check_disk_chopper = <function _check_disk_chopper at 0x7f83a411b4c0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       choppers = workflow.compute(RawChoppers[SampleRun])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:176: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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:140: 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:115: in get
    results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:557: in parse_raw_choppers
    choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:267: 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:559: in <lambda>
    nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:161: 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 = [<scipp.Variable> ()  translation3              [m]  (0, 0, 6.775), <scipp.DataArray>
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, 
E           In provider ess.reduce.nexus.workflow.parse_raw_choppers(
E               choppers: ess.reduce.nexus.types.AllNeXusComponents[scippnexus.nexus_classes.NXdisk_chopper, ess.reduce.nexus.types.SampleRun],
E           ) -> ess.reduce.nexus.types.RawChoppers[ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain {x} contains empty time-series, 
In provider ess.reduce.nexus.workflow.parse_raw_choppers(
    choppers: ess.reduce.nexus.types.AllNeXusComponents[scippnexus.nexus_classes.NXdisk_chopper, ess.reduce.nexus.types.SampleRun],
) -> ess.reduce.nexus.types.RawChoppers[ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scippnexus/nxtransformations.py:180: UserWarning
Full output
chopper_name = 't0'
workflow = <sciline.pipeline.Pipeline object at 0x7f4fc30c5790>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_odin_999999_00020275.hdf')
to_disk_choppers = <function _to_disk_choppers at 0x7f4fef506200>
check_disk_chopper = <function _check_disk_chopper at 0x7f4fc3d294e0>

    @pytest.mark.parametrize(
        "chopper_name",
        ["bpc1", "bpc2", "foc1", "foc2", "foc3", "foc4", "foc5", "t0", "wfm1", "wfm2"],
    )
    def test_odin_read_choppers_to_disk_choppers(
        chopper_name: str,
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        to_disk_choppers: Callable,
        check_disk_chopper: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       choppers = workflow.compute(RawChoppers[SampleRun])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/odin/odin_load_nexus_test.py:176: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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:140: 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:115: in get
    results = get_async(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:557: in parse_raw_choppers
    choppers.apply(
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/scipp/core/data_group.py:267: 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:559: in <lambda>
    nexus.compute_component_position(chopper)
.tox/nexusfiles-scipp-odin/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:161: 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 = [<scipp.Variable> ()  translation3              [m]  (0, 0, 6.775), <scipp.DataArray>
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, 
E           In provider ess.reduce.nexus.workflow.parse_raw_choppers(
E               choppers: ess.reduce.nexus.types.AllNeXusComponents[scippnexus.nexus_classes.NXdisk_chopper, ess.reduce.nexus.types.SampleRun],
E           ) -> ess.reduce.nexus.types.RawChoppers[ess.reduce.nexus.types.SampleRun]

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