uproot5
uproot5 copied to clipboard
Unable to delete histogram from a ROOT file
>>> import uproot
>>> uproot.__version__
'4.1.5'
ROOT file in question: https://github.com/scikit-hep/pyhf/blob/master/validation/xmlimport_input/data/example.root
>>> import uproot
>>> f = uproot.update('data/example.root')
>>> f.keys()
['data;1', 'signal;1', 'background1;1', 'background2;1', 'background1_statUncert;1']
>>> del f['signal']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/kratsg/.pyenv/versions/pyhf-dev/lib/python3.8/site-packages/uproot/writing/writable.py", line 972, in __delitem__
return self._get_del_search(where, False)
File "/Users/kratsg/.pyenv/versions/pyhf-dev/lib/python3.8/site-packages/uproot/writing/writable.py", line 957, in _get_del_search
return self._del(item, cycle)
File "/Users/kratsg/.pyenv/versions/pyhf-dev/lib/python3.8/site-packages/uproot/writing/writable.py", line 1029, in _del
self._cascading.freesegments.release(start, stop)
File "/Users/kratsg/.pyenv/versions/pyhf-dev/lib/python3.8/site-packages/uproot/writing/_cascade.py", line 757, in release
new_slices = self._another_slice(self._data.slices, start, stop)
File "/Users/kratsg/.pyenv/versions/pyhf-dev/lib/python3.8/site-packages/uproot/writing/_cascade.py", line 714, in _another_slice
raise RuntimeError(
RuntimeError: segment of data to release overlaps one already marked as free: releasing [1778, 2070) but [2045, 5045) is free
When re-running a second time, it's ok. Probably just an expectation issue somewhere.
I'm able to replicate this on uproot v4.1.8, with the exception of being able to get it working on the second attempt (still getting failure there)
$ docker run --rm -ti python:3.9 /bin/bash
root@1b8a542902a8:/# python -m venv ~/venv && . ~/venv/bin/activate
(venv) root@1b8a542902a8:/# python -m pip --quiet install --upgrade pip setuptools wheel
(venv) root@1b8a542902a8:/# python -m pip --quiet install uproot
(venv) root@1b8a542902a8:/# pip show uproot
Name: uproot
Version: 4.1.8
Summary: ROOT I/O in pure Python and NumPy.
Home-page: https://github.com/scikit-hep/uproot4
Author: Jim Pivarski
Author-email: [email protected]
License: BSD-3-Clause
Location: /root/venv/lib/python3.9/site-packages
Requires: numpy, setuptools
Required-by:
(venv) root@1b8a542902a8:/# curl -sLO https://github.com/scikit-hep/pyhf/raw/c493c7c5ad3e5aeda7d022cdf5fe77e9fdab43a2/validation/xmlimport_input/data/example.root
(venv) root@1b8a542902a8:/# python
Python 3.9.7 (default, Oct 13 2021, 09:00:49)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import uproot
>>> file = uproot.update("example.root")
>>> file.keys()
['data;1', 'signal;1', 'background1;1', 'background2;1', 'background1_statUncert;1']
>>> del file["signal"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 972, in __delitem__
return self._get_del_search(where, False)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 957, in _get_del_search
return self._del(item, cycle)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 1029, in _del
self._cascading.freesegments.release(start, stop)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/_cascade.py", line 757, in release
new_slices = self._another_slice(self._data.slices, start, stop)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/_cascade.py", line 714, in _another_slice
raise RuntimeError(
RuntimeError: segment of data to release overlaps one already marked as free: releasing [1778, 2070) but [2045, 5045) is free
>>> del file["signal"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 972, in __delitem__
return self._get_del_search(where, False)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 957, in _get_del_search
return self._del(item, cycle)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/writable.py", line 1029, in _del
self._cascading.freesegments.release(start, stop)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/_cascade.py", line 757, in release
new_slices = self._another_slice(self._data.slices, start, stop)
File "/root/venv/lib/python3.9/site-packages/uproot/writing/_cascade.py", line 714, in _another_slice
raise RuntimeError(
RuntimeError: segment of data to release overlaps one already marked as free: releasing [1778, 2070) but [2045, 5045) is free