SlideShare a Scribd company logo
Recent developments in histogram libraries
Hans Dembinski1
Jim Pivarski2
Henry Schreiner2
November 7, 2019
Max Planck Institute for Nuclear Physics, Heidelberg, Germany1
Princeton University, Princeton, USA2
Histogram libraries (Python)
HistBook
Histogrammar
pygram11
rootplotlib
PyROOT
YODA
physt
fast-histogram
qhist
Vaex
hdrhistogram
multihist
matplotlib-hep
pyhistogram
histogram
SimpleHist
paida
theodoregoetz
numpy
Cassius
SVGFig
Plothon
coffea
1/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Histogram libraries (Python)
HistBook
Histogrammar
pygram11
rootplotlib
PyROOT
YODA
physt
fast-histogram
qhist
Vaex
hdrhistogram
multihist
matplotlib-hep
pyhistogram
histogram
SimpleHist
paida
theodoregoetz
numpy
Cassius
SVGFig
Plothon
coffeaNarrow focus
Most abandoned
1/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Histogram libraries (Python)
HistBook
Histogrammar
pygram11
rootplotlib
PyROOT
YODA
physt
fast-histogram
qhist
Vaex
hdrhistogram
multihist
matplotlib-hep
pyhistogram
histogram
SimpleHist
paida
theodoregoetz
numpy
Cassius
SVGFig
Plothon
coffeaNarrow focus
Most abandoned
No or little
interaction
1/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Scikit-HEP histogramming plan (Python)
• boost-histogram: Fast filling and manipulation (core library)
• hist: Simple analysis frontend
• aghast: Conversions between histogram libraries
• UHI (Unified Histogram Indexing): Cross-library indexing proposal
Core histogramming libraries boost-histogram ROOT
Universal adaptor aghast
Front ends (plotting, etc) hist mpl-hep coffea others
2/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14
• /boostorg/histogram
• Designed by Hans Dembinski
• Header only, with header only Boost
• Heavily unit-tested: 100% line coverage
Features
• Static / Dynamic storage (can avoid allocation!)
• Static fill becomes 57 lines of vectorized assembly
• Supports platforms without exceptions or RTTI
• Adding, scaling, slicing, rebinning, projections…
• High performance filling and bin iteration
• Unique memory-efficient dynamic storage
Customizable:
• storage
• allocator
• accumulator
• axes
• axis metadata
• axis transform
3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14
• /boostorg/histogram
• Designed by Hans Dembinski
• Header only, with header only Boost
• Heavily unit-tested: 100% line coverage
Features
• Static / Dynamic storage (can avoid allocation!)
• Static fill becomes 57 lines of vectorized assembly
• Supports platforms without exceptions or RTTI
• Adding, scaling, slicing, rebinning, projections…
• High performance filling and bin iteration
• Unique memory-efficient dynamic storage
Customizable:
• storage
• allocator
• accumulator
• axes
• axis metadata
• axis transform
Accepted in Boost 1.70!
3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14
• /boostorg/histogram
• Designed by Hans Dembinski
• Header only, with header only Boost
• Heavily unit-tested: 100% line coverage
Features
• Static / Dynamic storage (can avoid allocation!)
• Static fill becomes 57 lines of vectorized assembly
• Supports platforms without exceptions or RTTI
• Adding, scaling, slicing, rebinning, projections…
• High performance filling and bin iteration
• Unique memory-efficient dynamic storage
Customizable:
• storage
• allocator
• accumulator
• axes
• axis metadata
• axis transform
Will not go away!
3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14: Histogram concept
Histogram
• Axes
• Storage
Axis types
• Regular (circular)
• Variable (circular)
• Integer (circular)
• Category
Accumulators
• Sum
• Mean
Single class replaces TH1T, TH2T, TH3T, THnT, TProfile,
TProfile2D, TProfile3D and is more general!
Storage (
Static
Dynamic
)Regular axis
Regular axis with
log transformaxes
Optional overflowOptional underflow
Accumulator
int, double,
unlimited, ...
4/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14: Elegant and powerful
#include <boost/histogram.hpp>
#include <boost/histogram/ostream.hpp>
#include <random>
#include <iostream>
int main() {
namespace bh = boost::histogram;
auto hist = bh::histogram(bh::axis::regular{20, -3, 3}); // C++17 version
std::default_random_engine eng;
std::normal_distribution<double> dist{0, 1};
for(int n = 0; n < 10'000; ++n)
hist(dist(eng));
std::cout << hist << std::endl;
return 0; }
5/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14: Example output
histogram(regular(20, -3, 3, options=underflow | overflow))
+----------------------------------------------------------+
[-inf, -3) 9 | |
[ -3, -2.7) 19 |= |
[-2.7, -2.4) 36 |== |
[-2.4, -2.1) 110 |===== |
[-2.1, -1.8) 191 |========= |
[-1.8, -1.5) 275 |============= |
[-1.5, -1.2) 518 |========================= |
[-1.2, -0.9) 644 |=============================== |
[-0.9, -0.6) 914 |============================================ |
[-0.6, -0.3) 1107 |===================================================== |
[-0.3, 0) 1183 |========================================================= |
[ 0, 0.3) 1185 |========================================================= |
[ 0.3, 0.6) 1120 |====================================================== |
[ 0.6, 0.9) 874 |========================================== |
[ 0.9, 1.2) 663 |================================ |
[ 1.2, 1.5) 491 |======================== |
[ 1.5, 1.8) 322 |=============== |
[ 1.8, 2.1) 172 |======== |
[ 2.1, 2.4) 79 |==== |
[ 2.4, 2.7) 38 |== |
[ 2.7, 3) 28 |= |
[ 3, inf) 22 |= |
+----------------------------------------------------------+
6/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Boost.Histogram C++14: Performance
• call is one at a time fill
• fill is new (1.72) array fill
• S is static (fixed types)
• D is dynamic (unlimited storage)
7/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
boost-histogram: Python bindings
• Boost.Histogram developed with Python in mind
▶ Original prototype bindings based on Boost::Python
• New bindings: /scikit-hep/boost-histogram
▶ 0-dependency build (C++14 only)
▶ State-of-the-art PyBind11
▶ Designed with the original author, Hans Dembinski
• Public beta 0.5.2 currently available, 0.6 coming soon
Design Flexibility Speed Distribution
8/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Design
• 500+ unit tests run on Azure on Linux, macOS, and Windows
• Stays close to Boost.Histogram with Pythonizations
C++17
#include <boost/histogram.hpp>
namespace bh = boost::histogram;
auto hist = bh::histogram(
bh::axis::regular{2, 0, 1, "x"},
bh::axis::regular{4, 0, 1, "y"});
hist(.2, .3); // Fill will also be
hist(.4, .5); // available in 1.72
hist(.3, .2);
Python
import boost_histogram as bh
hist = bh.Histogram(
bh.axis.Regular(2, 0, 1, metadata="x"),
bh.axis.Regular(4, 0, 1, metadata="y"))
hist.fill(
[.2, .4, .3],
[.3, .5, .2])
9/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Design: Manipulations
Combine two histograms
hist1 + hist2
Scale a histogram
hist * 2.0
Sum a histogram contents
hist.sum()
Access an axis
ax = hist.axes[0]
ax.edges # The edges array
ax.centers # Centers of bins
ax.widths # Width of each bin
hist.axes.centers # All centers
# Etc.
Fill 2D histogram with values or arrays
hist.fill(a1, a2, weights=[w1, w2],
samples=[s1, s2])
Convert contents to Numpy array
hist.view()
Convert to Numpy style histogram tuple
hist.to_numpy()
Pickle supported (multiprocessing)
pickle.dumps(hist, -1)
Copy/deepcopy supported
hist2 = copy.deepcopy(hist)
Numpy functions provided
H, E = bh.numpy.histogram(...)
10/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Design: Unified Histogram Indexing (UHI)
The language here (bh.loc, etc) is defined in such a way that any library can provide them -
“Unified”.
Access
v = h[b] # Returns bin contents, indexed by bin number
v = h[bh.loc(b)] # Returns the bin containing the value
v = h[bh.underflow] # Underflow and overflow can be accessed with special tags
Setting
h[b] = v
h[bh.loc(b)] = v
h[bh.underflow] = v
11/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Design: Unified Histogram Indexing (UHI) (2)
h == h[:] # Slice over everything
h2 = h[a:b] # Slice of histogram (includes flow bins)
h2 = h[:b] # Leaving out endpoints is okay
h2 = h[bh.loc(v):] # Slices can be in data coordinates, too
h2 = h[::bh.sum] # Remove an axis by summation
h2 = h[0:5:bh.sum] # Can add endpoints
h2 = h[::bh.rebin(2)] # Modification operations (rebin)
h2 = h[a:b:bh.rebin(2)] # Modifications can combine with slices
h2 = h[a:b, ...] # Ellipsis work just like normal numpy
• Docs are here
• Description may move to a new repository
12/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Flexibility: Axis types
• bh.axis.Regular
▶ under/overflow
▶ growth=True
▶ circular=True
▶ transform=Log()
▶ transform=Sqrt()
▶ transform=Pow(v)
• bh.axis.Integer
▶ under/overflow
▶ growth=True
• bh.axis.Variable
▶ under/overflow
▶ growth=True
• bh.axis.Category
▶ int or str
▶ growth=True
0 0.5 1
bh.axis.Regular(10, 0, 1)
𝜋/2
0, 2𝜋
𝜋
3𝜋/3
bh.axis.Regular(8, 0, 2*np.pi, circular=True)
0 0.3 0.5 1
bh.axis.Variable([0, .3, .5, 1])
0 1 2 3 4
bh.axis.Integer(0, 5)
2 5 8 3 7
bh.axis.Category([2, 5, 8, 3, 7])
13/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Performance
• Factor of 2 faster than 1D regular binning in Numpy 1.17
▶ Currently no specialization, just a 1D regular fill
▶ Could be optimized further for common fills
• Factor of 6-10 faster than 2D regular binning Numpy
14/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Distribution
If pip install boost-histogram fails, we have failed.
• Docker ManyLinux1 GCC 9.2: /scikit-hep/manylinuxgcc
• Used in /scikit-hep/iMinuit, /scikit-hep/awkward1
• Described on iscinumpy.gitlab.io, also see /scikit-hep/azure-wheel-helpers
Wheels
• manylinux1 32/64 bit, Py 2.7, 3.5, 3.6, 3.7
• manylinux2010 64 bit, Py 2.7, 3.5, 3.6, 3.7, 3.8
• macOS 10.9+ 64 bit, Py 2.7, 3.6, 3.7, 3.8
• Windows 32/64 bit, Py 2.7, 3.6, 3.7
Source
• SDist on PyPI
• Build directly from GitHub
Conda-Forge
• All (including 3.8) except 2.7 on
Windows
python3 -m pip install boost-histogram
conda install -c conda-forge boost-histogram
15/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Hist
hist is the ‘wrapper’ piece that does plotting and interacts with the rest of the ecosystem.
Plans
• Easy plotting adaptors (mpl-hep)
• Serialization formats via aghast (ROOT, HDF5)
• Implicit multithreading
• Statistical functions (Like TEfficiency)
• Multihistogram plotting (HistBook)
• Interaction with fitters (ZFit, GooFit, etc)
• Bayesian Blocks algorithm from Scikit-HEP
• Command line histograms for stream of numbers
Call for contributions
• What do you need?
• Looking for a student
interested in development
Join in the development! This
should combine the best features
of other packages.
16/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
aghast
aghast is a histogramming library that does not fill histograms
and does not plot them.
/scikit-hep/aghast
• A memory format for histograms, like Apache Arrow
• Converts to and from other libraries
• Uses flatbuffers to hold histograms
• Indexing ideas inspired the UHI
Available Binnings
• IntegerBinning
• RegularBinning
• HexagonalBinning
• EdgesBinning
• IrregularBinning
• CategoryBinning
• SparseRegularBinning
• FractionBinning
• PredicateBinning
• VariationBinning
17/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Conclusions
• Boost.Histogram C++14 is a solid foundation
• boost-histogram for Python is a core histogramming library
• Hist will be developed next and is analysis friendly
• aghast is the glue to ROOT/everything else
Core histogramming libraries boost-histogram ROOT
Universal adaptor aghast
Front ends (plotting, etc) hist mpl-hep coffea others
18/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Questions
?Supported by
• IRIS-HEP, NSF OAC-1836650
• DIANA-HEP, NSF OAC-1558216, NSF OAC-1558233, NSF OAC-1558219
19/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
Storage types
• bh.storage.Int
• bh.storage.Double
• bh.storage.Unlimited
• bh.storage.AtomicInt
• bh.storage.Weight
• bh.storage.Profile
• bh.storage.WeightedProfile
19/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019

More Related Content

What's hot

DIANA: Recent developments in GooFit
DIANA: Recent developments in GooFitDIANA: Recent developments in GooFit
DIANA: Recent developments in GooFit
Henry Schreiner
 
CHEP 2018: A Python upgrade to the GooFit package for parallel fitting
CHEP 2018: A Python upgrade to the GooFit package for parallel fittingCHEP 2018: A Python upgrade to the GooFit package for parallel fitting
CHEP 2018: A Python upgrade to the GooFit package for parallel fitting
Henry Schreiner
 
ROOT 2018: iminuit and MINUIT2 Standalone
ROOT 2018: iminuit and MINUIT2 StandaloneROOT 2018: iminuit and MINUIT2 Standalone
ROOT 2018: iminuit and MINUIT2 Standalone
Henry Schreiner
 
2019 IRIS-HEP AS workshop: Particles and decays
2019 IRIS-HEP AS workshop: Particles and decays2019 IRIS-HEP AS workshop: Particles and decays
2019 IRIS-HEP AS workshop: Particles and decays
Henry Schreiner
 
PEARC17: Modernizing GooFit: A Case Study
PEARC17: Modernizing GooFit: A Case StudyPEARC17: Modernizing GooFit: A Case Study
PEARC17: Modernizing GooFit: A Case Study
Henry Schreiner
 
Massively Parallel Processing with Procedural Python (PyData London 2014)
Massively Parallel Processing with Procedural Python (PyData London 2014)Massively Parallel Processing with Procedural Python (PyData London 2014)
Massively Parallel Processing with Procedural Python (PyData London 2014)
Ian Huston
 
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11
corehard_by
 
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
PyData
 
Pig: Data Analysis Tool in Cloud
Pig: Data Analysis Tool in Cloud Pig: Data Analysis Tool in Cloud
Pig: Data Analysis Tool in Cloud
Jianfeng Zhang
 
Pypy is-it-ready-for-production-the-sequel
Pypy is-it-ready-for-production-the-sequelPypy is-it-ready-for-production-the-sequel
Pypy is-it-ready-for-production-the-sequel
Mark Rees
 
PyPy - is it ready for production
PyPy - is it ready for productionPyPy - is it ready for production
PyPy - is it ready for production
Mark Rees
 
Available HPC resources at CSUC
Available HPC resources at CSUCAvailable HPC resources at CSUC
Substituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scriptsSubstituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scripts
The HDF-EOS Tools and Information Center
 
Using HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py moduleUsing HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py module
The HDF-EOS Tools and Information Center
 
HDF5 Tools
HDF5 ToolsHDF5 Tools
Golang Arg / CABA Meetup #5 - go-carbon
Golang Arg / CABA Meetup #5 - go-carbonGolang Arg / CABA Meetup #5 - go-carbon
Golang Arg / CABA Meetup #5 - go-carbon
Ezequiel Maraschio
 
High scalable applications with Python
High scalable applications with PythonHigh scalable applications with Python
High scalable applications with Python
Giuseppe Broccolo
 
Available HPC resources at CSUC
Available HPC resources at CSUCAvailable HPC resources at CSUC
Pydata2017 11-29
Pydata2017 11-29Pydata2017 11-29
Pydata2017 11-29
Yuta Kashino
 
私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか
Yuta Kashino
 

What's hot (20)

DIANA: Recent developments in GooFit
DIANA: Recent developments in GooFitDIANA: Recent developments in GooFit
DIANA: Recent developments in GooFit
 
CHEP 2018: A Python upgrade to the GooFit package for parallel fitting
CHEP 2018: A Python upgrade to the GooFit package for parallel fittingCHEP 2018: A Python upgrade to the GooFit package for parallel fitting
CHEP 2018: A Python upgrade to the GooFit package for parallel fitting
 
ROOT 2018: iminuit and MINUIT2 Standalone
ROOT 2018: iminuit and MINUIT2 StandaloneROOT 2018: iminuit and MINUIT2 Standalone
ROOT 2018: iminuit and MINUIT2 Standalone
 
2019 IRIS-HEP AS workshop: Particles and decays
2019 IRIS-HEP AS workshop: Particles and decays2019 IRIS-HEP AS workshop: Particles and decays
2019 IRIS-HEP AS workshop: Particles and decays
 
PEARC17: Modernizing GooFit: A Case Study
PEARC17: Modernizing GooFit: A Case StudyPEARC17: Modernizing GooFit: A Case Study
PEARC17: Modernizing GooFit: A Case Study
 
Massively Parallel Processing with Procedural Python (PyData London 2014)
Massively Parallel Processing with Procedural Python (PyData London 2014)Massively Parallel Processing with Procedural Python (PyData London 2014)
Massively Parallel Processing with Procedural Python (PyData London 2014)
 
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11
 
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
Massively Parallel Processing with Procedural Python by Ronert Obst PyData Be...
 
Pig: Data Analysis Tool in Cloud
Pig: Data Analysis Tool in Cloud Pig: Data Analysis Tool in Cloud
Pig: Data Analysis Tool in Cloud
 
Pypy is-it-ready-for-production-the-sequel
Pypy is-it-ready-for-production-the-sequelPypy is-it-ready-for-production-the-sequel
Pypy is-it-ready-for-production-the-sequel
 
PyPy - is it ready for production
PyPy - is it ready for productionPyPy - is it ready for production
PyPy - is it ready for production
 
Available HPC resources at CSUC
Available HPC resources at CSUCAvailable HPC resources at CSUC
Available HPC resources at CSUC
 
Substituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scriptsSubstituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scripts
 
Using HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py moduleUsing HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py module
 
HDF5 Tools
HDF5 ToolsHDF5 Tools
HDF5 Tools
 
Golang Arg / CABA Meetup #5 - go-carbon
Golang Arg / CABA Meetup #5 - go-carbonGolang Arg / CABA Meetup #5 - go-carbon
Golang Arg / CABA Meetup #5 - go-carbon
 
High scalable applications with Python
High scalable applications with PythonHigh scalable applications with Python
High scalable applications with Python
 
Available HPC resources at CSUC
Available HPC resources at CSUCAvailable HPC resources at CSUC
Available HPC resources at CSUC
 
Pydata2017 11-29
Pydata2017 11-29Pydata2017 11-29
Pydata2017 11-29
 
私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか私は如何にして心配するのを止めてPyTorchを愛するようになったか
私は如何にして心配するのを止めてPyTorchを愛するようになったか
 

Similar to CHEP 2019: Recent developments in histogram libraries

Graph operations in Git version control system
Graph operations in Git version control systemGraph operations in Git version control system
Graph operations in Git version control system
Jakub Narębski
 
Elastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtimeElastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtime
Miquel Pericas
 
Elastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtimeElastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtime
LEGATO project
 
Kim Hammar - Spotify ML Guild Meetup - Feature Stores
Kim Hammar - Spotify ML Guild Meetup - Feature StoresKim Hammar - Spotify ML Guild Meetup - Feature Stores
Kim Hammar - Spotify ML Guild Meetup - Feature Stores
Kim Hammar
 
Time series data monitoring at 99acres.com
Time series data monitoring at 99acres.comTime series data monitoring at 99acres.com
Time series data monitoring at 99acres.com
Ravi Raj
 
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Andrii Gakhov
 
R tools for HiC data visualization
R tools for HiC data visualizationR tools for HiC data visualization
R tools for HiC data visualization
tuxette
 
Big Data + Big Sim: Query Processing over Unstructured CFD Models
Big Data + Big Sim: Query Processing over Unstructured CFD ModelsBig Data + Big Sim: Query Processing over Unstructured CFD Models
Big Data + Big Sim: Query Processing over Unstructured CFD Models
University of Washington
 
Pronto raster v3
Pronto raster v3Pronto raster v3
Pronto raster v3
Alex Hagen-Zanker
 
Presentation.pptx
Presentation.pptxPresentation.pptx
Presentation.pptx
AyushmanTiwari11
 
Presentation.pptx
Presentation.pptxPresentation.pptx
Presentation.pptx
AyushmanTiwari11
 
Slides 111017220255-phpapp01
Slides 111017220255-phpapp01Slides 111017220255-phpapp01
Slides 111017220255-phpapp01
Ken Mwai
 
Python for Financial Data Analysis with pandas
Python for Financial Data Analysis with pandasPython for Financial Data Analysis with pandas
Python for Financial Data Analysis with pandas
Wes McKinney
 
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
AMIDST Toolbox
 
04 open source_tools
04 open source_tools04 open source_tools
04 open source_tools
Marco Quartulli
 
Developing High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & GoDeveloping High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & Go
Chris Stivers
 
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
Insight Technology, Inc.
 
Hw09 Hadoop Development At Facebook Hive And Hdfs
Hw09   Hadoop Development At Facebook  Hive And HdfsHw09   Hadoop Development At Facebook  Hive And Hdfs
Hw09 Hadoop Development At Facebook Hive And Hdfs
Cloudera, Inc.
 
Buzzwords Numba Presentation
Buzzwords Numba PresentationBuzzwords Numba Presentation
Buzzwords Numba Presentation
kammeyer
 
Mapreduce Algorithms
Mapreduce AlgorithmsMapreduce Algorithms
Mapreduce Algorithms
Amund Tveit
 

Similar to CHEP 2019: Recent developments in histogram libraries (20)

Graph operations in Git version control system
Graph operations in Git version control systemGraph operations in Git version control system
Graph operations in Git version control system
 
Elastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtimeElastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtime
 
Elastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtimeElastic multicore scheduling with the XiTAO runtime
Elastic multicore scheduling with the XiTAO runtime
 
Kim Hammar - Spotify ML Guild Meetup - Feature Stores
Kim Hammar - Spotify ML Guild Meetup - Feature StoresKim Hammar - Spotify ML Guild Meetup - Feature Stores
Kim Hammar - Spotify ML Guild Meetup - Feature Stores
 
Time series data monitoring at 99acres.com
Time series data monitoring at 99acres.comTime series data monitoring at 99acres.com
Time series data monitoring at 99acres.com
 
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
 
R tools for HiC data visualization
R tools for HiC data visualizationR tools for HiC data visualization
R tools for HiC data visualization
 
Big Data + Big Sim: Query Processing over Unstructured CFD Models
Big Data + Big Sim: Query Processing over Unstructured CFD ModelsBig Data + Big Sim: Query Processing over Unstructured CFD Models
Big Data + Big Sim: Query Processing over Unstructured CFD Models
 
Pronto raster v3
Pronto raster v3Pronto raster v3
Pronto raster v3
 
Presentation.pptx
Presentation.pptxPresentation.pptx
Presentation.pptx
 
Presentation.pptx
Presentation.pptxPresentation.pptx
Presentation.pptx
 
Slides 111017220255-phpapp01
Slides 111017220255-phpapp01Slides 111017220255-phpapp01
Slides 111017220255-phpapp01
 
Python for Financial Data Analysis with pandas
Python for Financial Data Analysis with pandasPython for Financial Data Analysis with pandas
Python for Financial Data Analysis with pandas
 
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
Parallel Filter-Based Feature Selection Based on Balanced Incomplete Block De...
 
04 open source_tools
04 open source_tools04 open source_tools
04 open source_tools
 
Developing High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & GoDeveloping High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & Go
 
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
[db analytics showcase Sapporo 2018] B33 H2O4GPU and GoAI: harnessing the pow...
 
Hw09 Hadoop Development At Facebook Hive And Hdfs
Hw09   Hadoop Development At Facebook  Hive And HdfsHw09   Hadoop Development At Facebook  Hive And Hdfs
Hw09 Hadoop Development At Facebook Hive And Hdfs
 
Buzzwords Numba Presentation
Buzzwords Numba PresentationBuzzwords Numba Presentation
Buzzwords Numba Presentation
 
Mapreduce Algorithms
Mapreduce AlgorithmsMapreduce Algorithms
Mapreduce Algorithms
 

More from Henry Schreiner

Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
Henry Schreiner
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
Henry Schreiner
 
Princeton RSE Peer network first meeting
Princeton RSE Peer network first meetingPrinceton RSE Peer network first meeting
Princeton RSE Peer network first meeting
Henry Schreiner
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023
Henry Schreiner
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
Henry Schreiner
 
What's new in Python 3.11
What's new in Python 3.11What's new in Python 3.11
What's new in Python 3.11
Henry Schreiner
 
Everything you didn't know you needed
Everything you didn't know you neededEverything you didn't know you needed
Everything you didn't know you needed
Henry Schreiner
 
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
Henry Schreiner
 
SciPy 2022 Scikit-HEP
SciPy 2022 Scikit-HEPSciPy 2022 Scikit-HEP
SciPy 2022 Scikit-HEP
Henry Schreiner
 
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packagingPyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
Henry Schreiner
 
PyCon2022 - Building Python Extensions
PyCon2022 - Building Python ExtensionsPyCon2022 - Building Python Extensions
PyCon2022 - Building Python Extensions
Henry Schreiner
 
boost-histogram / Hist: PyHEP Topical meeting
boost-histogram / Hist: PyHEP Topical meetingboost-histogram / Hist: PyHEP Topical meeting
boost-histogram / Hist: PyHEP Topical meeting
Henry Schreiner
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
Henry Schreiner
 
CMake best practices
CMake best practicesCMake best practices
CMake best practices
Henry Schreiner
 
RDM 2020: Python, Numpy, and Pandas
RDM 2020: Python, Numpy, and PandasRDM 2020: Python, Numpy, and Pandas
RDM 2020: Python, Numpy, and Pandas
Henry Schreiner
 
HOW 2019: Machine Learning for the Primary Vertex Reconstruction
HOW 2019: Machine Learning for the Primary Vertex ReconstructionHOW 2019: Machine Learning for the Primary Vertex Reconstruction
HOW 2019: Machine Learning for the Primary Vertex Reconstruction
Henry Schreiner
 
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutesHOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
Henry Schreiner
 
ACAT 2019: A hybrid deep learning approach to vertexing
ACAT 2019: A hybrid deep learning approach to vertexingACAT 2019: A hybrid deep learning approach to vertexing
ACAT 2019: A hybrid deep learning approach to vertexing
Henry Schreiner
 
2019 CtD: A hybrid deep learning approach to vertexing
2019 CtD: A hybrid deep learning approach to vertexing2019 CtD: A hybrid deep learning approach to vertexing
2019 CtD: A hybrid deep learning approach to vertexing
Henry Schreiner
 
2019 IML workshop: A hybrid deep learning approach to vertexing
2019 IML workshop: A hybrid deep learning approach to vertexing2019 IML workshop: A hybrid deep learning approach to vertexing
2019 IML workshop: A hybrid deep learning approach to vertexing
Henry Schreiner
 

More from Henry Schreiner (20)

Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
 
Princeton RSE Peer network first meeting
Princeton RSE Peer network first meetingPrinceton RSE Peer network first meeting
Princeton RSE Peer network first meeting
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
 
What's new in Python 3.11
What's new in Python 3.11What's new in Python 3.11
What's new in Python 3.11
 
Everything you didn't know you needed
Everything you didn't know you neededEverything you didn't know you needed
Everything you didn't know you needed
 
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
SciPy22 - Building binary extensions with pybind11, scikit build, and cibuild...
 
SciPy 2022 Scikit-HEP
SciPy 2022 Scikit-HEPSciPy 2022 Scikit-HEP
SciPy 2022 Scikit-HEP
 
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packagingPyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
PyCon 2022 -Scikit-HEP Developer Pages: Guidelines for modern packaging
 
PyCon2022 - Building Python Extensions
PyCon2022 - Building Python ExtensionsPyCon2022 - Building Python Extensions
PyCon2022 - Building Python Extensions
 
boost-histogram / Hist: PyHEP Topical meeting
boost-histogram / Hist: PyHEP Topical meetingboost-histogram / Hist: PyHEP Topical meeting
boost-histogram / Hist: PyHEP Topical meeting
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
 
CMake best practices
CMake best practicesCMake best practices
CMake best practices
 
RDM 2020: Python, Numpy, and Pandas
RDM 2020: Python, Numpy, and PandasRDM 2020: Python, Numpy, and Pandas
RDM 2020: Python, Numpy, and Pandas
 
HOW 2019: Machine Learning for the Primary Vertex Reconstruction
HOW 2019: Machine Learning for the Primary Vertex ReconstructionHOW 2019: Machine Learning for the Primary Vertex Reconstruction
HOW 2019: Machine Learning for the Primary Vertex Reconstruction
 
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutesHOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
 
ACAT 2019: A hybrid deep learning approach to vertexing
ACAT 2019: A hybrid deep learning approach to vertexingACAT 2019: A hybrid deep learning approach to vertexing
ACAT 2019: A hybrid deep learning approach to vertexing
 
2019 CtD: A hybrid deep learning approach to vertexing
2019 CtD: A hybrid deep learning approach to vertexing2019 CtD: A hybrid deep learning approach to vertexing
2019 CtD: A hybrid deep learning approach to vertexing
 
2019 IML workshop: A hybrid deep learning approach to vertexing
2019 IML workshop: A hybrid deep learning approach to vertexing2019 IML workshop: A hybrid deep learning approach to vertexing
2019 IML workshop: A hybrid deep learning approach to vertexing
 

Recently uploaded

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
fredae14
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 

Recently uploaded (20)

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 

CHEP 2019: Recent developments in histogram libraries

  • 1. Recent developments in histogram libraries Hans Dembinski1 Jim Pivarski2 Henry Schreiner2 November 7, 2019 Max Planck Institute for Nuclear Physics, Heidelberg, Germany1 Princeton University, Princeton, USA2
  • 5. Scikit-HEP histogramming plan (Python) • boost-histogram: Fast filling and manipulation (core library) • hist: Simple analysis frontend • aghast: Conversions between histogram libraries • UHI (Unified Histogram Indexing): Cross-library indexing proposal Core histogramming libraries boost-histogram ROOT Universal adaptor aghast Front ends (plotting, etc) hist mpl-hep coffea others 2/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 6. Boost.Histogram C++14 • /boostorg/histogram • Designed by Hans Dembinski • Header only, with header only Boost • Heavily unit-tested: 100% line coverage Features • Static / Dynamic storage (can avoid allocation!) • Static fill becomes 57 lines of vectorized assembly • Supports platforms without exceptions or RTTI • Adding, scaling, slicing, rebinning, projections… • High performance filling and bin iteration • Unique memory-efficient dynamic storage Customizable: • storage • allocator • accumulator • axes • axis metadata • axis transform 3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 7. Boost.Histogram C++14 • /boostorg/histogram • Designed by Hans Dembinski • Header only, with header only Boost • Heavily unit-tested: 100% line coverage Features • Static / Dynamic storage (can avoid allocation!) • Static fill becomes 57 lines of vectorized assembly • Supports platforms without exceptions or RTTI • Adding, scaling, slicing, rebinning, projections… • High performance filling and bin iteration • Unique memory-efficient dynamic storage Customizable: • storage • allocator • accumulator • axes • axis metadata • axis transform Accepted in Boost 1.70! 3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 8. Boost.Histogram C++14 • /boostorg/histogram • Designed by Hans Dembinski • Header only, with header only Boost • Heavily unit-tested: 100% line coverage Features • Static / Dynamic storage (can avoid allocation!) • Static fill becomes 57 lines of vectorized assembly • Supports platforms without exceptions or RTTI • Adding, scaling, slicing, rebinning, projections… • High performance filling and bin iteration • Unique memory-efficient dynamic storage Customizable: • storage • allocator • accumulator • axes • axis metadata • axis transform Will not go away! 3/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 9. Boost.Histogram C++14: Histogram concept Histogram • Axes • Storage Axis types • Regular (circular) • Variable (circular) • Integer (circular) • Category Accumulators • Sum • Mean Single class replaces TH1T, TH2T, TH3T, THnT, TProfile, TProfile2D, TProfile3D and is more general! Storage ( Static Dynamic )Regular axis Regular axis with log transformaxes Optional overflowOptional underflow Accumulator int, double, unlimited, ... 4/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 10. Boost.Histogram C++14: Elegant and powerful #include <boost/histogram.hpp> #include <boost/histogram/ostream.hpp> #include <random> #include <iostream> int main() { namespace bh = boost::histogram; auto hist = bh::histogram(bh::axis::regular{20, -3, 3}); // C++17 version std::default_random_engine eng; std::normal_distribution<double> dist{0, 1}; for(int n = 0; n < 10'000; ++n) hist(dist(eng)); std::cout << hist << std::endl; return 0; } 5/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 11. Boost.Histogram C++14: Example output histogram(regular(20, -3, 3, options=underflow | overflow)) +----------------------------------------------------------+ [-inf, -3) 9 | | [ -3, -2.7) 19 |= | [-2.7, -2.4) 36 |== | [-2.4, -2.1) 110 |===== | [-2.1, -1.8) 191 |========= | [-1.8, -1.5) 275 |============= | [-1.5, -1.2) 518 |========================= | [-1.2, -0.9) 644 |=============================== | [-0.9, -0.6) 914 |============================================ | [-0.6, -0.3) 1107 |===================================================== | [-0.3, 0) 1183 |========================================================= | [ 0, 0.3) 1185 |========================================================= | [ 0.3, 0.6) 1120 |====================================================== | [ 0.6, 0.9) 874 |========================================== | [ 0.9, 1.2) 663 |================================ | [ 1.2, 1.5) 491 |======================== | [ 1.5, 1.8) 322 |=============== | [ 1.8, 2.1) 172 |======== | [ 2.1, 2.4) 79 |==== | [ 2.4, 2.7) 38 |== | [ 2.7, 3) 28 |= | [ 3, inf) 22 |= | +----------------------------------------------------------+ 6/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 12. Boost.Histogram C++14: Performance • call is one at a time fill • fill is new (1.72) array fill • S is static (fixed types) • D is dynamic (unlimited storage) 7/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 13. boost-histogram: Python bindings • Boost.Histogram developed with Python in mind ▶ Original prototype bindings based on Boost::Python • New bindings: /scikit-hep/boost-histogram ▶ 0-dependency build (C++14 only) ▶ State-of-the-art PyBind11 ▶ Designed with the original author, Hans Dembinski • Public beta 0.5.2 currently available, 0.6 coming soon Design Flexibility Speed Distribution 8/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 14. Design • 500+ unit tests run on Azure on Linux, macOS, and Windows • Stays close to Boost.Histogram with Pythonizations C++17 #include <boost/histogram.hpp> namespace bh = boost::histogram; auto hist = bh::histogram( bh::axis::regular{2, 0, 1, "x"}, bh::axis::regular{4, 0, 1, "y"}); hist(.2, .3); // Fill will also be hist(.4, .5); // available in 1.72 hist(.3, .2); Python import boost_histogram as bh hist = bh.Histogram( bh.axis.Regular(2, 0, 1, metadata="x"), bh.axis.Regular(4, 0, 1, metadata="y")) hist.fill( [.2, .4, .3], [.3, .5, .2]) 9/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 15. Design: Manipulations Combine two histograms hist1 + hist2 Scale a histogram hist * 2.0 Sum a histogram contents hist.sum() Access an axis ax = hist.axes[0] ax.edges # The edges array ax.centers # Centers of bins ax.widths # Width of each bin hist.axes.centers # All centers # Etc. Fill 2D histogram with values or arrays hist.fill(a1, a2, weights=[w1, w2], samples=[s1, s2]) Convert contents to Numpy array hist.view() Convert to Numpy style histogram tuple hist.to_numpy() Pickle supported (multiprocessing) pickle.dumps(hist, -1) Copy/deepcopy supported hist2 = copy.deepcopy(hist) Numpy functions provided H, E = bh.numpy.histogram(...) 10/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 16. Design: Unified Histogram Indexing (UHI) The language here (bh.loc, etc) is defined in such a way that any library can provide them - “Unified”. Access v = h[b] # Returns bin contents, indexed by bin number v = h[bh.loc(b)] # Returns the bin containing the value v = h[bh.underflow] # Underflow and overflow can be accessed with special tags Setting h[b] = v h[bh.loc(b)] = v h[bh.underflow] = v 11/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 17. Design: Unified Histogram Indexing (UHI) (2) h == h[:] # Slice over everything h2 = h[a:b] # Slice of histogram (includes flow bins) h2 = h[:b] # Leaving out endpoints is okay h2 = h[bh.loc(v):] # Slices can be in data coordinates, too h2 = h[::bh.sum] # Remove an axis by summation h2 = h[0:5:bh.sum] # Can add endpoints h2 = h[::bh.rebin(2)] # Modification operations (rebin) h2 = h[a:b:bh.rebin(2)] # Modifications can combine with slices h2 = h[a:b, ...] # Ellipsis work just like normal numpy • Docs are here • Description may move to a new repository 12/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 18. Flexibility: Axis types • bh.axis.Regular ▶ under/overflow ▶ growth=True ▶ circular=True ▶ transform=Log() ▶ transform=Sqrt() ▶ transform=Pow(v) • bh.axis.Integer ▶ under/overflow ▶ growth=True • bh.axis.Variable ▶ under/overflow ▶ growth=True • bh.axis.Category ▶ int or str ▶ growth=True 0 0.5 1 bh.axis.Regular(10, 0, 1) 𝜋/2 0, 2𝜋 𝜋 3𝜋/3 bh.axis.Regular(8, 0, 2*np.pi, circular=True) 0 0.3 0.5 1 bh.axis.Variable([0, .3, .5, 1]) 0 1 2 3 4 bh.axis.Integer(0, 5) 2 5 8 3 7 bh.axis.Category([2, 5, 8, 3, 7]) 13/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 19. Performance • Factor of 2 faster than 1D regular binning in Numpy 1.17 ▶ Currently no specialization, just a 1D regular fill ▶ Could be optimized further for common fills • Factor of 6-10 faster than 2D regular binning Numpy 14/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 20. Distribution If pip install boost-histogram fails, we have failed. • Docker ManyLinux1 GCC 9.2: /scikit-hep/manylinuxgcc • Used in /scikit-hep/iMinuit, /scikit-hep/awkward1 • Described on iscinumpy.gitlab.io, also see /scikit-hep/azure-wheel-helpers Wheels • manylinux1 32/64 bit, Py 2.7, 3.5, 3.6, 3.7 • manylinux2010 64 bit, Py 2.7, 3.5, 3.6, 3.7, 3.8 • macOS 10.9+ 64 bit, Py 2.7, 3.6, 3.7, 3.8 • Windows 32/64 bit, Py 2.7, 3.6, 3.7 Source • SDist on PyPI • Build directly from GitHub Conda-Forge • All (including 3.8) except 2.7 on Windows python3 -m pip install boost-histogram conda install -c conda-forge boost-histogram 15/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 21. Hist hist is the ‘wrapper’ piece that does plotting and interacts with the rest of the ecosystem. Plans • Easy plotting adaptors (mpl-hep) • Serialization formats via aghast (ROOT, HDF5) • Implicit multithreading • Statistical functions (Like TEfficiency) • Multihistogram plotting (HistBook) • Interaction with fitters (ZFit, GooFit, etc) • Bayesian Blocks algorithm from Scikit-HEP • Command line histograms for stream of numbers Call for contributions • What do you need? • Looking for a student interested in development Join in the development! This should combine the best features of other packages. 16/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 22. aghast aghast is a histogramming library that does not fill histograms and does not plot them. /scikit-hep/aghast • A memory format for histograms, like Apache Arrow • Converts to and from other libraries • Uses flatbuffers to hold histograms • Indexing ideas inspired the UHI Available Binnings • IntegerBinning • RegularBinning • HexagonalBinning • EdgesBinning • IrregularBinning • CategoryBinning • SparseRegularBinning • FractionBinning • PredicateBinning • VariationBinning 17/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 23. Conclusions • Boost.Histogram C++14 is a solid foundation • boost-histogram for Python is a core histogramming library • Hist will be developed next and is analysis friendly • aghast is the glue to ROOT/everything else Core histogramming libraries boost-histogram ROOT Universal adaptor aghast Front ends (plotting, etc) hist mpl-hep coffea others 18/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 24. Questions ?Supported by • IRIS-HEP, NSF OAC-1836650 • DIANA-HEP, NSF OAC-1558216, NSF OAC-1558233, NSF OAC-1558219 19/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019
  • 25. Storage types • bh.storage.Int • bh.storage.Double • bh.storage.Unlimited • bh.storage.AtomicInt • bh.storage.Weight • bh.storage.Profile • bh.storage.WeightedProfile 19/19Dembinski, Pivarski, Schreiner Recent developments in histogram libraries November 7, 2019