DMSC Integration Testing

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

Test: codeshelf|odin|run_notebooks|odin-bragg-edge-reduction

View job log here


Test passed, nothing to report

View job log here


Test passed, nothing to report

View job log here


Test passed, nothing to report

View job log here


Test passed, nothing to report

View job log here


Test passed, nothing to report

View job log here


Test passed, nothing to report

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    415#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    390#x1B[39m     )
#x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-417/codeshelf/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7f106add9d00>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-417/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:131: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7f1069f36390>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': '1ee1a539-5836280aa7661641eb864783_1125005_27', 'msg_type': 'execute_reply', 'username': 'userna...4_6', 'msg_type': 'execute_request', 'username': 'username', 'session': 'a72504f8-22fab8bbd7bd1128088b7efc', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    415#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    390#x1B[39m     )
E           #x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    415#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    390#x1B[39m     )
#x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-406/codeshelf/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7f64158d1d00>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-406/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:128: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7f6414cf0650>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': '6a7697f9-22b983d15741cfb85071a48f_1082240_27', 'msg_type': 'execute_reply', 'username': 'userna...2_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '38742317-e09f5c0ec90e402dca40955a', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    415#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/3/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    390#x1B[39m     )
E           #x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    415#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    390#x1B[39m     )
#x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-395/codeshelf/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7f4a2e6f9d00>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-395/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:128: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7f4a2d5c6360>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': '58983d94-a696c99b8072bca96377145d_1040408_27', 'msg_type': 'execute_reply', 'username': 'userna...5_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '1b0d34e6-e34254f0d8ecf2610aa35599', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:788#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    786#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    787#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m788#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:617#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    613#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    614#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    615#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    616#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m617#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    618#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    619#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:413#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    407#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    408#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    409#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    410#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    411#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    412#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m413#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    414#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    415#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    385#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    386#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    388#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    389#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    390#x1B[39m     )
E           #x1B[32m    391#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    392#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    389#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    364#x1B[39m     )
#x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-383/codeshelf/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7fcb8a979d00>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-383/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:104: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7fcb89e2b380>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': '2731fb29-aa3d3bb580cbaad443747d0d_931674_31', 'msg_type': 'execute_reply', 'username': 'usernam...7_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '15e081ef-52f26dec769042a73518e8b0', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    389#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    364#x1B[39m     )
E           #x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    389#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    364#x1B[39m     )
#x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-372/codeshelf/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7fc8c72ddd00>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-372/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:104: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7fc8c64396d0>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': 'c9ecea1d-560554476987656bb7cc35f6_892416_31', 'msg_type': 'execute_reply', 'username': 'usernam...6_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '5af8d9c0-d5900f3c71cb69e406f454e0', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    389#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/6/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    364#x1B[39m     )
E           #x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    389#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    364#x1B[39m     )
#x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/home/gitlab-runner/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/.pytest_cache/codeshelf/repo/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7ff03e87a2a0>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-361/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:144: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7ff03e60aa80>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': 'c7a14f9a-38aff4a7e359d74b312a06ec_847944_31', 'msg_type': 'execute_reply', 'username': 'usernam...5_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '6561fb84-bff79149491de34354f47ab4', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    389#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/0/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    364#x1B[39m     )
E           #x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    389#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    364#x1B[39m     )
#x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/home/gitlab-runner/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/.pytest_cache/codeshelf/repo/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7f06cc1322a0>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-355/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:138: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7f06cbc49970>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': '4c3d6d4b-778dfa263b1d98768a5f83b5_808372_31', 'msg_type': 'execute_reply', 'username': 'usernam...9_6', 'msg_type': 'execute_request', 'username': 'username', 'session': 'b1cf7589-2c8b6b9556e899e80633a3c2', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    389#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/5/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    364#x1B[39m     )
E           #x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError

View job log here


nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
sample_wavs = wf.compute(WavelengthDetector[SampleRun])

sample_wavs.bins.concat().hist(wavelength=300).plot()
------------------


#x1B[31m---------------------------------------------------------------------------#x1B[39m
#x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
#x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
#x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
#x1B[32m      2#x1B[39m 
#x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
#x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
#x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
#x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
#x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
#x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
#x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
#x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
#x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
#x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
#x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
#x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
#x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
#x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
#x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
#x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
#x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
#x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
#x1B[32m    389#x1B[39m     }

#x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
#x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
#x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
#x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
#x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
#x1B[32m    364#x1B[39m     )
#x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
#x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:

#x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError
Full output
notebook = PosixPath('/home/gitlab-runner/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/.pytest_cache/codeshelf/repo/src/odin/notebooks/odin-bragg-edge-reduction.ipynb')
run_codeshelf_notebook = <function _run_codeshelf_notebook at 0x7ffb53e28220>
tmp_path = PosixPath('/tmp/pytest-of-gitlab-runner/pytest-348/test_run_notebooks_odin_bragg_0')

    def test_run_notebooks(
        notebook: Path, run_codeshelf_notebook: Callable, tmp_path: Path
    ):
>       run_codeshelf_notebook(notebook_path=notebook, run_path=tmp_path)

tests/codeshelf/codeshelf_test.py:10: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/codeshelf/conftest.py:138: in _run_codeshelf_notebook
    ep.preprocess(nb, {"metadata": {"path": run_path}})
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:103: in preprocess
    self.preprocess_cell(cell, resources, index)
.tox/codeshelf-odin/lib/python3.12/site-packages/nbconvert/preprocessors/execute.py:124: in preprocess_cell
    cell = self.execute_cell(cell, index, store_history=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/jupyter_core/utils/__init__.py:165: in wrapped
    return loop.run_until_complete(inner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/miniforge/lib/python3.12/asyncio/base_events.py:687: in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:1062: in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <nbconvert.preprocessors.execute.ExecutePreprocessor object at 0x7ffb53db5ac0>
cell = {'cell_type': 'code', 'execution_count': 5, 'id': '7', 'metadata': {'editable': True, 'slideshow': {'slide_type': ''},...e': 'sample_wavs = wf.compute(WavelengthDetector[SampleRun])\n\nsample_wavs.bins.concat().hist(wavelength=300).plot()'}
cell_index = 7
exec_reply = {'header': {'msg_id': 'e2602f41-eb0e09f8ae0504170b09b609_768494_31', 'msg_type': 'execute_reply', 'username': 'usernam...5_6', 'msg_type': 'execute_request', 'username': 'username', 'session': '9daed4f9-4970e2bd69e485917b1bc1ef', ...}, ...}

    async def _check_raise_for_error(
        self, cell: NotebookNode, cell_index: int, exec_reply: dict[str, t.Any] | None
    ) -> None:
        if exec_reply is None:
            return None
    
        exec_reply_content = exec_reply["content"]
        if exec_reply_content["status"] != "error":
            return None
    
        cell_allows_errors = (not self.force_raise_errors) and (
            self.allow_errors
            or exec_reply_content.get("ename") in self.allow_error_names
            or "raises-exception" in cell.metadata.get("tags", [])
        )
        await run_hook(
            self.on_cell_error, cell=cell, cell_index=cell_index, execute_reply=exec_reply
        )
        if not cell_allows_errors:
>           raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
E           nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
E           ------------------
E           sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           
E           sample_wavs.bins.concat().hist(wavelength=300).plot()
E           ------------------
E           
E           
E           #x1B[31m---------------------------------------------------------------------------#x1B[39m
E           #x1B[31mValueError#x1B[39m                                Traceback (most recent call last)
E           #x1B[36mCell#x1B[39m#x1B[36m #x1B[39m#x1B[32mIn[5]#x1B[39m#x1B[32m, line 3#x1B[39m
E           #x1B[32m      1#x1B[39m sample_wavs = wf.compute(WavelengthDetector[SampleRun])
E           #x1B[32m      2#x1B[39m 
E           #x1B[32m----> #x1B[39m#x1B[32m3#x1B[39m sample_wavs.bins.concat().hist(wavelength=#x1B[32m300#x1B[39m).plot()
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/data_group.py:755#x1B[39m, in #x1B[36mdata_group_overload.<locals>.impl#x1B[39m#x1B[34m(data, *args, **kwargs)#x1B[39m
E           #x1B[32m    753#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(data, DataGroup):
E           #x1B[32m    754#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m data.apply(impl, *args, **kwargs)  #x1B[38;5;66;03m# type: ignore[arg-type]#x1B[39;00m
E           #x1B[32m--> #x1B[39m#x1B[32m755#x1B[39m #x1B[38;5;28;01mreturn#x1B[39;00m #x1B[30;43mfunc#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mdata#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43margs#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43m*#x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:586#x1B[39m, in #x1B[36mhist#x1B[39m#x1B[34m(x, arg_dict, dim, **kwargs)#x1B[39m
E           #x1B[32m    582#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, DataGroup):
E           #x1B[32m    583#x1B[39m     #x1B[38;5;66;03m# Only to make mypy happy because we have `DataGroup` in annotation of `x`#x1B[39;00m
E           #x1B[32m    584#x1B[39m     #x1B[38;5;66;03m# so that Sphinx shows it.#x1B[39;00m
E           #x1B[32m    585#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mTypeError#x1B[39;00m(#x1B[33m"#x1B[39m#x1B[33mInternal error: input should not be a DataGroup#x1B[39m#x1B[33m"#x1B[39m)
E           #x1B[32m--> #x1B[39m#x1B[32m586#x1B[39m edges = #x1B[30;43m_make_edges#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg_dict#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mkwargs#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    587#x1B[39m erase = _find_replaced_dims(x, dims=edges, dim=dim)
E           #x1B[32m    588#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(x, Variable) #x1B[38;5;129;01mand#x1B[39;00m #x1B[38;5;28mlen#x1B[39m(edges) != #x1B[32m1#x1B[39m:
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:387#x1B[39m, in #x1B[36m_make_edges#x1B[39m#x1B[34m(x, arg_dict, kwargs)#x1B[39m
E           #x1B[32m    381#x1B[39m #x1B[38;5;28;01mdef#x1B[39;00m#x1B[38;5;250m #x1B[39m#x1B[34m_make_edges#x1B[39m(
E           #x1B[32m    382#x1B[39m     x: Variable | DataArray | Dataset,
E           #x1B[32m    383#x1B[39m     arg_dict: IntoStrDict[SupportsIndex | Variable] | #x1B[38;5;28;01mNone#x1B[39;00m,
E           #x1B[32m    384#x1B[39m     kwargs: Mapping[#x1B[38;5;28mstr#x1B[39m, SupportsIndex | Variable],
E           #x1B[32m    385#x1B[39m ) -> #x1B[38;5;28mdict#x1B[39m[#x1B[38;5;28mstr#x1B[39m, Variable]:
E           #x1B[32m    386#x1B[39m     #x1B[38;5;28;01mreturn#x1B[39;00m {
E           #x1B[32m--> #x1B[39m#x1B[32m387#x1B[39m         name: #x1B[30;43m_parse_coords_arg#x1B[39;49m#x1B[30;43m(#x1B[39;49m#x1B[30;43mx#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43mname#x1B[39;49m#x1B[30;43m,#x1B[39;49m#x1B[30;43m #x1B[39;49m#x1B[30;43marg#x1B[39;49m#x1B[30;43m)#x1B[39;49m
E           #x1B[32m    388#x1B[39m         #x1B[38;5;28;01mfor#x1B[39;00m name, arg #x1B[38;5;129;01min#x1B[39;00m combine_dict_args(arg_dict, kwargs).items()
E           #x1B[32m    389#x1B[39m     }
E           
E           #x1B[36mFile #x1B[39m#x1B[32m~/builds/sr_srNBdt/1/dmsc-nightly/dmsc-nightly/.tox/codeshelf-odin/lib/python3.12/site-packages/scipp/core/binning.py:361#x1B[39m, in #x1B[36m_parse_coords_arg#x1B[39m#x1B[34m(x, name, arg)#x1B[39m
E           #x1B[32m    359#x1B[39m     stop = _upper_bound(coord)
E           #x1B[32m    360#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m start > stop:
E           #x1B[32m--> #x1B[39m#x1B[32m361#x1B[39m     #x1B[38;5;28;01mraise#x1B[39;00m #x1B[38;5;167;01mValueError#x1B[39;00m(
E           #x1B[32m    362#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mEmpty data range, cannot automatically determine bounds. #x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    363#x1B[39m         #x1B[33m'#x1B[39m#x1B[33mMust provide concrete bin edges.#x1B[39m#x1B[33m'#x1B[39m
E           #x1B[32m    364#x1B[39m     )
E           #x1B[32m    365#x1B[39m #x1B[38;5;28;01mif#x1B[39;00m #x1B[38;5;129;01mnot#x1B[39;00m #x1B[38;5;28misinstance#x1B[39m(arg, Variable):
E           #x1B[32m    366#x1B[39m     #x1B[38;5;28;01mif#x1B[39;00m start.dtype == DType.datetime64:
E           
E           #x1B[31mValueError#x1B[39m: Empty data range, cannot automatically determine bounds. Must provide concrete bin edges.

.tox/codeshelf-odin/lib/python3.12/site-packages/nbclient/client.py:918: CellExecutionError