Skip to main content

Fast integer image histograms

Project description

ihist

Fast histogram computation for image data with APIs in Python, Java, and C.

Currently in early development and API may change.

Only 64-bit platforms are supported (let us know in an issue if you have a use case requiring 32-bit support).

Jump to: Python API, Java API, C API, Performance notes.

Python API

Python Quick Start

pip install ihist
import numpy as np
import ihist

# Grayscale image
image = np.random.randint(0, 256, (100, 100), dtype=np.uint8)
hist = ihist.histogram(image)  # Shape: (256,)

# RGB image
rgb = np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)
hist = ihist.histogram(rgb)  # Shape: (3, 256)

# With masking
mask = np.ones((100, 100), dtype=np.uint8)
hist = ihist.histogram(image, mask=mask)

Python Function

The Python API provides a single function for computing histograms:

import ihist

histogram = ihist.histogram(image, bits=None, mask=None,
                            components=None, out=None,
                            accumulate=False, parallel=True)

Python Parameters

image : array_like Input image data. Must be uint8 or uint16, and 1D, 2D, or 3D.

  • 1D arrays (W,) are interpreted as (1, W, 1)
  • 2D arrays (H, W) are interpreted as (H, W, 1)
  • 3D arrays (H, W, C) use C as number of components

Total pixel count must not exceed 2^32-1.

bits : int, optional Number of significant bits per sample. If not specified, defaults to full depth (8 for uint8, 16 for uint16). Valid range: [0, 8] for uint8, [0, 16] for uint16.

mask : array_like, optional Per-pixel mask. Must be uint8. Shape must match image dimensions:

  • For 1D images (W,): mask must be 1D, shape (W,)
  • For 2D/3D images: mask must be 2D, shape (H, W)

Only pixels with non-zero mask values are included. If not specified, all pixels are included.

components : sequence of int, optional Indices of components to histogram. If not specified, all components are histogrammed. Each index must be in range [0, n_components).

Examples:

  • [0] - histogram only the first component (e.g., red in RGB)
  • [0, 1, 2] - histogram first three components (e.g., RGB in RGBA, skipping alpha)

out : array_like, optional Pre-allocated output buffer. Must be uint32, and either:

  • 1D with shape (2^bits,) for single-component histogram, or
  • 2D with shape (n_hist_components, 2^bits)

If not specified, a new array is allocated and returned.

accumulate : bool, optional If False (default), the output buffer is zeroed before computing the histogram. If True, histogram values are accumulated into the existing buffer values. No effect if out is not given.

parallel : bool, optional If True (default), allows automatic multi-threaded execution for large images. If False, guarantees single-threaded execution.

Python Return Value

histogram : ndarray Histogram(s) as uint32 array.

  • If the image is 1D or 2D and components is not specified, returns 1D array of shape (2^bits,)
  • If the image is 3D or components is explicitly specified, returns 2D array of shape (n_hist_components, 2^bits)
  • If out was provided, returns the same array after filling

Java API

Java Installation

The Java bindings are available on Maven Central. You need both the main JAR and a platform-specific natives JAR containing the JNI library. The native library is automatically extracted and loaded at runtime.

Available platforms: Linux x86_64, macOS arm64, macOS x86_64, Windows x86_64.

Windows note: The Windows native library requires the Microsoft Visual C++ Redistributable. Most systems have this installed. If you get an error, install it from https://aka.ms/vc14/vc_redist.x64.exe.

Maven
<properties>
    <ihist.version>0.1.2</ihist.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.github.marktsuchida</groupId>
        <artifactId>ihist</artifactId>
        <version>${ihist.version}</version>
    </dependency>
    <dependency>
        <groupId>io.github.marktsuchida</groupId>
        <artifactId>ihist</artifactId>
        <version>${ihist.version}</version>
        <classifier>${ihist.natives.classifier}</classifier>
    </dependency>
</dependencies>

<profiles>
    <profile>
        <id>natives-linux-x86_64</id>
        <activation>
            <os><name>Linux</name><arch>amd64</arch></os>
        </activation>
        <properties>
            <ihist.natives.classifier>natives-linux-x86_64</ihist.natives.classifier>
        </properties>
    </profile>
    <profile>
        <id>natives-macos-arm64</id>
        <activation>
            <os><family>mac</family><arch>aarch64</arch></os>
        </activation>
        <properties>
            <ihist.natives.classifier>natives-macos-arm64</ihist.natives.classifier>
        </properties>
    </profile>
    <profile>
        <id>natives-macos-x86_64</id>
        <activation>
            <os><family>mac</family><arch>x86_64</arch></os>
        </activation>
        <properties>
            <ihist.natives.classifier>natives-macos-x86_64</ihist.natives.classifier>
        </properties>
    </profile>
    <profile>
        <id>natives-windows-x86_64</id>
        <activation>
            <os><family>windows</family><arch>amd64</arch></os>
        </activation>
        <properties>
            <ihist.natives.classifier>natives-windows-x86_64</ihist.natives.classifier>
        </properties>
    </profile>
</profiles>
Gradle (Kotlin DSL)
plugins {
    id("com.google.osdetector") version "1.7.3"
}

val ihistVersion = "0.1.2"
val ihistNativesClassifier = when {
    osdetector.os == "linux" && osdetector.arch == "x86_64" -> "natives-linux-x86_64"
    osdetector.os == "osx" && osdetector.arch == "aarch_64" -> "natives-macos-arm64"
    osdetector.os == "osx" && osdetector.arch == "x86_64" -> "natives-macos-x86_64"
    osdetector.os == "windows" && osdetector.arch == "x86_64" -> "natives-windows-x86_64"
    else -> throw GradleException("Unsupported platform: ${osdetector.os}-${osdetector.arch}")
}

dependencies {
    implementation("io.github.marktsuchida:ihist:$ihistVersion")
    runtimeOnly("io.github.marktsuchida:ihist:$ihistVersion:$ihistNativesClassifier")
}
Gradle (Groovy DSL)
plugins {
    id 'com.google.osdetector' version '1.7.3'
}

def ihistVersion = '0.1.2'
def ihistNativesClassifier
switch ("${osdetector.os}-${osdetector.arch}") {
    case 'linux-x86_64': ihistNativesClassifier = 'natives-linux-x86_64'; break
    case 'osx-aarch_64': ihistNativesClassifier = 'natives-macos-arm64'; break
    case 'osx-x86_64': ihistNativesClassifier = 'natives-macos-x86_64'; break
    case 'windows-x86_64': ihistNativesClassifier = 'natives-windows-x86_64'; break
    default:
        throw new GradleException(
            "Unsupported platform: ${osdetector.os}-${osdetector.arch}")
}

dependencies {
    implementation "io.github.marktsuchida:ihist:$ihistVersion"
    runtimeOnly "io.github.marktsuchida:ihist:$ihistVersion:$ihistNativesClassifier"
}

Java Version Compatibility

The library targets Java 8 and works with all later versions:

  • Java 8: Use as a regular classpath dependency
  • Java 9+: Can be used on the classpath or as an automatic module with name io.github.marktsuchida.ihist

Java Quick Start

import io.github.marktsuchida.ihist.HistogramRequest;
import java.nio.IntBuffer;

// Grayscale image
byte[] image = new byte[100 * 100];
IntBuffer hist = HistogramRequest.forImage(image, 100, 100).compute(); // 256 bins
// hist.remaining() == 256, access with hist.get(i)

// RGB image
byte[] rgb = new byte[100 * 100 * 3];
IntBuffer hist = HistogramRequest.forImage(rgb, 100, 100, 3).compute(); // 3 * 256 bins

// With advanced options
IntBuffer hist = HistogramRequest.forImage(image, 100, 100)
    .roi(10, 10, 80, 80)       // Region of interest
    .mask(maskData, 80, 80)    // Per-pixel mask
    .bits(8)                   // Significant bits
    .parallel(true)            // Allow multi-threading
    .compute();

Java Classes

HistogramRequest - Builder-style interface:

// Multi-component image (e.g., RGB)
IntBuffer hist = HistogramRequest.forImage(image, width, height, 3)
    .selectComponents(0, 1, 2)      // Which components to histogram
    .roi(x, y, roiWidth, roiHeight) // Region of interest
    .mask(maskData, maskWidth, maskHeight)  // Per-pixel mask with dimensions
    .maskOffset(offsetX, offsetY)   // Mask offset for ROI alignment
    .bits(sampleBits)               // Significant bits per sample
    .output(preallocatedBuffer)     // Pre-allocated output (size must be exact)
    .accumulate(true)               // Add to existing values
    .parallel(true)                 // Allow multi-threading
    .compute();

// All methods except for forImage() and compute() are optional.

// The returned IntBuffer has position/limit set to cover the histogram data.
// If output(IntBuffer) was used, the returned buffer is a duplicate that shares
// storage with the original; the original's position/limit are not modified.
// For heap buffers (default or when output(int[]) was used), get the array:
int[] array = hist.array();

IHistNative - Low-level JNI wrapper (advanced):

// Buffer-based (direct or array-backed buffers)
IHistNative.histogram8(sampleBits, imageBuffer, maskBuffer,
    height, width, imageStride, maskStride, nComponents, componentIndices,
    histogramBuffer, parallel);

(And, similarly, histogram16() for 16-bit images.)

Java Input Types

The Java API supports both arrays and NIO buffers:

  • 8-bit images: byte[] or ByteBuffer
  • 16-bit images: short[] or ShortBuffer
  • Mask: byte[] or ByteBuffer
  • Histogram output: int[] or IntBuffer

Java Notes

  • Signed types: Java byte is signed (-128 to 127), but pixel values are interpreted as unsigned (0 to 255). The native code correctly handles this. Similarly for short with 16-bit images.

  • Accumulation: Like the C API, histogram values are accumulated. Use .accumulate(false) (default) to zero the output first.

  • Exact buffer sizes: Buffer and array parameters must have exactly the required size (not just at least the required size). For the image buffer, this is width * height * nComponents; for the mask, width * height; for the histogram output, nHistComponents * 2^bits. For buffers, the size that must match is the value of remaining() (distance from position() to limit()), not capacity().

  • Thread safety: The histogram functions are thread-safe for independent calls. Multiple threads can compute histograms simultaneously.

C API

C Installation

Dependencies: oneTBB (optional but recommended for parallelization). TBB should be installed as a shared library and discoverable via pkg-config. (TBB as a static library works but is not recommended unless ihist is the only code using TBB in your application.)

Build and install:

meson setup builddir --prefix=/your/install/path
meson compile -C builddir
meson install -C builddir

On Windows, add --vsenv to have Meson set up the Visual Studio environment.

Building with Clang (CXX=clang++ or, on Windows, CXX=clang-cl) is recommended for best performance, as benchmarking and tuning were done with Clang.

To build without TBB, add -Dtbb=disabled to the meson setup command.

(just and the provided justfile can be used for development builds but is not recommended for production builds.)

Using in your project:

Meson:

ihist_dep = dependency('ihist')

CMake:

find_package(PkgConfig REQUIRED)
pkg_check_modules(IHIST REQUIRED IMPORTED_TARGET ihist)
target_link_libraries(your_target PkgConfig::IHIST)

C Functions

The C API provides two functions for computing histograms of 2D image data:

  • ihist_hist8_2d() - for 8-bit samples (uint8_t)
  • ihist_hist16_2d() - for 16-bit samples (uint16_t)

Both functions have identical behavior except for the sample data type.

#include <ihist/ihist.h>

void ihist_hist8_2d(
    size_t sample_bits,
    uint8_t const *restrict image,
    uint8_t const *restrict mask,
    size_t height,
    size_t width,
    size_t image_stride,
    size_t mask_stride,
    size_t n_components,
    size_t n_hist_components,
    size_t const *restrict component_indices,
    uint32_t *restrict histogram,
    bool maybe_parallel);

void ihist_hist16_2d(
    size_t sample_bits,
    uint16_t const *restrict image,
    uint8_t const *restrict mask,
    size_t height,
    size_t width,
    size_t image_stride,
    size_t mask_stride,
    size_t n_components,
    size_t n_hist_components,
    size_t const *restrict component_indices,
    uint32_t *restrict histogram,
    bool maybe_parallel);

These functions compute histograms for one or more components (stored as interleaved multi-sample pixels) from image data. They support:

  • Multi-component images (e.g., grayscale, RGB, RGBA)
  • Selective histogramming of specific components
  • Optional per-pixel masking
  • Region of interest (ROI) processing via stride and pointer offset
  • Automatic parallelization for large images
  • Arbitrary bit depths (not just full 8 or 16 bits)

C Parameters

sample_bits Number of significant bits per sample. Valid range: 1-8 for ihist_hist8_2d(), 1-16 for ihist_hist16_2d(). The histogram will contain 2^sample_bits bins per sample.

Values with bits set beyond sample_bits are discarded and not counted in any bin.

image Pointer to image data. Samples are interleaved in row-major order:

  • Row 0, pixel 0: all samples
  • Row 0, pixel 1: all samples
  • ...
  • Row 1, pixel 0: all samples
  • ...

May be NULL if height or width is 0.

mask (optional) Per-pixel mask for selective histogramming. If non-NULL, must point to height * mask_stride uint8_t values. Only pixels where the corresponding mask value is non-zero are included in the histogram.

Pass NULL to histogram all pixels.

height Image height in pixels. May be 0 for empty input.

width Image width in pixels. May be 0 for empty input.

image_stride Row stride for the image in pixels (not bytes). Must be ≥ width.

When image_stride equals width, the image is treated as contiguous. Use image_stride > width together with an offset image pointer to process a rectangular region of interest (ROI) within a larger image.

mask_stride Row stride for the mask in pixels (not bytes). Must be ≥ width.

When mask_stride equals width, the mask is treated as contiguous. This parameter allows the mask to have a different stride from the image, which is useful, for example, if you have a mask that covers only a rectanglular ROI of the image.

n_components Number of interleaved per pixel. Examples:

  • 1 for grayscale
  • 3 for RGB
  • 4 for RGBA

Must be > 0.

n_hist_components Number of components to histogram. Must be > 0.

This allows histogramming a subset of components, such as skipping the alpha component in RGBA images.

component_indices Array of n_hist_components indices specifying which components to histogram. Each index must be in the range [0, n_components).

Examples:

  • {0} - histogram only the first component (e.g., red in RGB)
  • {0, 1, 2} - histogram first three components (e.g., RGB in RGBA, skipping alpha)
  • {1, 2, 3} - histogram last three components (e.g., skip first component in ARGB)

Must not be NULL.

histogram (output, accumulated) Output buffer for histogram data. Must point to n_hist_components * 2^sample_bits uint32_t values.

Histograms for each component are stored consecutively:

  • Bins for component_indices[0]: histogram[0] to histogram[2^sample_bits - 1]
  • Bins for component_indices[1]: histogram[2^sample_bits] to histogram[2 * 2^sample_bits - 1]
  • ...

Important: The histogram is accumulated into this buffer. Existing values are added to, not replaced. To obtain a fresh histogram, zero-initialize the buffer before calling the function.

maybe_parallel Controls parallelization.

  • true - Allows automatic multi-threaded execution for large images, if ihist was built with parallelization support (TBB).
  • false - Guarantees single-threaded execution.

Performance

The library uses cache-conscious algorithms with platform-specific tuning for x86_64 and Apple ARM64. The details below are subject to change upon future tuning.

Parallelization

When built with TBB support (default for released binaries), histogram computation automatically parallelizes for large images (currently ≥ 1 M pixels). Only physical CPU cores are used (hyperthreads are excluded) because histogramming is almost always backend-bound (that is, bottlenecked by CPU resources that are shared between logical cores).

Although minimizing latency is a goal, we also want to maintain efficiency: CPU time should not be consumed when it does not contribute much to speedup. This is the reason for the relatively large parallelization threshold; we also increase the thread count only gradually above the threshold.

Use parallel=False (Python), .parallel(false) (Java), or maybe_parallel=false (C) to force single-threaded execution.

Optimized Pixel Formats

The following pixel formats have specialized optimized code paths:

  • Grayscale (1 component)
  • RGB (3 components, histogramming all)
  • RGBx (or BGRx, RGBA, etc.; 4 components, histogramming first 3)
  • xRGB (or xBGR, ARGB, etc.; 4 components, histogramming last 3)

Other component selections (e.g., histogramming only the red and blue channels of an RGB image) fall back to a slower generic implementation. More optimized pixel formats could be added, subject to tradeoffs with binary size and tuning effort.

Bit Depth

  • 8-bit images use 256-bin histograms
  • 16-bit images with 12 or fewer significant bits use 4096-bin histograms
  • 16-bit images with more than 12 significant bits use 65536-bin histograms

When a bit depth other than 8 (for 8-bit images) or 12 or 16 (for 16-bit images) is requested, the resulting histogram is simply truncated.

Memory Layout

Contiguous images are the fastest but 2D strided images are also optimized, so that histogramming rectangular regions of interest does not require copying the image or mask.

Zero-copy Language Bindings

The Python and Java bindings try to avoid copying the input and output arrays as much as possible. However, there are cases where this cannot be avoided:

  • Python: C-contiguous arrays are used directly, as are 2D (single-component) Fortran-contiguous arrays. 3D Fortran-contiguous arrays require a copy because color components must be interleaved in memory. Sliced views where neither spatial axis is contiguous (such as arr[:, ::2] on a row-major array) are also copied.

  • Java: Buffers that are not direct and whose .hasArray() method returns false (this includes read-only heap buffers and ShortBuffer/IntBuffer that are views of heap byte buffers) cannot be accessed via JNI; these are copied to temporary direct buffers. Direct buffers are preferred if you have the choice, especially for large images, because pinning heap buffers for JNI access can interfere with the smooth operation of the garbage collector.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ihist-0.1.3.tar.gz (100.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ihist-0.1.3-cp314-cp314t-win_amd64.whl (187.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

ihist-0.1.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (224.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp314-cp314t-macosx_11_0_arm64.whl (145.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

ihist-0.1.3-cp314-cp314t-macosx_10_15_x86_64.whl (152.6 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

ihist-0.1.3-cp314-cp314-win_amd64.whl (187.2 kB view details)

Uploaded CPython 3.14Windows x86-64

ihist-0.1.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (226.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp314-cp314-macosx_11_0_arm64.whl (144.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

ihist-0.1.3-cp314-cp314-macosx_10_15_x86_64.whl (151.3 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

ihist-0.1.3-cp313-cp313-win_amd64.whl (182.8 kB view details)

Uploaded CPython 3.13Windows x86-64

ihist-0.1.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (226.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp313-cp313-macosx_11_0_arm64.whl (143.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ihist-0.1.3-cp313-cp313-macosx_10_15_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.13macOS 10.15+ x86-64

ihist-0.1.3-cp312-cp312-win_amd64.whl (182.8 kB view details)

Uploaded CPython 3.12Windows x86-64

ihist-0.1.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (226.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (143.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ihist-0.1.3-cp312-cp312-macosx_10_15_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.12macOS 10.15+ x86-64

ihist-0.1.3-cp311-cp311-win_amd64.whl (182.8 kB view details)

Uploaded CPython 3.11Windows x86-64

ihist-0.1.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (226.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (144.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

ihist-0.1.3-cp311-cp311-macosx_10_15_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.11macOS 10.15+ x86-64

ihist-0.1.3-cp310-cp310-win_amd64.whl (182.9 kB view details)

Uploaded CPython 3.10Windows x86-64

ihist-0.1.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (226.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

ihist-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (144.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

ihist-0.1.3-cp310-cp310-macosx_10_15_x86_64.whl (151.3 kB view details)

Uploaded CPython 3.10macOS 10.15+ x86-64

File details

Details for the file ihist-0.1.3.tar.gz.

File metadata

  • Download URL: ihist-0.1.3.tar.gz
  • Upload date:
  • Size: 100.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3.tar.gz
Algorithm Hash digest
SHA256 5be2d5f02ce8f0771272deed7fa5a47c40b9dc5d0fa673f02a1f07218766169c
MD5 42ae86020301f004d0c4e46c64e1a1a1
BLAKE2b-256 fec136eea91093807da22de06b97b4a24018a5641c5a0b0a788e83690d6442a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3.tar.gz:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 187.8 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 80a5ecdd2813466f25ac364b9ba822d9c32b33da9636fffda8dc0c309342dc40
MD5 1f43a3f805bba9d7df1e8adfb76c19d2
BLAKE2b-256 24772ce1976407bb1786098ad2b113d84b564894b14c55451d2d053095075294

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314t-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 860ee766489deeb64773371269a3b45245bd7074e9cbb18440864e70395a189f
MD5 9a4482f99a89093007d6ce25a6d9fce2
BLAKE2b-256 57e16fd5696ada75eafbbfe54cdd9dc64472e3cbc4d6e5d37d6a43e31c655c1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4801a58ac4a6d94c82dcfea3ac2aebc59b3eff814537516e2ecb1d984a8e44ae
MD5 087842765dbf3e307dd099a438eefa5f
BLAKE2b-256 6f0d9d8ab33125ea1ff14f07233f78c50dc6e6594d7c984384e11c86ad326413

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0c4fea60e8832370743f64b2a7d7f2b2461f4b1d8ab924f335a7a8f21aa6bd9e
MD5 61addebdb9079358061865f620205217
BLAKE2b-256 7847d4f70ab0e372a0d9c0b4e2266a836438390421f8a1ec7edaf1c8f353ffee

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 187.2 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bda872e86a5f5cdb7f38736e1ebbdbb6fe3bc8c8b35bbc2edd5c298992f95587
MD5 e213a87c2d6b6631017f7593945bf7c0
BLAKE2b-256 107b803ffcf001f7a7d64ef6f75a5c35902d51d51db2ec4a136c4d0bdf5718e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 69d775c4e2a1d0872e9f8051944b5ad04eaade53ba45e202aadb44fa23d6ffb9
MD5 5a60678beeb46d566568d56d7e606e79
BLAKE2b-256 b222881f58514d7717a29188e1057d335e0a534b7bc9c507e7f073227bd26664

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a210995375e793567e037f26bd9cc266abe442f2ecce65ed96a32cb3be62cad
MD5 3e2e1b47ff801e4235ffbaba2b45286b
BLAKE2b-256 c5524365f57266bc0b600297793e93a16cf44502788cd213d75cb18cea77449b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 840ed8a0d8587e5fd63e1b8fa8793d7fd6feeb3376c48c1734a404d6fca2c24b
MD5 a97ac40fa3cae0ae7f253ad858e4aacb
BLAKE2b-256 679b3fc2773b1ae52b9bc2a6e84d9afe0b1eac45d36a607116c1667997044ad5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 182.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 405f66fb1927f566075428402289d45d89f98f1d62fb0e2dd85e3b12f4644e49
MD5 16910f8a3f0bcc0d01699f55787b282f
BLAKE2b-256 12d96f4c7d4147275ca9648aade54f3599fd3cde90cbe887a091700880d48efb

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp313-cp313-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db63091ba3f2c3fc0434bd1b3fe28455fc803a5962b489ed26701ed2099b72e5
MD5 47f1ee628828645e9692139b9e593aba
BLAKE2b-256 b443e5771a91fde55817a284b9753d0a46689b8adcc99c8eed0ed4788c15bcc4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94fca3f826aac8b4e8d3de0e1132fceafd26f476d8ebd4f7a367fc98a479d282
MD5 4451e09ff17b4500ca7c17298d436b36
BLAKE2b-256 834a8e5b21669c8f3b1e08259fef27a5c08c698b5fe6bc3f4e0796e5a37202a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp313-cp313-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp313-cp313-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 99281323ad2210a367b18bbc9960fd89edd9689b8f5fb59d96a5979a79e75823
MD5 9b5f05c6bc00a45e2d6cc7cbc0e5751c
BLAKE2b-256 3a61a1ee4fe302d28697254396b272b63506bb33151e77f16697c3ede7653305

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp313-cp313-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 182.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0762a469749bf04feee789da61d319f47a5e26ef450de1c6c1dec4a6d0d4b0da
MD5 ed504077062bf852c3f0f55284cb6cc5
BLAKE2b-256 3bf66c154c70ca55888b3fbe29fba975a7873d4785dabec90823cb962447cfa2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp312-cp312-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 01bd5aec5d326c3dea9b3d2c96fe26065cb8d45edbfc700080cd24515b45f1bf
MD5 9d9e21dc259ca0deedf92c9d86cc38d0
BLAKE2b-256 877feca98ebc90319106546474622280c7b8915fad6f94bc883dceb8417d61ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1f6a4537385e0a3eb57fc4c592ac6058fa2438bcdbdcd44a6669c4d39f17134
MD5 862e4e1f285a81481f6bb3a36193cc5c
BLAKE2b-256 54df020d90aaee7fe752bf39464fe5453dd40b57f6abe03f58a8bde523ef9d9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 89a97dca62ced8cca88eded2a3be155bbfab03bda1347584588dcdafd40b3a34
MD5 31b4d319b2bc937871608f6096397425
BLAKE2b-256 a81272526c5c6a4f8cb32af2423493470c23a61264512f1c9e6fd4d9f2ca3665

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp312-cp312-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 182.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3deb67c23fd9ec26645a38748eeaf80744eb67d870b6ab8b307415197cf1e97f
MD5 53e504ad5e2156018eb34a62a8ea5ad7
BLAKE2b-256 675b73cb1f9e4fcac46f6ad0b2b4b9c31ece233f66b3f2d56cb0edc0489820b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp311-cp311-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ea617418ee259bd3fea80029aeaf965cfae5ac4069d1de7d5a69ff04b9b643f
MD5 ee5cca3a01fbcf946c3ed364dd91c98a
BLAKE2b-256 556f2b40b291453f69aff244acbd9bdfc407d7d1100b996b5abe926797496ffa

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b739037aebb284b579037cf2a4a3307eabcc4f0790d9f00a5139a4b9e513a261
MD5 7f818eded239f555c231f64e2389bc6b
BLAKE2b-256 a102558b3becc4d843b1b11f4470eded6455db05856b19a35bf184d58de94cbb

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 84ec47d6855db1012ff4ac2254166f438b2eba96bb25ce29d779aa054f63db21
MD5 9cbec4bafc9ad08eca84e288a0b0e576
BLAKE2b-256 6857827076e96a536ddc9c9b299c399874fb9ffdd694ea22b117c93b433f46f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp311-cp311-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: ihist-0.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 182.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ihist-0.1.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 73a0ca7743573278f65154c9a24b80b32f8d5f45ab2f64f512e787009e842bee
MD5 d7f8970f977b16105d3accfa1c8c4b63
BLAKE2b-256 0c2cef2f3704f193bc965fc28161eafc36aaa70ee555d518658111e04857a257

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp310-cp310-win_amd64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a7df0eb7e9f0e4483ebaa996b94c13260fe2d37ed0d4a302e9ae9b92c73532cb
MD5 605ab80a09c6fc202248c8f45d48d9f3
BLAKE2b-256 b7d02f42e6d5e441cd43bdd6d78814ba101f6c77be03b3e5e10446e843ac1ded

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de457cc515d31fbd2d672330106d12486dcdfbf61070dc8f338bb7918fad6ee0
MD5 502159a996f1a00e394667c4e22cad20
BLAKE2b-256 eee5908faa0d0e8ccd607bfe9a937b4896244b88744e2e4e80aca21bb140b906

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ihist-0.1.3-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ihist-0.1.3-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 e9bd5fd556aeb5b5f9bb6e7bdf2f4cf306e0a2a5f6d60f1d7947e06bcf3a519b
MD5 be02aff616e42de5c8b5c98f7c506888
BLAKE2b-256 8df3daaa6bc28b1c0af92e821811c30c2202746ac90dc8bf3965ce79882afed1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ihist-0.1.3-cp310-cp310-macosx_10_15_x86_64.whl:

Publisher: ci.yml on marktsuchida/ihist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page