uproot5 icon indicating copy to clipboard operation
uproot5 copied to clipboard

Unable to delete histogram from a ROOT file

Open kratsg opened this issue 4 years ago • 1 comments

>>> 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.

kratsg avatar Nov 10 '21 21:11 kratsg

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

matthewfeickert avatar Nov 10 '21 21:11 matthewfeickert