DMSC Integration Testing

Last updated: September 25, 2026 08:04:50

Test: nexusfiles-scipp|bifrost|bifrost_read_monitor_data|NormalizationMonitor

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 0x7f39847da2a0>
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 0x7f39994ba660>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022378.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f399d491940>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f39847da2a0>
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 0x7fc22870f1d0>
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 0x7fc228bc9640>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022308.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fc260f45a80>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fc22870f1d0>
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 0x7fb6183e3e90>
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 0x7fb624663bf0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022248.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fb638b45940>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fb6183e3e90>
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 0x7f0aac1be990>
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 0x7f0a75d506b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022208.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f0ab2339a80>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f0aac1be990>
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 0x7fdcd87c58b0>
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 0x7fdd08492f30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022208.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fdd1604da80>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fdcd87c58b0>
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 0x7f832c662690>
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 0x7f833633e930>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022198.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f833a1f9940>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f832c662690>
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 0x7fc9c3e019a0>
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 0x7fc9907ec770>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022118.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fc9c5a0db20>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fc9c3e019a0>
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 0x7f19c8117980>
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 0x7f19d825a300>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022068.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f1a0cf75bc0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f19c8117980>
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 0x7f25bc072540>
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 0x7f25f194ba10>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022068.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f25f3451bc0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f25bc072540>
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 0x7f7f81c8de50>
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 0x7f7f77d0d9d0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022068.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f7f84011a80>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f7f81c8de50>
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 0x7ff41e4f3860>
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 0x7ff41e3a1ca0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022038.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7ff41ff69b20>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7ff41e4f3860>
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 0x7f7dace5f4d0>
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 0x7f7dd8b30830>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022038.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f7dda729620>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f7dace5f4d0>
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 0x7f63c407c0e0>
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 0x7f63c40e95e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022038.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f63fc179620>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f63c407c0e0>
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 0x7f5b14160ec0>
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 0x7f5b047444a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022028.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5b6b4a9760>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f5b14160ec0>
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 0x7f5897b19c70>
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 0x7f5897d13d10>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022028.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f58a3afd760>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f5897b19c70>
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 0x7f70d1c7b1d0>
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 0x7f708405d070>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022028.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f70d3455760>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f70d1c7b1d0>
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 0x7efee49ab1d0>
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 0x7efee46a6630>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021978.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7efee60f96c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7efee49ab1d0>
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 0x7fe0d125de80>
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 0x7fe0d1739190>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021904.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fe0d4b896c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:98: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fe0d125de80>
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 0x7ff49256fb00>
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 0x7ff4443cd8b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021904.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7ff493ebd6c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7ff49256fb00>
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 0x7fc8997eb0b0>
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 0x7fc8a41d01d0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021904.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fc8e34916c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fc8997eb0b0>
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 0x7f64182cbd40>
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 0x7f642c356a50>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021834.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f64a5731580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f64182cbd40>
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 0x7f0b92b9e3c0>
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 0x7f0b3df103e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021704.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f0b9e439580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f0b92b9e3c0>
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 0x7fa474285a30>
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 0x7fa434000080>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021554.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fa4757396c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fa474285a30>
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 0x7fe16c01d850>
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 0x7fe1942626f0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021514.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fe1a36356c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fe16c01d850>
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 0x7f5a601bc7a0>
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 0x7f5a6c7dfef0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021414.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5aa5d456c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f5a601bc7a0>
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 0x7f402413ebd0>
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 0x7f4024387d10>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021274.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f40776bd580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f402413ebd0>
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 0x7f07002a81a0>
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 0x7f073816fb30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021124.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f077bebd580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f07002a81a0>
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 0x7f36e97077d0>
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 0x7f3711ca2780>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020984.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f371505d6c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f36e97077d0>
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 0x7f89a1c1f860>
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 0x7f89b870ad50>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020914.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f8a147bd6c0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f89a1c1f860>
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 0x7f82f863e270>
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 0x7f830472f740>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020894.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f83692c1580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f82f863e270>
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 0x7f57dc1a9010>
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 0x7f57e9d68ad0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020894.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f57eb4f5580>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f57dc1a9010>
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 0x7f8626e8a7e0>
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 0x7f86111a8980>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020894.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f8633267920>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f8626e8a7e0>
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 0x7faf0c11ff50>
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 0x7faf141371d0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020704.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7faf22943920>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7faf0c11ff50>
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 0x7f6b7c1d9130>
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 0x7f6b7cb67410>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020564.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f6ba2fc77e0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f6b7c1d9130>
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 0x7f5c14220830>
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 0x7f5c2d4a35c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020418.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5c2f07b7e0>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f5c14220830>
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 0x7fa1e1ed04d0>
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 0x7fa1e4782c60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020268.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fa1e4a19800>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fa1e1ed04d0>
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 0x7fd932e82480>
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 0x7fd9183552e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020208.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7fd936021760>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7fd932e82480>
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 0x7f7ad87e2b40>
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 0x7f7ae90a05f0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f7aef2f9760>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f7ad87e2b40>
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 0x7f24bd2333b0>
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 0x7f24bd045a30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f24bfd25800>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f24bd2333b0>
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 0x7f3adc266120>
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 0x7f3b26803c50>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f3b27071800>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f3adc266120>
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 0x7f5c486a7470>
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 0x7f5c456b5a90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.NormalizationMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5c48a2d800>

    @pytest.mark.parametrize(
        "monitor_type", [ElasticMonitor, NormalizationMonitor, PSCMonitor, OverlapMonitor]
    )
    def test_bifrost_read_monitor_data(
        workflow: sciline.Pipeline,
        coda_nexus_file_path: Path,
        monitor_type: type,
        check_monitor_data: Callable,
    ) -> None:
        workflow[Filename[SampleRun]] = coda_nexus_file_path
>       monitor = workflow.compute(RawMonitor[SampleRun, monitor_type])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/nexusfiles-scipp/bifrost/bifrost_load_nexus_test.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.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 0x7f5c486a7470>
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