DMSC Integration Testing

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

Test: nexusfiles-scipp|bifrost|bifrost_read_monitor_data|ElasticMonitor

View job log here


UserWarning: depends_on chain DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f399941fe60>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f39847daf90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022378.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f399941fe60>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fb6245cf050>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fb630178ef0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022248.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7fb6245cf050>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fc9847ed460>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fc9b83eccb0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022118.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7fc9847ed460>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7efee4609b50>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7efeda376270>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021978.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7efee4609b50>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f642c3a7d70>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f644c79bb60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021834.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f642c3a7d70>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f0b503ee8a0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f0b926bb590>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021704.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f0b503ee8a0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fa4340d5df0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fa4714a26c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021554.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7fa4340d5df0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f5a6c7dd0a0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f5a601b3ce0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021414.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f5a6c7dd0a0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f4075902600>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f40711ea450>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021274.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f4075902600>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f071054fcb0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f072c74a0c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021124.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f071054fcb0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f36f805ed20>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f36e04d2180>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020984.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f36f805ed20>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7faf1ed8f800>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7faeec1de180>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020704.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7faf1ed8f800>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f6b6c76a3c0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f6b97cd43b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020564.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f6b6c76a3c0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f5c14223920>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f5c0846bcb0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020418.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f5c14223920>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fa1e1fd9a30>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fa1e1417530>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020268.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7fa1e1fd9a30>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f7ae90a03e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f7acc78fa70>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
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 0x7f7ae90a03e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fed5c7879e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fed5c4584a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fed91a35760>

    @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 0x7fed5c7879e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fd044258dd0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fd044258230>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020118.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fd07a22d760>

    @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 0x7fd044258dd0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f5ec027dcd0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f5ec09fb500>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019975.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5edbf25760>

    @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 0x7f5ec027dcd0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f00bac1e420>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f009875f440>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019808.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f00be0f5760>

    @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 0x7f00bac1e420>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f66480c6750>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f667230c9b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f6677c39760>

    @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 0x7f66480c6750>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f5fb07cbfb0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f5fb0de6cc0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f5fb6439760>

    @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 0x7f5fb07cbfb0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fbfe6718830>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fbfe6718f80>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019376.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fc01302d760>

    @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 0x7fbfe6718830>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f0f68629e50>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f0f693a2480>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019230.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f0f6ba6d760>

    @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 0x7f0f68629e50>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f175c3e4b00>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f17379e7f80>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019099.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f176ccf9760>

    @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 0x7f175c3e4b00>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fd7ec0e8890>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fd8129de090>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018959.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fd815c3d760>

    @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 0x7fd7ec0e8890>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fc447998ec0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fc440943d10>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018819.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fc44aa79760>

    @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 0x7fc447998ec0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f7c047d4410>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f7c2010ade0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018679.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f7c2addd760>

    @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 0x7f7c047d4410>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f0411ccd760>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f040c3594c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f04150f9760>

    @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 0x7f0411ccd760>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f04c033de20>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f04bef63800>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f04c42e9760>

    @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 0x7f04c033de20>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7fcd77b172c0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7fcd82f41f40>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fcd85811760>

    @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 0x7fcd77b172c0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f3c044854f0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f3bfa4436b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018255.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f3c06b85760>

    @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 0x7f3c044854f0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f07fc6f4950>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f0863eebcb0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018115.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f0869031760>

    @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 0x7f07fc6f4950>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
    nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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 0x7f1b78c66e10>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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 0x7f1b7898c0e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017985.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f1b7bb29760>

    @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 0x7f1b78c66e10>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') 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.ElasticMonitor, ess.reduce.nexus.types.SampleRun],
E               nx_class: ess.reduce.nexus.types.NeXusClass[ess.spectroscopy.types.ElasticMonitor],
E           ) -> ess.reduce.nexus.types.NeXusComponent[ess.spectroscopy.types.ElasticMonitor, 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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

    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 0x7f940f5766f0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017748.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f9412779760>

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

parent = <scippnexus.base.Group object at 0x7f93e4fb8560>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

    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 0x7f29d22539b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017660.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f29d503d760>

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

parent = <scippnexus.base.Group object at 0x7f29786f34d0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fb5cf928ce0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017550.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fb5e795e8e0>

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

parent = <scippnexus.base.Group object at 0x7fb5e4a73650>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f3d2d5cab40>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017400.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f3d416268e0>

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

parent = <scippnexus.base.Group object at 0x7f3d141a64e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f66c613f4d0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017260.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f66d10268e0>

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

parent = <scippnexus.base.Group object at 0x7f66ce541040>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f34a7a7f5f0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017120.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f34bd62a8e0>

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

parent = <scippnexus.base.Group object at 0x7f34ba5c1820>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f623946f4a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016980.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f62463728e0>

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

parent = <scippnexus.base.Group object at 0x7f62386a5fd0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f0c38be0c80>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016850.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f0c0da1e8e0>

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

parent = <scippnexus.base.Group object at 0x7f0bf7d7ee40>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f8bae2ad070>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016700.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f8bb122e8e0>

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

parent = <scippnexus.base.Group object at 0x7f8badef8050>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fed66157890>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016560.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fed6883e8e0>

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

parent = <scippnexus.base.Group object at 0x7fed2428f6e0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f49564946e0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016420.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f495941e8e0>

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

parent = <scippnexus.base.Group object at 0x7f4941c244d0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7f3ff809c170>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016280.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7f4011d828e0>

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

parent = <scippnexus.base.Group object at 0x7f400ee59f40>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7febe4522ae0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016140.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fec409628e0>

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

parent = <scippnexus.base.Group object at 0x7fec11e943b0>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:257: KeyError

During handling of the above exception, another exception occurred:

workflow = <sciline.pipeline.Pipeline object at 0x7fba58099280>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016000.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor
check_monitor_data = <function _check_monitor_data at 0x7fba5e9168e0>

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

parent = <scippnexus.base.Group object at 0x7fba5c033e30>
depends_on = DependsOn(parent='/entry/instrument/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0')

    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/elastic_monitor', value='/entry/instrument/elastic_monitor/transformations/elastic_monitor_r0') references missing node 'Unable to synchronously open object (component not found)'

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