Skip to content

Instantly share code, notes, and snippets.

@matthewfeickert
Last active October 29, 2020 23:44
Show Gist options
  • Save matthewfeickert/2afe18c6b06ed14d889c3102513a621a to your computer and use it in GitHub Desktop.
Save matthewfeickert/2afe18c6b06ed14d889c3102513a621a to your computer and use it in GitHub Desktop.
hist, uproot4 issue
.ipynb_checkpoints/

Issue

Minimal failing example

$ python minimal-failing.py
hists in file: ['mass;1']
Traceback (most recent call last):
  File "minimal-failing.py", line 100, in <module>
    main()
  File "minimal-failing.py", line 96, in main
    minimal_failing(root_file)
  File "minimal-failing.py", line 73, in minimal_failing
    hist_mass.plot()
  File "/home/feickert/.venvs/hist-issue/lib/python3.7/site-packages/hist/basehist.py", line 204, in plot
    return self.plot1d(*args, **kwargs)
  File "/home/feickert/.venvs/hist-issue/lib/python3.7/site-packages/hist/basehist.py", line 222, in plot1d
    return hist.plot.histplot(self, ax=ax, **kwargs)
  File "/home/feickert/.venvs/hist-issue/lib/python3.7/site-packages/mplhep/plot.py", line 132, in histplot
    h = np.asarray(h).astype(float)
TypeError: Cannot cast array data from dtype([('value', '<f8'), ('variance', '<f8')]) to dtype('float64') according to the rule 'unsafe'

Minimal passing example

$ python minimal-failing.py pass
Saved figure
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import uproot as uproot3\n",
"import uproot4 as uproot\n",
"import hist\n",
"from hist import Hist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First contstruct the histogram by hand and write it to the ROOT file so we have a public example"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"values = np.array(\n",
" [\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.1305842101573944,\n",
" 1.8680684566497803,\n",
" 5.039996147155762,\n",
" 10.908727645874023,\n",
" 16.122821807861328,\n",
" 19.942882537841797,\n",
" 20.3310489654541,\n",
" 20.61619758605957,\n",
" 19.830669403076172,\n",
" 16.36935806274414,\n",
" 14.46778678894043,\n",
" 12.30238151550293,\n",
" 10.680359840393066,\n",
" 8.495804786682129,\n",
" 6.819866180419922,\n",
" 5.613673210144043,\n",
" 4.6372199058532715,\n",
" 3.0081684589385986,\n",
" 2.6621906757354736,\n",
" 1.9703816175460815,\n",
" 1.5290508270263672,\n",
" 1.142599105834961,\n",
" 1.1284815073013306,\n",
" 0.9037942886352539,\n",
" 0.5355855226516724,\n",
" 0.2520864009857178,\n",
" 0.3385327458381653,\n",
" 0.2901037633419037,\n",
" 0.15997962653636932,\n",
" 0.126237154006958,\n",
" 0.07963479310274124,\n",
" 0.04193861410021782,\n",
" 0.0325426310300827,\n",
" 0.03738107904791832,\n",
" 0.005638935137540102,\n",
" 0.0,\n",
" 0.0,\n",
" 0.006189885549247265,\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.010353004559874535,\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" ]\n",
")\n",
"edges = np.arange(0, 10000 + 200, 200)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"with uproot3.recreate(\"example.root\", compression=uproot3.ZLIB(4)) as outfile:\n",
" outfile[\"mass\"] = (values, edges)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['mass;1']"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"root_file = uproot.open(\"example.root\")\n",
"root_file.keys()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following will throw a `TypeError` but continue execution"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "invalid type promotion",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[0mmethod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_real_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_method\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 344\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmethod\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 345\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 346\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/hist/basehist.py\u001b[0m in \u001b[0;36m_repr_html_\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhtml_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msvg_hist_1d_c\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhtml_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msvg_hist_1d\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 67\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhtml_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msvg_hist_2d\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/hist/svgplots.py\u001b[0m in \u001b[0;36mhtml_hist\u001b[0;34m(h, function)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mhtml_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mleft_column\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdiv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstyle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"width:290px;\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0mright_column\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdiv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_desc_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstyle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"flex=grow:1;\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/hist/svgplots.py\u001b[0m in \u001b[0;36msvg_hist_1d\u001b[0;34m(h)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0mnorm_edges\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0medges\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0medges\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0medges\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0mdensity\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdensity\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0mmax_dens\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdensity\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0mnorm_vals\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdensity\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mmax_dens\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/hist/basehist.py\u001b[0m in \u001b[0;36mdensity\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0mDensity\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 188\u001b[0m \"\"\"\n\u001b[0;32m--> 189\u001b[0;31m \u001b[0mtotal\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mfunctools\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moperator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmul\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwidths\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 190\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mview\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtotal\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: invalid type promotion"
]
},
{
"data": {
"text/plain": [
"Hist(Regular(50, 0, 10000, label='Axis 0'), storage=Weight()) # Sum: WeightedSum(value=208.438, variance=2977.96)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hist_mass = root_file[\"mass\"].to_hist()\n",
"hist_mass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Though `hist_mass.show()` will `TypeError` and halt execution"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "cannot perform reduce with flexible type",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-6-a30797f93081>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhist_mass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/hist/basehist.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 195\u001b[0m \"\"\"\n\u001b[1;32m 196\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 197\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mhistoprint\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_hist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 198\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 199\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;34m\"Union[Hist1DArtists, Hist2DArtists]\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/histoprint/formatter.py\u001b[0m in \u001b[0;36mprint_hist\u001b[0;34m(hist, file, **kwargs)\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[0mcount\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0medges\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_count_edges\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 569\u001b[0m \u001b[0mhist_formatter\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mHistFormatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0medges\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 570\u001b[0;31m \u001b[0mclick\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mecho\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhist_formatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat_histogram\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcount\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 571\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 572\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/histoprint/formatter.py\u001b[0m in \u001b[0;36mformat_histogram\u001b[0;34m(self, counts)\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 424\u001b[0m \u001b[0;31m# Bin content will be maximum of all histograms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 425\u001b[0;31m \u001b[0mtot_c\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcounts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 426\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[0;31m# Get bin lengths\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<__array_function__ internals>\u001b[0m in \u001b[0;36mamax\u001b[0;34m(*args, **kwargs)\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36mamax\u001b[0;34m(a, axis, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 2704\u001b[0m \"\"\"\n\u001b[1;32m 2705\u001b[0m return _wrapreduction(a, np.maximum, 'max', axis, None, out,\n\u001b[0;32m-> 2706\u001b[0;31m keepdims=keepdims, initial=initial, where=where)\n\u001b[0m\u001b[1;32m 2707\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2708\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.venvs/hist-issue/lib/python3.7/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36m_wrapreduction\u001b[0;34m(obj, ufunc, method, axis, dtype, out, **kwargs)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mreduction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpasskwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 87\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mufunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpasskwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 88\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: cannot perform reduce with flexible type"
]
}
],
"source": [
"hist_mass.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below is a cumbersome way of doing things that works"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<html>\n",
"<div style=\"display:flex; align-items:center;\">\n",
"<div style=\"width:290px;\">\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-10 -105 270 120\">\n",
"<line x1=\"-5\" y1=\"0\" x2=\"255\" y2=\"0\" style=\"fill:none;stroke-width:2;stroke:currentColor\"/>\n",
"<text text-anchor=\"middle\" x=\"0\" y=\"15\" style=\"fill:currentColor;\">\n",
"0\n",
"</text>\n",
"<text text-anchor=\"middle\" x=\"250\" y=\"15\" style=\"fill:currentColor;\">\n",
"1e+04\n",
"</text>\n",
"<text text-anchor=\"middle\" x=\"125.0\" y=\"15\" style=\"fill:currentColor;\">\n",
"mass\n",
"</text>\n",
"<polyline points=\" 0,0 0,-0 5,-0 5,-0 10,-0 10,-0 15,-0 15,-0 20,-0 20,-0 25,-0 25,-0.633 30,-0.633 30,-9.06 35,-9.06 35,-24.4 40,-24.4 40,-52.9 45,-52.9 45,-78.2 50,-78.2 50,-96.7 55,-96.7 55,-98.6 60,-98.6 60,-100 65,-100 65,-96.2 70,-96.2 70,-79.4 75,-79.4 75,-70.2 80,-70.2 80,-59.7 85,-59.7 85,-51.8 90,-51.8 90,-41.2 95,-41.2 95,-33.1 100,-33.1 100,-27.2 105,-27.2 105,-22.5 110,-22.5 110,-14.6 115,-14.6 115,-12.9 120,-12.9 120,-9.56 125,-9.56 125,-7.42 130,-7.42 130,-5.54 135,-5.54 135,-5.47 140,-5.47 140,-4.38 145,-4.38 145,-2.6 150,-2.6 150,-1.22 155,-1.22 155,-1.64 160,-1.64 160,-1.41 165,-1.41 165,-0.776 170,-0.776 170,-0.612 175,-0.612 175,-0.386 180,-0.386 180,-0.203 185,-0.203 185,-0.158 190,-0.158 190,-0.181 195,-0.181 195,-0.0274 200,-0.0274 200,-0 205,-0 205,-0 210,-0 210,-0.03 215,-0.03 215,-0 220,-0 220,-0 225,-0 225,-0 230,-0 230,-0.0502 235,-0.0502 235,-0 240,-0 240,-0 245,-0 245,-0 250,-0 250,0\" style=\"fill:none; stroke:currentColor;\"/>\n",
"</svg>\n",
"</div>\n",
"<div style=\"flex=grow:1;\">\n",
"Regular(50, 0, 10000, name='mass', label='mass')<br/>\n",
"<hr style=\"margin-top:.2em; margin-bottom:.2em;\"/>\n",
"Double() Σ=208.43831768771634\n",
"\n",
"</div>\n",
"</div>\n",
"</html>"
],
"text/plain": [
"Hist(Regular(50, 0, 10000, name='mass', label='mass'), storage=Double()) # Sum: 208.43831768771634"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"h_values, h_edges = root_file[\"mass\"].to_numpy()\n",
"hist_mass = Hist(\n",
" hist.axis.Regular(len(h_edges) - 1, h_edges[0], h_edges[-1], name=\"mass\"),\n",
" storage=hist.storage.Double(),\n",
")\n",
"hist_mass[:] = h_values\n",
"hist_mass"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"artists = hist_mass.plot()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig = artists[0].step.figure\n",
"ax = fig.axes[0]\n",
"ax.set_ylabel(\"Count\")\n",
"ax.semilogy()\n",
"fig"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
import numpy as np
import uproot as uproot3
import uproot4 as uproot
import hist
from hist import Hist
import sys
def write_root_file(name="example.root"):
values = np.array(
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.1305842101573944,
1.8680684566497803,
5.039996147155762,
10.908727645874023,
16.122821807861328,
19.942882537841797,
20.3310489654541,
20.61619758605957,
19.830669403076172,
16.36935806274414,
14.46778678894043,
12.30238151550293,
10.680359840393066,
8.495804786682129,
6.819866180419922,
5.613673210144043,
4.6372199058532715,
3.0081684589385986,
2.6621906757354736,
1.9703816175460815,
1.5290508270263672,
1.142599105834961,
1.1284815073013306,
0.9037942886352539,
0.5355855226516724,
0.2520864009857178,
0.3385327458381653,
0.2901037633419037,
0.15997962653636932,
0.126237154006958,
0.07963479310274124,
0.04193861410021782,
0.0325426310300827,
0.03738107904791832,
0.005638935137540102,
0.0,
0.0,
0.006189885549247265,
0.0,
0.0,
0.0,
0.010353004559874535,
0.0,
0.0,
0.0,
]
)
edges = np.arange(0, 10000 + 200, 200)
with uproot3.recreate(name, compression=uproot3.ZLIB(4)) as outfile:
outfile["mass"] = (values, edges)
def minimal_failing(root_file):
print(f"hists in file: {root_file.keys()}")
hist_mass = root_file["mass"].to_hist()
hist_mass.plot()
def minimal_passing(root_file):
values, edges = root_file["mass"].to_numpy()
hist_mass = Hist(
hist.axis.Regular(len(edges) - 1, edges[0], edges[-1], name="mass"),
storage=hist.storage.Double(),
)
hist_mass[:] = values
artists = hist_mass.plot()
fig = artists[0].step.figure
fig.savefig("mass_plot.png")
print("Saved figure")
def main(input=sys.argv):
write_root_file("example.root")
root_file = uproot.open("example.root")
if input[-1] == "pass":
minimal_passing(root_file)
else:
minimal_failing(root_file)
if __name__ == "__main__":
main()
hist[plot]==2.0.1
uproot4==0.0.27
uproot~=3.12
jupyter~=1.0
jupyterlab~=2.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment