Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] plot1d doesn't work with IntCat axis #560

Open
andrzejnovak opened this issue Feb 6, 2024 · 0 comments
Open

[BUG] plot1d doesn't work with IntCat axis #560

andrzejnovak opened this issue Feb 6, 2024 · 0 comments

Comments

@andrzejnovak
Copy link
Member

Describe the bug

plo1d (with overlay for a categorical axis) only works for StrCat but not for IntCat

Steps to reproduce

import hist
import numpy as np

h2 = hist.new.Reg(10, 0, 10).IntCat([], growth=True).Weight().fill(np.random.normal(5, 2, int(1e6)), np.random.choice([1,2,3,4], int(1e6)))
h2.plot1d()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[13], line 1
----> 1 h2.plot1d()

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/hist/basehist.py:424, in BaseHist.plot1d(self, ax, overlay, **kwargs)
    422 cat_ax = self.axes[overlay]
    423 cats = cat_ax if cat_ax.traits.discrete else np.arange(len(cat_ax.centers))
--> 424 d1hists = [self[{overlay: cat}] for cat in cats]
    425 if "label" in kwargs:
    426     if not isinstance(kwargs["label"], str) and len(kwargs["label"]) == len(
    427         cats
    428     ):

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/hist/basehist.py:424, in <listcomp>(.0)
    422 cat_ax = self.axes[overlay]
    423 cats = cat_ax if cat_ax.traits.discrete else np.arange(len(cat_ax.centers))
--> 424 d1hists = [self[{overlay: cat}] for cat in cats]
    425 if "label" in kwargs:
    426     if not isinstance(kwargs["label"], str) and len(kwargs["label"]) == len(
    427         cats
    428     ):

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/hist/basehist.py:324, in BaseHist.__getitem__(self, index)
    317 def __getitem__(  # type: ignore[override]
    318     self: T, index: IndexingExpr
    319 ) -> T | float | bh.accumulators.Accumulator:
    320     """
    321     Get histogram item.
    322     """
--> 324     return super().__getitem__(self._index_transform(index))

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/boost_histogram/_internal/hist.py:842, in Histogram.__getitem__(self, index)
    838 def __getitem__(  # noqa: C901
    839     self: H, index: IndexingExpr
    840 ) -> Union[H, float, Accumulator]:
--> 842     indexes = self._compute_commonindex(index)
    844     # If this is (now) all integers, return the bin contents
    845     # But don't try *dict!
    846     if not hasattr(indexes, "items") and all(
    847         isinstance(a, SupportsIndex) for a in indexes
    848     ):

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/boost_histogram/_internal/hist.py:750, in Histogram._compute_commonindex(self, index)
    748         indexes[i] = [self._compute_uhi_index(ind, i) for ind in indexes[i]]
    749     else:
--> 750         indexes[i] = self._compute_uhi_index(indexes[i], i)
    752 return indexes

File ~/software/micromamba/envs/def/lib/python3.11/site-packages/boost_histogram/_internal/hist.py:709, in Histogram._compute_uhi_index(self, index, axis)
    707 if isinstance(index, SupportsIndex):
    708     if abs(int(index)) >= self._hist.axis(axis).size:
--> 709         raise IndexError("histogram index is out of range")
    710     return int(index) % self._hist.axis(axis).size
    712 return index

IndexError: histogram index is out of range

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant