Unified Histogram Interface (UHI)

1.0.0 · active · verified Sat Apr 11

UHI provides a Unified Histogram Interface, a set of protocols and utilities to help library authors work with histograms consistently across different backends. It aims to standardize histogram operations, access, and serialization. The current version is 1.0.0, and it follows an active release cadence with regular updates.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates creating a histogram using the `hist` library, wrapping it with `uhi.hist.Histogram`, accessing its view, and then serializing and deserializing it using UHI's built-in functionality introduced in v1.0.0.

import numpy as np
import hist
from uhi.hist import Histogram
from uhi.serialization import serialize, deserialize
import tempfile
import os

# Create a sample histogram using the 'hist' library (uhi's recommended backend)
h = (
    hist.new.Reg(10, 0, 10, name="x", label="X-axis")
    .Reg(5, -5, 5, name="y", label="Y-axis")
    .Double()
)
h.fill(x=np.random.rand(100) * 10, y=np.random.randn(100) * 5)

# Wrap it in UHI Histogram for a consistent interface
uhi_h = Histogram(h)

# Access data view
print(f"Sum of entries: {uhi_h.view().sum()}")

# Serialization example (major feature in v1.0.0)
with tempfile.TemporaryDirectory() as tmpdir:
    filepath_hdf5 = os.path.join(tmpdir, "my_histogram.hdf5")
    serialize(uhi_h, filepath_hdf5) # Automatically infers format from extension
    print(f"Serialized histogram to {filepath_hdf5}")

    deserialized_uhi_h = deserialize(filepath_hdf5)
    print(f"Deserialized histogram. Sum: {deserialized_uhi_h.view().sum()}")
    assert np.allclose(uhi_h.view(), deserialized_uhi_h.view())

print("UHI quickstart complete!")

view raw JSON →