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 reads during writes can provide inaccurate data
  • 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 + 1) % CALC_EVERY == 0:  # 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 = {1.0.1}
}

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.1.tar.gz (260.2 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.1-cp314-cp314t-win_amd64.whl (206.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

numcircbuf-1.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp314-cp314t-macosx_11_0_arm64.whl (209.4 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

numcircbuf-1.0.1-cp314-cp314-win_amd64.whl (174.8 kB view details)

Uploaded CPython 3.14Windows x86-64

numcircbuf-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp314-cp314-macosx_11_0_arm64.whl (196.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

numcircbuf-1.0.1-cp313-cp313-win_amd64.whl (173.8 kB view details)

Uploaded CPython 3.13Windows x86-64

numcircbuf-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp313-cp313-macosx_11_0_arm64.whl (195.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numcircbuf-1.0.1-cp312-cp312-win_amd64.whl (172.7 kB view details)

Uploaded CPython 3.12Windows x86-64

numcircbuf-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp312-cp312-macosx_11_0_arm64.whl (195.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numcircbuf-1.0.1-cp311-cp311-win_amd64.whl (179.2 kB view details)

Uploaded CPython 3.11Windows x86-64

numcircbuf-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp311-cp311-macosx_11_0_arm64.whl (196.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numcircbuf-1.0.1-cp310-cp310-win_amd64.whl (179.0 kB view details)

Uploaded CPython 3.10Windows x86-64

numcircbuf-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp310-cp310-macosx_11_0_arm64.whl (198.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numcircbuf-1.0.1-cp39-cp39-win_amd64.whl (179.5 kB view details)

Uploaded CPython 3.9Windows x86-64

numcircbuf-1.0.1-cp39-cp39-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

numcircbuf-1.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

numcircbuf-1.0.1-cp39-cp39-macosx_11_0_arm64.whl (199.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: numcircbuf-1.0.1.tar.gz
  • Upload date:
  • Size: 260.2 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.1.tar.gz
Algorithm Hash digest
SHA256 b36c79d740c37d01d966e822c8d5dba55491086b826584fcc6415312f917e908
MD5 0e9ab9796bbfc12d6e7e1f83d6552ab3
BLAKE2b-256 bcf1f947953fd4fc16e5102a767f2f5e6e1721cef67e85736cc53acd2008d9c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1.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.1-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 206.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.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 23e5da74c87923c83b5561bc096f0537397a75050ffe967e2c0215ab203d885f
MD5 0d038f451f8dd5d268cd598c90a9fa67
BLAKE2b-256 2ba3553787f99696a14e04f352c8d205d8019561f11a7845e86c184f28e05f6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a261e16f849b9ccc1d49ba4168edd3b3bc025feb394c61a369c25ec6d8c99dab
MD5 ed2b9322f5bd91a39b85dca88372e7b2
BLAKE2b-256 9c919f7e0599239433dc2bc4f68bc9c3363ec5d7bba2bf9da0228d391aec596e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b3c154ee44d4a7328515f4e7c85e47b67783bde42927e6f9cfc070a19f5eb13
MD5 8bece63c6dfa5befc7bbcc1c509e15f1
BLAKE2b-256 d1ae6f60338fab0f90e0dd28086d6888b1cd4274e83b479a24a9720eeb2546db

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5077f50db5fc5215faf67ec38112a1ed73798137975de12c38100808b15f455
MD5 bccf8cd4b9d8f74b01f1677595e133a4
BLAKE2b-256 a6d78f299e6b162c94afba41fe6429140aed2948450f8c4ec912549d357f1a17

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 174.8 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.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8f16eba918ed1c72c88677cfa5b3cbd7a0aabb7ec644d9e15f2fc2fb3cb4b538
MD5 8a164ec2dac7c709012e78d2862dbe43
BLAKE2b-256 4d20bf6f89816dd0c58ccbd047fc1e5ea55c7f3bc557dfce5dce9226d31a598a

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2b9571bd5f732e143f664b300df33196bd62125acba81f703b7df9dc36a566f7
MD5 bebedaede4ecafa92631673f957a9681
BLAKE2b-256 7d4a6792f1fe166435f5ef0887afda99a3b3fe9992847729b5d5f63100f9ee8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59ba04bca18314bfec1a291784830c989a031022ab9291d23756506baf2e3cea
MD5 bdff61c3d7d29ae91b667234cb40b426
BLAKE2b-256 765fc12543c9ad2b2c1c89d184fefe63a17f96eedd88b0923d566faaec789c9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00f94e0949c1113b58d3626aeed98f614470d1c9795d01848247d4cbb801f744
MD5 8387157f2ad0c82ae4c2c845dffb42c7
BLAKE2b-256 bf4b415e72804d802ba42ed6191539c96d4ab290086c9f73d659336073f2dc4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 173.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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0149c338e0ee954b002750ff89f904e82dbdc76f356e0965157c1f3a94713cbf
MD5 5351391c366de8d675bc2efcf9398b63
BLAKE2b-256 5e806e257e5b3bdc5d70fe0d1f26e6dcceb34dd02db88fa4f806607d20da355a

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c2cce70d5baefe09178e233d0abb52d5ca22c7a6c237403086086e1f4fc4271d
MD5 7b373b3ef9b6fb8d563fae49338336a4
BLAKE2b-256 372d18c4bff108c00549bc5020b07ae9d77144161f11f501f194668c92a5703d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0072003b5fd16a22749b5da610153c1d5d2b81477d64818e0e0875461a2d0e64
MD5 c798702d0a33bfa8ad9fa5d6d7b986ec
BLAKE2b-256 cd0bf6f5890778491fc48d84ad333c25c28984197fdd61332587b3625d43b19a

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4edf443d5074a8f7d54d941f72232a95a68fa6a56cf77ff11633370fc19e787
MD5 bc369ee4c9d8efabd30467755765ae30
BLAKE2b-256 62298550133476cc1e5149d8ece635889b360318dc0a5980d7d30c547af30961

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 172.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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f05525f283c7cfbe92f7a6070169acbb9bc28967ee9c1afbc28d563a62a115b7
MD5 061e646eaea86f0902fa5ba2f6136320
BLAKE2b-256 1d75d23c20ca7326d0996d259b26c7287be944c87e2000b3cffc99d54c7d562d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2ed59010ea3ed0ff6d0344c3b59f62a3008b368ff065947105082a5b0c5330db
MD5 13e094c65254eef1329117af2e0f1936
BLAKE2b-256 fc76f822ad84e07c73a3df52151cf6d863889366975ef92ee222a6b2beeab4d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f875a33986ac993f2eb8c5b7503ea2af4db6b1302441ad4177f2bb09a9db21be
MD5 fed00d5dc802a0a9159e060b7b9b7845
BLAKE2b-256 511c7df1825de67c2315b969ff08f680d93956be3cd64badcf58345c25f53e99

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 391976c3937f1eb297bda2ea9eba6ffc0ed3f5ecc1fdf07af09e9c95fa446bbf
MD5 a758fc1b8c58a948e00830579b056105
BLAKE2b-256 6ae080272551b509aa6b74ba7ba4c900ea8baa04f7cc435e0540ee14517b800c

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 179.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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 210bada0e1e33cca029dc9110288c20e3b4d9ed6660023a4beb081a641117a95
MD5 6b147c6d0e36d4feca46b9730c8dbc8a
BLAKE2b-256 a6b89632c66e9d609bf191d6a67f6ac79c39eb82bbaeca46147f9983723bfde2

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0d371b433c75b63e539a9db23f8bbe11d351940c8fff1e5afdced4250cc49262
MD5 ea19dc943ef70f4223c832ef8e4cdbdf
BLAKE2b-256 dc33a2edd7ebe360bd6d77a0e32455e601c133b67897cdc3cfaafd15de5c9dbb

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 76aa53d3309d574c899af76a74e9faa032c2fc0b5174f922c79e1d058c224631
MD5 19c197c3e34c792ed75b30cf6866e5f3
BLAKE2b-256 cd831b4cb2bb51d466d23dc29af0598786630a889c1969d39fbb020dbe620875

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1c5529baba058e6b6293c1af0d726abd390996e703c5917e6dc067b4e11f0bc
MD5 aedbee9230eece594d75ac209b3c9afc
BLAKE2b-256 5662c83b974f9b2427af250d0dadd27239513306835ee6fbd655763fe0fa4ab0

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 179.0 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 aafb9ad16394100faf8c814a4c6a10ce3339e491bc0a4b715b06960bb30d51df
MD5 c2ee7849ac04a9322012440240a6176f
BLAKE2b-256 d61e3da5d69473b368927b5dca0f3613dab31cd764695d3d229c14bbd63ed560

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e2abcab121bf3232afe7ccdaa2930ba7bb8436e219b05f194a01467e911ba65b
MD5 186e42bde963e3b7649111704880ffff
BLAKE2b-256 def251eabebb3707f51fe5297ab29aefcf2fc2d132a937354b47912ec72e19c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c0bc8977dfc7edcd1d8fbcdae14b944791b61df1b13bd7bf076816a39c0f8c3e
MD5 2d0c21af4caeab101aa36737c86c823f
BLAKE2b-256 a4c4ac49d8588f1312d97af477943474ed168f5fbb2c9fa79ac0a3b9a0e77015

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02fe9a21d237d7accb4813d53b192c940b0db3fb4b2f1792aa34d315be2e8140
MD5 f0286f280e69e551dcb93ef1b168769c
BLAKE2b-256 53b8245602ddb5f4e2f1c7563a3d3e627ce143b4b7044a62d6dfb4005c007a9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: numcircbuf-1.0.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 179.5 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a419b808f4ec287c543452c506a3de313b8ae92f39e411d36ff89c42595bc406
MD5 e07502375961e2a3c58bb076e24c3954
BLAKE2b-256 e6a1ecd8e5740ca484131900d5f31384f0274c814e31d81385a62808dedba45f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1e81f685b93086eb071a5693979c122a34fde8be026d45b401051ac1a5ef951e
MD5 2615a7a85750735540b5dc7a56c266ce
BLAKE2b-256 ad5af59693450d73826ffde1b91ef0e4d8728852a3014ff61e8d7a3d3a3d2370

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 70d8e76c976a4aa0b4405d077cc548fe05b3aaad9d8af14f5b65c503f503f9ae
MD5 3012fef91f36ad9657168d0a891e3b3b
BLAKE2b-256 7a3a315c9040b0e6e0478d8eae2b0f31456d4179c7df541c4cb299d8f2520f8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numcircbuf-1.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25955ff68b6b42104630074dd9e9cf9c2b9a4bcf36037508c2769ce50156c8b1
MD5 9f9598d1571ea46f0dfef67255a960c9
BLAKE2b-256 d98656ff50132717047dda7c113923e9401bda29e0c87510806ce39f32082624

See more details on using hashes here.

Provenance

The following attestation bundles were made for numcircbuf-1.0.1-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