DMSC Integration Testing

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

Test: nexusfiles-scipp|bifrost|can_compute_wavelength|monitor_elastic

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 0x7f39481d8710>
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 0x7f39543c69c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022378.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f39481d8710>
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 0x7fb6244b5940>
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 0x7fb635163bc0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022248.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fb6244b5940>
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 0x7fc99075d7c0>
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 0x7fc9c1e1ce60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00022118.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fc99075d7c0>
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 0x7efe943f38f0>
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 0x7efe940f4ef0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021978.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7efe943f38f0>
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 0x7f64a2676cf0>
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 0x7f64a26749b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021834.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f64a2676cf0>
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 0x7f0b9b28ef30>
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 0x7f0b9aedf470>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021704.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f0b9b28ef30>
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 0x7fa3e073dc70>
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 0x7fa47195d4c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021554.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fa3e073dc70>
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 0x7f5a601866f0>
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 0x7f5a601d0590>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021414.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f5a601866f0>
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 0x7f401856a2a0>
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 0x7f4024256ff0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021274.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f401856a2a0>
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 0x7f077a2dcec0>
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 0x7f072415dc40>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00021124.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f077a2dcec0>
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 0x7f36e038c1a0>
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 0x7f3713f914c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020984.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f36e038c1a0>
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 0x7faeec4f9a30>
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 0x7faf20a8e9c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020704.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7faeec4f9a30>
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 0x7f6b6c0e0200>
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 0x7f6b6c09d550>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020564.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f6b6c0e0200>
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 0x7f5c083aade0>
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 0x7f5c0833af30>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020418.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f5c083aade0>
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 0x7fa1c273e480>
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 0x7fa1cc169fd0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020268.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fa1c273e480>
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 0x7f7acc7b1fa0>
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 0x7f7acdb3da60>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f7acc7b1fa0>
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 0x7fed8b7dae70>
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 0x7fed50599d90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020195.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fed8b7dae70>
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 0x7fd07423bbf0>
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 0x7fd0503484a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00020118.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fd07423bbf0>
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 0x7f5e9c2ef290>
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 0x7f5ea83a2ae0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019975.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f5e9c2ef290>
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 0x7f00afbe5e20>
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 0x7f00983d01a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019808.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f00afbe5e20>
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 0x7f66748be120>
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 0x7f66481fd8b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f66748be120>
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 0x7f5f91142330>
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 0x7f5fad3314c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019446.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f5f91142330>
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 0x7fc010046db0>
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 0x7fc00f41c830>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019376.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fc010046db0>
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 0x7f0f18341160>
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 0x7f0f18211be0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019230.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f0f18341160>
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 0x7f175f20d910>
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 0x7f1769b649b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00019099.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f175f20d910>
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 0x7fd80c3ac8c0>
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 0x7fd7dc726390>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018959.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fd80c3ac8c0>
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 0x7fc3e1620bc0>
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 0x7fc447865070>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018819.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fc3e1620bc0>
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 0x7f7bf874f9e0>
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 0x7f7c04259d90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018679.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f7bf874f9e0>
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 0x7f041205b740>
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 0x7f0411a501a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f041205b740>
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 0x7f04902ebbf0>
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 0x7f04981a1dc0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f04902ebbf0>
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 0x7fcd8089fb90>
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 0x7fcd7c3cf3b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018325.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fcd8089fb90>
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 0x7f3bcd91bfe0>
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 0x7f3c019832c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018255.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f3bcd91bfe0>
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 0x7f08658f7560>
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 0x7f0863edd5b0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00018115.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f08658f7560>
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 0x7f1b4412d8e0>
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 0x7f1b77d83b90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017985.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f1b4412d8e0>
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 0x7f93d80a2840>
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 0x7f93e5f0e690>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017748.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f93d80a2840>
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 0x7f29cdc54890>
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 0x7f29c7f77020>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017660.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f29cdc54890>
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 0x7fb5e47894c0>
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 0x7fb5e4847ce0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017550.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fb5e47894c0>
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 0x7f3d0056f9e0>
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 0x7f3d3e9c0c20>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017400.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f3d0056f9e0>
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 0x7f66885ef380>
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 0x7f66ce57b440>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017260.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f66885ef380>
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 0x7f34ba9cbb00>
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 0x7f34ba735130>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00017120.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f34ba9cbb00>
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 0x7f624343ad20>
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 0x7f62437434a0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016980.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f624343ad20>
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 0x7f0bb84d8470>
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 0x7f0bac72c680>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016850.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f0bb84d8470>
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 0x7f8bae3dcec0>
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 0x7f8bae7bf680>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016700.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f8bae3dcec0>
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 0x7fed2c266330>
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 0x7fed6415d7c0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016560.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fed2c266330>
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 0x7f493b21c6e0>
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 0x7f4941b7aab0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016420.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f493b21c6e0>
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 0x7f4004e055e0>
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 0x7f400eaa7da0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016280.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7f4004e055e0>
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 0x7fec11fb6a80>
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 0x7fec11e8fe90>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016140.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fec11fb6a80>
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 0x7fba0c42d0d0>
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 0x7fba50244ef0>
coda_nexus_file_path = PosixPath('/ess/data/coda/999999/raw/coda_bifrost_999999_00016000.hdf')
monitor_type = ess.spectroscopy.types.ElasticMonitor

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

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

parent = <scippnexus.base.Group object at 0x7fba0c42d0d0>
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