DMSC Integration Testing

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

Test: nexusfiles-scipp|bifrost|can_compute_wavelength|monitor_normalization

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f3984676c30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f393c39d0a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022378.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f3984676c30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fb6182d2c30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fb5f4249220>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022248.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fb6182d2c30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fc9981bb890>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fc9840bf860>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022118.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fc9981bb890>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7efee4642f00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7efeda366fc0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021978.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7efee4642f00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f646816dee0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f6468777920>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021834.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f646816dee0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f0b3df6e810>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0b9a715d60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021704.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f0b3df6e810>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fa3d8241130>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fa3e075c170>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021554.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fa3d8241130>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f5aa01d4470>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f5a99e23050>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021414.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f5aa01d4470>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f401830edb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f40185c34d0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021274.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f401830edb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f072c772000>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0774101370>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021124.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f072c772000>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f3712fcccb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f36e8530290>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020984.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f3712fcccb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7faee06920f0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7faee0613200>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020704.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7faee06920f0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f6ba0c09160>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f6b7cb0eb10>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020564.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f6ba0c09160>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f5c2a6f6fc0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f5c08349a30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020418.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f5c2a6f6fc0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fa1cc12f8f0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fa1c276ed50>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020268.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fa1cc12f8f0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f7acc213e00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f7aebcf7620>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f7acc213e00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fed5c25a540>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fed8b829220>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fed5c25a540>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fd0443a4bc0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fd0447100e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020118.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fd0443a4bc0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f5e84342270>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f5e9c2bef00>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019975.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f5e84342270>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f00983616a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0098189340>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019808.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f00983616a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f66402c3fe0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f6674914e90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f66402c3fe0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f5fac39aab0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f5fade4d280>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f5fac39aab0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fbfe5b65bb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fc010044800>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019376.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fbfe5b65bb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f0f5c5ea360>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0f5cbf7920>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019230.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f0f5c5ea360>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f1764273e00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f1769b69a60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019099.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f1764273e00>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fd7dc233500>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fd80c2ced50>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018959.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fd7dc233500>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fc3d5f83710>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fc3e16398e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018819.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fc3d5f83710>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f7c199cbb60>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f7bf870a0f0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018679.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f7c199cbb60>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f0411965af0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f03e83b2f00>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f0411965af0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f048054b890>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f04b5e11a90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f048054b890>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fcd8228e2a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fcd7713a870>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fcd8228e2a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f3bb47f9a30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f3bcd91a930>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018255.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f3bb47f9a30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f08656e4200>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0865157140>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018115.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f08656e4200>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
In provider ess.reduce.nexus.workflow.load_nexus_component(
    location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f1b786b3fb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f1b4412c410>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017985.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/_provider.py:145: in __call__
    return self._func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f1b786b3fb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'
E           In provider ess.reduce.nexus.workflow.load_nexus_component(
E               location: ess.reduce.nexus.types.NeXusComponentLocationSpec[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.NormalizationMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.NormalizationMonitor, ess.reduce.nexus.types.SampleRun]

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f940d9179e0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f940f57a330>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017748.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f940d9179e0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f29a85379e0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:407: in __getitem__
    return self._get(name)
           ^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:421: in _get
    oid = h5o.open(self.id, self._e(name), lapl=lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:54: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:55: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f29d1e9c230>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017660.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f29a85379e0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fb5e4c10b30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fb5e4a1f920>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017550.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fb5e4c10b30>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f3d0042e9c0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f3cf46a0c20>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017400.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f3d0042e9c0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f66ce209160>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f66c6199df0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017260.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f66ce209160>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f34a7b2ac60>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f34b8c76c30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017120.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f34a7b2ac60>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f6216f23290>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f62201ecad0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016980.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f6216f23290>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f0bc41bb7a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0c0a7dea80>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016850.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f0bc41bb7a0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f8bae0b5340>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f8b99432450>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016700.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f8bae0b5340>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fed641ca9c0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fecb5ff5f70>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016560.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fed641ca9c0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f49563e2030>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f4941c02990>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016420.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f49563e2030>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7f3fd8217cb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f3fe410c500>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016280.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7f3fd8217cb0>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fec3d9e8290>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fec12a77440>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016140.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fec3d9e8290>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:331: UserWarning
Full output
parent = <scippnexus.base.Group object at 0x7fba58154740>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
>               transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )

.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:319: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/nxtransformations.py:296: in _locate_depends_on_target
    target = file[target_path]
             ^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/h5py/_hl/group.py:360: in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
h5py/_objects.pyx:56: in h5py._objects.with_phil.wrapper
    ???
h5py/_objects.pyx:57: in h5py._objects.with_phil.wrapper
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   KeyError: 'Unable to synchronously open object (component not found)'

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fba181e6840>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016000.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor

    @pytest.mark.parametrize(
        "monitor_type",
        [
            ElasticMonitor,
            NormalizationMonitor,
            PSCMonitor,
            OverlapMonitor,
        ],
        ids=["elastic", "normalization", "psc", "overlap"],
    )
    def test_can_compute_wavelength__monitor_(
        workflow: sciline.Pipeline, coda_nexus_file_path: Path, monitor_type: type
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
        workflow[LookupTableFilename] = lookup_table_simulation()
>       result = workflow.compute(WavelengthMonitor[SampleRun, monitor_type])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_reduction_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/sciline/pipeline.py:191: in compute
    return self.get(tp, **kwargs).compute(reporter=reporter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/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-bifrost/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-bifrost/lib/python3.12/site-packages/dask/threaded.py:115: in get
    results = get_async(
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:547: in get_async
    raise_exception(exc, tb)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:351: in reraise
    raise exc
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/local.py:256: in execute_task
    result = task(data)
             ^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/_task_spec.py:768: in __call__
    return self.func(*new_argspec)
           ^^^^^^^^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/dask/utils.py:81: in apply
    return func(*args)
           ^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/workflow.py:242: in load_nexus_component
    nexus.load_component(location, nx_class=nx_class, definitions=definitions)
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/ess/reduce/nexus/_nexus_loader.py:105: in load_component
    loaded = cast(sc.DataGroup, group[selection])
                                ^^^^^^^^^^^^^^^^
.tox/nexusfiles-scipp-bifrost/lib/python3.12/site-packages/scippnexus/base.py:399: in __getitem__
    if (chain := parse_depends_on_chain(self, dg['depends_on'])) is not None:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

parent = <scippnexus.base.Group object at 0x7fba58154740>
depends_on = DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r')

    def parse_depends_on_chain(
        parent: Field | Group, depends_on: DependsOn
    ) -> TransformationChain | None:
        """Follow a depends_on chain and return the transformations."""
        chain = TransformationChain(depends_on.parent, depends_on.value)
        # Use raw h5py objects to follow the chain because that avoids constructing
        # expensive intermediate snx.Group objects.
        file = parent.underlying.file
        visited = [depends_on.absolute_path()]
        try:
            while not depends_on.is_terminal:
                transform, base = _locate_depends_on_target(
                    file, depends_on, parent.definitions
                )
                depends_on = DependsOn(parent=base, value=transform.attrs['depends_on'])
                chain.transformations[transform.name] = transform[()]
                if depends_on.absolute_path() in visited:
                    raise ValueError(
                        'Circular depends_on chain detected: '
                        f'{[*visited, depends_on.absolute_path()]}'
                    )
                visited.append(depends_on.absolute_path())
        except KeyError as e:
>           warnings.warn(
                UserWarning(
                    f'depends_on chain {depends_on} references missing node {e}'.replace(
                        '\n', ''
                    )
                ),
                stacklevel=2,
            )
E           UserWarning: depends_on chain DependsOn(parent='/entry/instrument/normalization_monitor', value='/entry/instrument/normalization_monitor/transformations/normalization_monitor_t0_r') references missing node 'Unable to synchronously open object (component not found)'

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