Skip to main content

High-performance numerical circular buffers for Python, featuring O(1) statistical accumulators.

Project description

NumCircBuf: High-performance numerical circular buffers for Python, featuring O(1) statistical accumulators.

PyPI version License Python Version Build Status

Table of Contents

Overview

NumCircBuf is a high-performance Python library providing numerical circular buffers, including O(1) accumulators and specialized calculation variants. Built with Cython for a balance between performance and maintainability, it provides efficient data structures for real-time signal processing, time-series analysis, and other performance-critical applications.

Features

  • Multiple Buffer Types – includes specialized buffers for different needs:
    • BlockingCircBuffer – blocking producer/consumer circular buffer for multi-threaded applications.
    • OverwriteCircBuffer – optimized for high-throughput writes
    • IntegratedGatedBuffer – specialized for calculating gated loudness/energy statistics
    • O(1) Accumulators – constant-time operations for statistics, implemented in specialized buffers:
      • RunningMeanBuffer – O(1) mean
      • RunningMeanSqBuffer – O(1) mean-square
  • NumPy Integration: Seamless integration with NumPy arrays.
  • Type Safety: supports fp32, fp64, int32, int64, uint32, uint64.
  • Comprehensive Documentation: Detailed documentation and performance benchmarks.

Installation

pip install numcircbuf

Or install from source:

git clone https://github.com/basimali-ai/NumCircBuf.git
cd NumCircBuf
pip install .

For development installation with all dependencies (from source):

git clone https://github.com/basimali-ai/NumCircBuf.git
cd NumCircBuf
pip install -e .[dev]

Verification

To verify the installation and check the version:

pip show numcircbuf && python -c "import numcircbuf; print('\n' + '-'*20 + '\nRunning smoke test...'); print(f'Library version: {numcircbuf.__version__}'); print(numcircbuf.OverwriteCircBuffer(10, 'never')); print(numcircbuf.RunningMeanBuffer(10, 'calculation')); print('-'*20 + '\n--- Installation verification successful ---')"

Common Buffer API

All buffer types expose the following methods:

  • clear(): Clears the buffer.
  • clear_nan(): Removes NaN values.
  • clear_infs(): Removes Inf values.
  • __len__(): Current buffer size.
  • maxlen: Maximum buffer capacity.
  • view(): Returns a read-only logical view of the buffer (implements ViewProtocol).

All bulk extend methods have an additional warn_size boolean argument which enables or disables warnings when the block size exceeds the buffer's maxlen. It is enabled by default.

Note: In all buffers nan/inf values are allowed to be appended/extended with, as they are valuable data points.

The Buffer View (ViewProtocol)

The object returned by the view() method provides a zero-copy, read-only logical view of the circular buffer. It is exposed as a structural Protocol to provide strong type hints and an explicit contract, while the underlying implementation remains internal.

  • Behaves like a 1D NumPy array in logical order.
  • Has a to_numpy() function which provides a contiguous NumPy array copy of the data in logical order.
  • All returned arrays are independent (no shared memory).
  • Any slicing produces a 1D NumPy array copy containing only the selected elements.
  • Indexing or iteration preserves logical order, but yields native Python objects (int, float) for each element.

Note: This view is strictly read-only. Attempts to modify the view via indexing or deletion will raise an InvalidModification exception at runtime.

Usage Example

# Assuming `buffer` is a populated circular buffer instance from numcircbuf
view = buffer.view()

def view_usage(v):
    print("All elements (slice):", v[:])
    print("Single element:", v[0])
    print("Number of elements:", len(v))
    print("Max capacity:", v.maxlen)
    print("Dtype:", v.dtype)
    print("-" * 20)
    print("Iterating over view:")
    for value in v:
        print("-" * 10)
        print(f"Value = {value}")
        print(f"Type = {type(value)}")  # Will be native <class 'int'> or <class 'float'>
    print("-" * 20)

print("\n--- View Usage ---")
view_usage(view)

# Copy behavior
# All returned arrays are independent; no shared memory
arr = view.to_numpy()
print("Before: ", view[:])
arr *= 2.0  # modify the array copy
print("After: ", view[:])  # View remains unchanged

Main Buffers

1. OverwriteCircBuffer

Write-optimized circular buffer with auto-overwrite and non-destructive reads.

Provides simple vectorized mathematical metrics over the buffer contents.

Note: This buffer is not thread safe. Concurrent writes can cause data corruption.

Constructor

def __init__(
    self,
    maxlen: int,
    return_overwritten_policy: Literal["never", "always", "conditional"],
    dtype: (
        type[np.float32]
        | type[np.float64]
        | type[np.int32]
        | type[np.int64]
        | type[np.uint32]
        | type[np.uint64]
    ) = np.float32,
) -> None:
Overwrite Return Policy

Controls whether overwritten elements are returned when the buffer wraps.

return_overwritten_policy: Literal["always", "never", "conditional"]

  • "never"

    from numcircbuf import OverwriteCircBuffer
    buf = OverwriteCircBuffer(maxlen=3, return_overwritten_policy="never")
    print(buf.extend([1, 2]))  # Empty NumPy array []
    print(buf.extend([3, 4]))  # Empty NumPy array []
    print(buf.append(5))  # None
    
  • "always"

    from numcircbuf import OverwriteCircBuffer
    buf = OverwriteCircBuffer(maxlen=3, return_overwritten_policy="always")
    print(buf.extend([1, 2]))  # Empty NumPy array []
    print(buf.extend([3, 4]))  # NumPy array [1.0]
    print(buf.append(5))  # float 2.0
    
  • "conditional"

    The returned values depend on the return_overwritten flag, it defaults to False.

    from numcircbuf import OverwriteCircBuffer
    buf = OverwriteCircBuffer(maxlen=3, return_overwritten_policy="conditional")
    print(buf.extend([1, 2]))  # Empty NumPy array []
    print(buf.extend([3, 4]))  # Empty NumPy array []
    print(buf.extend([5, 6], return_overwritten=True))  # NumPy array [2.0, 3.0]
    print(buf.append(7))  # None
    print(buf.append(8, return_overwritten=True))  # float 5.0
    

Supported input types

  • .append(float | int)

    • Accepts a single numeric value.
    • Value is stored internally as the buffer’s dtype.
  • .extend(Iterable[float | int])

    • Accepts any Iterable of numeric values.
    • The iterable is converted to a contiguous NumPy array of the buffer’s dtype.
    • If you pass an np.ndarray, it is only copied if,
      • Its dtype does not match the buffer’s
      • It is not C-contiguous
  • .extend_unchecked(np.ndarray)

    • Expects only a C-contiguous 1-D np.ndarray with the same dtype as the buffer.
    • This method skips dtype, contiguous array and dimension conversions/checks.

    Note: Using this yields the best performance, but if the array's dtype is different or if it is not contiguous, it will cause silent data corruption or crashes.

Mathematical Metrics

These metrics are computed on all elements.

  • .mean(): Mean of all elements.
  • .sum(): Sum of all elements.
  • .sum_squares(): Sum of squares.
  • .mean_squares(): Mean of squares.
  • .sum_and_count_gt(threshold: float | int): Returns a sum and count of elements above a threshold.

2. BlockingCircBuffer

Blocking producer/consumer circular buffer, suitable for multi-threaded applications.

This buffer blocks under these conditions:

  • The writer will wait if the buffer is full.
  • The reader will wait if the buffer is empty.

Constructor

def __init__(
    self,
    maxlen: int,
    dtype: (
        type[np.float32]
        | type[np.float64]
        | type[np.int32]
        | type[np.int64]
        | type[np.uint32]
        | type[np.uint64]
    ) = np.float32,
) -> None:

Writing to the buffer

  • .write_append(value: float | int, timeout: float = -1.0)

    • Accepts a single numeric value.
    • Value is stored internally as the buffer’s dtype.
    • timeout: Time in seconds to wait if the buffer is empty. Default is -1.0 (waits indefinitely). Use 0.0 to make it non-blocking.
  • .write_extend(data: Iterable[float | int], timeout: float = -1.0)

    • data: Data block to write.
      • Accepts any Iterable of numeric values.
      • The iterable is converted to a contiguous NumPy array of the buffer’s dtype.
      • If you pass an np.ndarray, it is only copied if,
        • Its dtype does not match the buffer’s
        • It is not C-contiguous
    • timeout: Same as .write_append
  • .write_extend_unchecked(block_np: np.ndarray, timeout: float = -1.0)

    • block_np: np.ndarray to write.
      • Expects only a C-contiguous 1-D np.ndarray with the same dtype as the buffer.
      • Skips dtype, contiguous array, and dimension checks.
    • timeout: Same as .write_append

    Note: Using this yields the best performance, but if the array's dtype is different or if it is not contiguous, it will cause silent data corruption or crashes.

Reading from the buffer

  • .read(n: int = NumCircBuf.constants.Limits.SIZE_MAX.value, timeout: float = -1.0, partial_read: bool = True) -> np.ndarray

    Reads items from the buffer.

    • n: Number of items to read. Defaults to the maximum possible buffer size.
    • timeout: Time in seconds to wait if the buffer is empty. Default is -1.0 (waits indefinitely). Use 0.0 to make it non-blocking.
    • partial_read: If True (default), returns available items (up to n) immediately. If False, blocks until all n items are available.
  • .read_into(out_array_np: np.ndarray, timeout: float = -1.0, partial_read: bool = True) -> int

    Reads directly into a pre-allocated np.ndarray of the same dtype as the buffer.

    • Returns the number of items actually read.
    • The number of items to read is determined by the length of out_array_np.
    • timeout and partial_read: Same as .read().
  • .read_into_unchecked(out_array_np: np.ndarray, timeout: float = -1.0, partial_read: bool = True) -> int

    Similar to .read_into

    • Skips dtype, contiguous array, and dimension checks.

    Note: Using this yields the best performance, but if the array's dtype is different or if it is not contiguous, it will cause silent data corruption or crashes.

Usage Example

import threading
import time
import numpy as np
from numcircbuf import BlockingCircBuffer

buf = BlockingCircBuffer(maxlen=1000, dtype=np.float32)
data = np.random.randn(1000).astype(np.float32)

# Pre-allocate a NumPy array with zeros for read_into.
# We use zeros instead of np.empty so that any unwritten elements are clearly visible
# — useful when inspecting random data.
read_into_arr = np.zeros(100, dtype=np.float32)


def producer():
    # Write an initial batch of 150 items
    buf.write_extend(data[:150])

    # Simulate a delay (e.g., waiting for network packets or sensor data)
    time.sleep(0.5)

    # Write the remaining 850 items
    buf.write_extend(data[150:])


def consumer():
    # We ask for 200 items, but the producer has only written 150 so far.
    # Because partial_read=True, it returns the 150 items immediately instead of waiting.
    received = buf.read(n=200, partial_read=True)
    print(f"1. Partial read: asked for 200, got {len(received)}")  # 150
    print(f"   Items left in buffer: {len(buf)}\n")  # 0

    # We ask for 300 items. The buffer is currently empty.
    # Because partial_read=False, this will block until the producer writes the next batch,
    # ensuring we get exactly 300 items.
    received = buf.read(n=300, partial_read=False)
    print(f"2. Strict read: asked for 300, got {len(received)}")  # 300
    print(
        f"   Items left in buffer: {len(buf)}\n"
    )  # 550 (850 new items - 300 read)

    # Reads directly into the pre-allocated array (size 100)
    received_count = buf.read_into(out_array_np=read_into_arr)
    received = read_into_arr[:received_count]
    print(f"3. Read into array: got {len(received)}")  # 100
    print(f"   Items left in buffer: {len(buf)}\n")  # 450

    # Reads everything left in the buffer
    received = buf.read()
    print(f"4. Read remaining: got {len(received)}")  # 450
    print(f"   Items left in buffer: {len(buf)}\n")  # 0

    # Non-blocking read: buffer is empty, timeout=0 makes it return immediately
    received = buf.read(timeout=0)
    print(f"5. Non-blocking read: got {len(received)}")  # 0

    # Non-blocking read_into: buffer is empty, returns immediately
    received_count = buf.read_into_unchecked(
        out_array_np=read_into_arr, timeout=0
    )
    print(f"6. Non-blocking read_into: got {received_count}")  # 0


# Start producer and consumer threads
producer_thread = threading.Thread(target=producer)
consumer_thread = threading.Thread(target=consumer)

producer_thread.start()
consumer_thread.start()

producer_thread.join()
consumer_thread.join()

Utility Buffers

Common Utility Buffer API

All utility buffer types expose the methods defined in Common Buffer API, and the following:

  • clear_cache(): Clears the cached metric.

Furthermore, all the buffers cache their metric value when the metric function is called and clear the cached metric value whenever the buffer is extended or appended to.

1. RunningMeanSqBuffer

Accumulator-capable circular buffer optimized for mean-square calculations.

Features fully vectorized operations, float-drift protection, and caching for mean-square.

Note: This buffer is not thread safe.

  • Concurrent reads during writes can return stale mean-square values
  • Concurrent writes can cause data corruption.

Constructor

def __init__(
    self,
    maxlen: int,
    operation_focus: Literal["extend/append", "calculation"],
    recalc_threshold: int | None = 0,
    dtype: type[np.float32] | type[np.float64] = np.float32,
) -> None:
Operation Focus

operation_focus: Literal["calculation", "extend/append"]

  • "calculation": O(1) statistics, higher per-write cost.

  • "extend/append": O(n) statistics, lower write cost.

Use the library utility determine_operation_focus to automatically select the best operation_focus. This function runs a small runtime benchmark and returns the appropriate Literal value for your use case:

def determine_operation_focus(
    buffer_type: type[RunningMeanSqBuffer] | type[RunningMeanBuffer],
    dtype: type[np.float32] | type[np.float64],
    buffer_maxlen: int,
    block_size: int, # Use 1 if you will be appending a single element only.
    calc_every: int, # Calculate every n blocks.
    test_blocks: int = 128, # How many blocks to run the benchmark for,
                            # more = (higher memory usage)
                            # + (potentially more accurate results).
    verbose: bool = False, # Logs the exact relative multipliers,
                           # as well as total time spent in the function.
) -> Literal["calculation", "extend/append"]: # Outputs the best operation focus
                                              # for this (use case) + (system),
                                              # This can be directly passed to
                                              # the buffer init

Actual performance depends on buffer's maxlen, block size, overwrite rate, and statistics frequency. See PERFORMANCE.md for relative benchmarks.

Recalculation Threshold

recalc_threshold: int: Number of operations after which the accumulator is recalculated on all values in the buffer to reduce floating-point drift. Use 0 or None to disable.

Usage Example

import numpy as np
from numcircbuf import RunningMeanSqBuffer, determine_operation_focus

DTYPE = np.float32
CALC_EVERY = 2
BUFFER_MAXLEN = 1000
BLOCK_SIZE = 100

buffer = RunningMeanSqBuffer(
    maxlen=BUFFER_MAXLEN,
    operation_focus=determine_operation_focus(
        buffer_type=RunningMeanSqBuffer,
        dtype=DTYPE,
        buffer_maxlen=BUFFER_MAXLEN,
        block_size=BLOCK_SIZE,
        calc_every=CALC_EVERY,
        verbose=True,
    ),
    dtype=DTYPE,
)

# Add arrays/blocks
rng = np.random.default_rng(25)  # For random number generation
for i in range(10):  # Simulate time
    block = rng.random(BLOCK_SIZE, dtype=DTYPE)  # Mock block arriving
    buffer.extend(block)  # Extend with the block
    if i % CALC_EVERY:  # Calc every n
        print("-" * 10)
        print(buffer.mean_square())  # Get mean-square
        print(buffer.mean_square())  # Uses cached value

2. RunningMeanBuffer

Accumulator-capable circular buffer optimized for mean calculations.

Features fully vectorized operations, and caching for mean.

Note: This buffer is not thread safe.

  • Concurrent reads during writes can return stale mean values
  • Concurrent writes can cause data corruption.

Constructor

def __init__(
    self,
    maxlen: int,
    operation_focus: Literal["extend/append", "calculation"],
    dtype: type[np.float32] | type[np.float64] = np.float32,
) -> None:

operation_focus works the same as in RunningMeanSqBuffer.

Usage Example

Works identically to RunningMeanSqBuffer — use .mean() instead of .mean_square()

3. IntegratedGatedBuffer

A specialized circular buffer for calculating gated loudness.

Features fully vectorized operations, and caching for gated mean-square.

Internal Storage: This buffer stores the square of the input values. Values retrieved via views will represent squared values, not the original linear amplitude.

Note: This buffer is not thread safe.

  • Concurrent reads during writes can return stale gated mean-square values and inaccurate data
  • Concurrent writes can cause data corruption.

Constructor

def __init__(
    self,
    maxlen: int,
    abs_gate_lufs: float,
    rel_gate_lu: float,
    recalc_threshold: int | None = 0,
    dtype: type[np.float32] | type[np.float64] = np.float32,
) -> None:

recalc_threshold works the same as in RunningMeanSqBuffer.

Threshold Parameters
  • abs_gate_lufs: float The absolute loudness threshold in LUFS. Blocks with a mean-square power below this threshold are ignored during the first stage of the gating process.

  • rel_gate_lu: float The relative loudness threshold in LU. Blocks with a mean-square power more than this many decibels below the absolute-gated mean-square are ignored in the final integrated loudness calculation.

Usage Example

import numpy as np
from numcircbuf import IntegratedGatedBuffer

# Parameters for gated loudness calculation
# (We use the ITU-R BS.1770 standard constants for the example)
ABS_GATE_LUFS = -70.0
REL_GATE_LU = -10.0

buffer = IntegratedGatedBuffer(
    maxlen=3000,
    abs_gate_lufs=ABS_GATE_LUFS,
    rel_gate_lu=REL_GATE_LU
)

# Add the audio signal to the buffer.
# Input should be K-weighted and normalized to [-1.0, 1.0] as per ITU-R BS.1770.
block = np.random.uniform(-1.0, 1.0, 1000)
buffer.extend(block)

# Retrieve the final gated mean-square
gated_mean_sq = buffer.gated_mean_square()
print(f"Gated mean square: {gated_mean_sq}")

Exception Handling

Exceptions

NumCircBufError(Exception)
├── NumCircBufValueError(NumCircBufError, ValueError) ────────────────────────────┬─────┐
├── NumCircBufTypeError(NumCircBufError, TypeError) ─────────────────────┬─────┬─ │ ─┐  │
│   └── InvalidModification(NumCircBufTypeError)                         │     │  │  │  │
├── NumCircBufIndexError(NumCircBufError, IndexError)                    │     │  │  │  │
│   └── IndexOutOfBounds(NumCircBufIndexError)                           │     │  │  │  │
├── NumCircBufArithmeticError(NumCircBufError, ArithmeticError)          │     │  │  │  │
│   └── UnsupportedOperation(NumCircBufArithmeticError)                  │     │  │  │  │
├── NumCircBufRuntimeError(NumCircBufError, RuntimeError)                │     │  │  │  │
├── NumCircBufOSError(NumCircBufError, OSError)                          │     │  │  │  │
├── NumCircBufNotImplementedError(NumCircBufError, NotImplementedError)  │     │  │  │  │
└── NumCircBufInitError(NumCircBufError)                                 │     │  │  │  │
    ├── DataTypeError(NumCircBufInitError, NumCircBufTypeError) ─────────┘     │  │  │  │
    ├── BufferCapacityError(NumCircBufInitError)                               │  │  │  │
    │   ├── BufferCapacityTypeError(BufferCapacityError, NumCircBufTypeError) ─┘  │  │  │
    │   └── BufferCapacityValueError(BufferCapacityError, NumCircBufValueError) ──┘  │  │
    └── ConfigurationError(NumCircBufInitError)                                      │  │
        ├── ConfigurationTypeError(ConfigurationError, NumCircBufTypeError) ─────────┘  │
        └── ConfigurationValueError(ConfigurationError, NumCircBufValueError) ──────────┘

NumCircBuf exceptions are comprehensive and include context (e.g., the object/class that caused the error):

  • class_obj – the class where the exception occurred (may be None if no class is associated with the error).
  • obj – the instance that caused the error (may be None if instantiation failed or no specific instance is involved).
  • Various different attributes available based on the exception type.

Performance note: Some low-level Cython/NumPy errors may still propagate as native Python exceptions (ValueError, TypeError, etc.) to avoid redundant checks in performance-critical code.

Usage Example

try:
    buf.extend(data)
except exceptions.NumCircBufError as e:
    # Structured library errors; you can access `e.class_obj` and `e.obj`
    handle_numcircbuf_error(e)
except Exception as e:
    # Low-level errors from NumPy/Cython
    handle_low_level_error(e)

Warnings

NumCircBufWarning(Warning)
├── NumCircBufDeprecationWarning(NumCircBufWarning, DeprecationWarning)
├── NumCircBufFutureWarning(NumCircBufWarning, FutureWarning)
└── NumCircBufRuntimeWarning(NumCircBufWarning, RuntimeWarning)
    └── DataSizeWarning(NumCircBufRuntimeWarning)

All NumCircBuf warnings include class_obj and obj attributes (like exceptions).

Usage Example

import warnings
from numcircbuf import OverwriteCircBuffer, exceptions

buffer = OverwriteCircBuffer(5, "never")


# Example function that catches a NumCircBufWarning
def extend_and_catch(buffer, data):
    with warnings.catch_warnings(record=True) as caught_warnings:
        warnings.simplefilter("always")  # Capture all warnings
        buffer.extend(data)
        for w in caught_warnings:
            if isinstance(w.message, exceptions.NumCircBufWarning):
                print("Warning type:", type(w.message))
                print("Class of buffer:", w.message.class_obj)
                print("Buffer instance:", w.message.obj)
                print("Full message:", w.message)


# Trigger a warning
extend_and_catch(buffer, range(10))

Performance

NumCircBuf is optimized for speed and efficiency:

  • Cython + raw C pointers – for near-C performance
  • Minimal Python object creation – slices/views reused, caching reduces repeated calculations
  • BLAS-backed NumPy operations – for efficient array math (dot products, sum-of-squares)
  • O(1) accumulator operations – for real-time applications
  • Handles high-throughput buffers – for streaming data like audio or sensor signals

Benchmark Results

For detailed performance benchmarks, see the PERFORMANCE.md document which includes comprehensive testing results across different buffer types and use cases.

Key Performance Highlights:

  • Throughput (extending 64 KiB of data to OverwriteCircBuffer):

    • Cold cache (data):

      • AMD R7700x (DDR5): ~50 GB/s
      • AMD R5600 (DDR4): ~30 GB/s
    • Warm cache (data):

      • AMD R7700x (DDR5): ~73 GB/s
      • AMD R5600 (DDR4): ~50 GB/s
  • Memory efficiency and consistency: ~4 bytes per element (32-bit) and ~8 bytes per element (64-bit)

Documentation

Changelog

See CHANGELOG.md for a detailed history of changes, including new features, bug fixes, and performance improvements.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Support

For issues, questions, or feature requests:

Citation

If you use NumCircBuf in your research or projects, please cite it as:

@software{NumCircBuf,
  author = {Syed Basim Ali},
  title = {NumCircBuf: High-Performance Numerical Circular Buffers for Python},
  year = {2026},
  url = {https://github.com/basimali-ai/NumCircBuf},
  version = {0.1.0}
}

Acknowledgements

NumCircBuf is built on top of these technologies:

  • Cython for performance optimization
  • NumPy for numerical computing and integration

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

numcircbuf-1.0.0.tar.gz (258.3 kB view details)

Uploaded Source

Built Distributions

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

numcircbuf-1.0.0-cp314-cp314t-win_amd64.whl (455.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

numcircbuf-1.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

numcircbuf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl (460.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

numcircbuf-1.0.0-cp314-cp314-win_amd64.whl (423.0 kB view details)

Uploaded CPython 3.14Windows x86-64

numcircbuf-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

numcircbuf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (446.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

numcircbuf-1.0.0-cp313-cp313-win_amd64.whl (422.8 kB view details)

Uploaded CPython 3.13Windows x86-64

numcircbuf-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

numcircbuf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (442.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numcircbuf-1.0.0-cp312-cp312-win_amd64.whl (421.7 kB view details)

Uploaded CPython 3.12Windows x86-64

numcircbuf-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

numcircbuf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (443.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numcircbuf-1.0.0-cp311-cp311-win_amd64.whl (428.2 kB view details)

Uploaded CPython 3.11Windows x86-64

numcircbuf-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

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

numcircbuf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (444.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numcircbuf-1.0.0-cp310-cp310-win_amd64.whl (428.1 kB view details)

Uploaded CPython 3.10Windows x86-64

numcircbuf-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.5 MB view details)

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

numcircbuf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (446.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numcircbuf-1.0.0-cp39-cp39-win_amd64.whl (360.7 kB view details)

Uploaded CPython 3.9Windows x86-64

numcircbuf-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

numcircbuf-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

numcircbuf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (379.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file numcircbuf-1.0.0.tar.gz.

File metadata

  • Download URL: numcircbuf-1.0.0.tar.gz
  • Upload date:
  • Size: 258.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f4114a8e90b3a80a2a2f8210bbe40ae6599507b91affee39072c94e9197428a2
MD5 e2fd7144289216b635a2741794ae59a3
BLAKE2b-256 6a2a27204d0bbce1770278e07d858514881bd9a633571d38319d6d392eb30fb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0.tar.gz:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314t-win_amd64.whl.

File metadata

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

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 b4b1b1eda53169e1171cc6c637305934a4a340360bddb580b3f9c7e2d8c1a033
MD5 32787cb3fe50234ec168f30dd5ef0680
BLAKE2b-256 eaaf8e8b34c308ca428781d60cf9399c00c316374bfc3dbc0da8433e0c1e12ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314t-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 37249f7cfa556767eb6eb2d89ada7e7f7cf513eaf2654ebf55d4c2225de378d1
MD5 41fbe45ce4c1ea39f473b20adc7aff73
BLAKE2b-256 d10f861c60bafdae8418c35e3fa288ffc3fc84d1a0ef1e00e9de0e7d318de71e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b15e0aea64e5ce2ec289575d4f70daed5e1df4ae7258b5f57121d33225180a34
MD5 a90085014198ba7a9b1aba8444f47643
BLAKE2b-256 57ea7f121a67c36610d76e1cd6641f92694fa1508806479ea909644c2ddb7318

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08a984d777f7774696c89214848d686023046eb5b0501ac644b3902b1d4d71f0
MD5 d35c226c81842e81d5494a8f04a900d9
BLAKE2b-256 6f159e1d492c038d33a62f912578215b74faa52aa25ce5e5a4781fe7f9d6815f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 423.0 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 dff5f393ec2df1c27b3fe3b6d3a443f05672fbd5a6a5c5057eaf4a73ab83238a
MD5 965d9ed81f32e5b9bbc38b51efa9517f
BLAKE2b-256 f3d88ddf2cbfc03909fc3051439f8a934b737a41c45b9f4605ea21eb7e8792d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ce405ad726a1687af008eb41e9a15e6b1e4f01ba5c952f7fff5de8ccadb897cc
MD5 d62571ab99cc74952e22dfba79a57d4b
BLAKE2b-256 a3bcfcfa96f497ab79c26da41e435d6773fb7996827adaf79a3ca101f5adcc82

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2de5b99aa8ef5737dbc3f1838ade865641156dbd4d8697cf36ea4b1f2fe60d17
MD5 61010a4fc0d3972577c66a1ce6d98e4a
BLAKE2b-256 a71e83887e27e3d701de118159801a1e3bf6632f667eb514e8b8777b44c2294e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f479c37e3e3597fc1ca2af7b10718a12e99d21f05f14cbd4b0770164b8c001c2
MD5 caa95211c8bf96f8890f1507f0a81d75
BLAKE2b-256 6c078114f7c601a21cc9ccbd3d629b88a0f84042d10c956ef9eb1c2f987a4b35

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 422.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d247c58f6caa26e84b272e7e5c57bc64831bc2a3bd8e481be9201fc73f7c625d
MD5 7ef843ca00125d91ca07380dbdfea72c
BLAKE2b-256 7cd7170bbc0c8ba40e73c897832bb4dc130a3438414368c4aab63b14775a39b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 68f794afab874db2d478f2a3928e8835bc35e30e3385929431e02a906df43733
MD5 60cf0ba0eb29c8a6ae22e07fecbd3d65
BLAKE2b-256 a3fa146533ba9bc0f0011b046bfdccf7f940aaf11b573695994fe20a4f96ef94

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6add5d89fdfc7284c7c5a7792de4aa86284315081fcce185857f3048c0357eb2
MD5 924d9dc23daae45da810457210c4cc3e
BLAKE2b-256 2f9729acefdb418492d853216157b48a1ffc35c337523a7b4db814e84e3ccbb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed4a99266c4b20e3fc4253e5d84621f465265bc55db24ec26e622f9c3500dfed
MD5 b8547b52de2b6a6dfbe53f2768f3ac11
BLAKE2b-256 2b9a6d208d2dcd806fce452965d71d8fc48dd051c38ede5d11fe9e5473f0e607

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 421.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 49c574f4a041d73c4691385d880874337f4efca0a99ba6d1298767b128460251
MD5 3b03c623fb295ff0854383911dc256b7
BLAKE2b-256 596db099fad7d6dd56c7f446c17976ec0b17f1b36218834a4b938d228e00e4a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 10eec3f3528610c7b2b03b83feab13400f208fbaf936a48fd1156ef667aa2adf
MD5 04f6dab0fe12e6429f8ee8d27ba607a4
BLAKE2b-256 45b2e05baec2e2f1593885d2287ab1878d1515e851bc3788fb754a83d356fdfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8034e1aef4ddcd9835484948344e0b208927999215388c7ab0a9d5683549288d
MD5 f58b4305f7f4295d8f8cb92d6589ec34
BLAKE2b-256 04af6c6f02cf1917f1dbe08d6eb62a41a505b1cc245507d84a0b44fa925b74e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78b8751e6f2bc05bb4d04a3c373421d248177816c7df44bbbc6d18b8795e3e02
MD5 6449d815f0749e993987f3fa91b39571
BLAKE2b-256 0fe9bcd908cacc69c960a3d28ba4970be411f8d6100a3c743da0f514481bbebc

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 428.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6158bd4f465be219f00cb1d6da7004a08f4c9c6c249c21cd5cff9f0478a9def2
MD5 cf8c43f8bdc1b7e5ea6878e3bc22e1b2
BLAKE2b-256 f91d408d2d77b03349f37339fb355855670c2d3b429dc27df44051c52cf0b837

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 18017fa2d9412a7b89a22ef2a64624adb9394a62a88f6fbcc9f45b8a9bbf29fc
MD5 444216dd88f6ec3803a107c24d99987d
BLAKE2b-256 b808a4d92afcaa976c2149643c0b7afcaf0c30d8e54a9c8959d4e7d8b5d3287f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 de60bf2c417eb9abddd796a9a9ce51469eaaede7e3c27a6ec33fd8f587b3b63c
MD5 b0ad02cea440f8c8c2c210fdbca78769
BLAKE2b-256 f592e4db2ab6d78aa21a801dba96e8930c6ef784db3b7209878e08fad432d8c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40e8f36daa3a52336fc409d3be189394b665ed349728a72105e378e046012a9a
MD5 e1858c72397615e9341799bc4c059a70
BLAKE2b-256 42c959295a8d833bccd4c9ac24cf5619a29cb2635ea82194067f3fc7b386be28

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 428.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bd2766ea187417fac1cb971c950f0ca0f144ed3c838f67c7f289482a96081f62
MD5 e7db28fa6572c95079813d88ad788ad7
BLAKE2b-256 a2791f0d11b166117a94e013fa6e5d986ffd3deafd535da69461a49a974e48ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp310-cp310-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6732a8a41d9d637ba7bd4d75dddd6ca6fe919d2853f23ac4a605f5882e5380aa
MD5 6ca1ce924c35a3fb4ae26e2989df2336
BLAKE2b-256 d5eed2b36e5c21367a906630c402e6cf1db498011887eebd42afcfc4bdd8e41f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c2ed8a63cccc7b10ce139d2a55cc504417fd76f4d18ea45cebbf8642a68b965
MD5 1d9f3e4f2529c1e97659898db58970be
BLAKE2b-256 21790b3e314112adda467161fe1913bcb604802e4c30b5eacec019526d6fcf6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f0c54bb2c5ba7511dd315da975e95c42bbc10d376ae8a7ba1d797d44ae80143
MD5 6a0332c965e549809e4824c3be85c4ed
BLAKE2b-256 87f8753a1e7f1cd355e8ed9b9c9eae1f9ffa91fefcd65b0048aea8dc671d68df

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 360.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numcircbuf-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 505dd4239ecf38e25370e5a112dd081d54e47c759d094aa8ef1fed4322a7e278
MD5 81a5135c53e800024dcdddf93c59bfc2
BLAKE2b-256 45f050e8d93099a48a32da162af526c46a5d084b58632244c8405bc709d6bbb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp39-cp39-win_amd64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e09635912f30abb2fb2a3a58ebbfa2c7d25059024960b5622f3c54d07cddc3ee
MD5 2c5a9fd493534a33d5162fe19fcaba57
BLAKE2b-256 6c2d019932748a2617fec10599cfb439bc615bb0966a44528004e1dc8f5d7445

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10da6d74052243b5ca356aadef65bee8912e870b5e16f14981c097f82c20f8b0
MD5 901cc58f13333833f1cc8bdd01e1a2df
BLAKE2b-256 8f2ab4ab5947901039f5b98d6369f7047e6e1af1664022f3e4fd0d3b62d7cdd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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

File details

Details for the file numcircbuf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9208f18a711eab108b037e8ba1942d118837b743ba6de04e654d8ffb16747e71
MD5 74478fe72d4c60ff49e27e38e7b939b9
BLAKE2b-256 27cf9acbc5539d3752d475036dafd83e27439efca7f9416f8caab5b03875a0f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yml on basimali-ai/NumCircBuf

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