DMSC Integration Testing

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

Test: nexusfiles-scipp|bifrost|can_compute_wavelength|monitor_normalization

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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

View job log here


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

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

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

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

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

h5py/h5o.pyx:255: KeyError

During handling of the above exception, another exception occurred:

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

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

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

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

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

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