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, featuring O(1) accumulators and specialized calculation variants. Built with Cython for a balance between speed and maintainability, it provides efficient data structures for real-time signal processing, time-series analysis, and other performance-critical applications.

Features

  • Multiple Buffer Types – Specialized implementations for different use cases:
    • BlockingCircBuffer – Blocking producer/consumer circular buffer for multi-threaded applications.
    • OverwriteCircBuffer – Optimized for high-throughput writes
    • IntegratedGatedBuffer – Specifically for calculating gated loudness statistics
    • O(1) Accumulators – Constant-time operations for statistics, implemented in specialized buffers:
      • RunningMeanBuffer – O(1) mean
      • RunningMeanSqBuffer – O(1) mean-square
  • High Performance – Bypasses Python/NumPy overhead to saturate the hardware bandwidth. Details in PERFORMANCE.md:
    • vs. collections.deque & Python lists: 500–1500× faster for bulk extend, and 1.5–3× faster for single append.
    • vs. Optimized NumPy Ring Buffers: Up to 10× faster.
  • Familiar API: Buffers use append, extend, and clear methods for drop-in compatibility.
  • NumPy Integration: Direct integration with NumPy arrays.
  • Type Safety: Fully typed; supports fp32, fp64, int32, int64, uint32, and uint64.
  • Docs & Benchmarks: Includes extensive API documentation, usage examples, and detailed 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.float64,
) -> 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.float64,
) -> 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.float64,
) -> 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.
    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.float64,
) -> 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 values representing signal power (the square of the amplitude). By default, input values are squared internally before storage. However, if already_squared is set to True during input, the values are stored as-is. Values retrieved via views will represent these squared values.

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.float64,
) -> 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 provides a suite of pre-allocated, contiguous-memory circular buffers engineered for low-latency ingestion and O(1) windowed analytics.

Benchmark Results

For detailed performance benchmarks, see the PERFORMANCE.md document which includes 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): ~35 GB/s
      • AMD R5600 (DDR4): ~30 GB/s
    • Warm cache (data):

      • AMD R7700x (DDR5): ~73 GB/s
      • AMD R5600 (DDR4): ~50 GB/s

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.1.2}
}

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.1.2.tar.gz (264.4 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.1.2-cp314-cp314t-win_amd64.whl (209.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp314-cp314t-macosx_11_0_arm64.whl (213.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

numcircbuf-1.1.2-cp314-cp314-win_amd64.whl (177.9 kB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp314-cp314-macosx_11_0_arm64.whl (200.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

numcircbuf-1.1.2-cp313-cp313-win_amd64.whl (176.6 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp313-cp313-macosx_11_0_arm64.whl (200.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numcircbuf-1.1.2-cp312-cp312-win_amd64.whl (175.6 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp312-cp312-macosx_11_0_arm64.whl (200.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numcircbuf-1.1.2-cp311-cp311-win_amd64.whl (182.3 kB view details)

Uploaded CPython 3.11Windows x86-64

numcircbuf-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

numcircbuf-1.1.2-cp311-cp311-macosx_11_0_arm64.whl (201.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numcircbuf-1.1.2-cp310-cp310-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp310-cp310-macosx_11_0_arm64.whl (202.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numcircbuf-1.1.2-cp39-cp39-win_amd64.whl (182.4 kB view details)

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

numcircbuf-1.1.2-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.1.2-cp39-cp39-macosx_11_0_arm64.whl (203.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for numcircbuf-1.1.2.tar.gz
Algorithm Hash digest
SHA256 3240e0f3092e6eef0e664894bb196cbf643cbb472881dcd264fdc3b79766fe6e
MD5 aff945449cf5719b1f92eb892e73b7c1
BLAKE2b-256 df36ad0da99e6c90de50f218bf60c3b4e894d26186032fd223d28ed1458ba24d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 209.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.1.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1d262b17d32fc34ec301178792125ebbcf438c9ce2a82f850ea00a876f954e44
MD5 af993194730217082cfaa8650b917dcd
BLAKE2b-256 19833f439cc91b36d5bfee932c7649ac904a9ec2c0c36105452c24ffa0b6f6e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 90e74c379829669d2f3d1ee6cac282ff356ed449f1dd006d83627312a13f649d
MD5 1e54d698786dee77ec350f33e45cd431
BLAKE2b-256 0e30e7680654f28b5517f11b746c1709fd1f3d20796be480a7d7b575ad8c007e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 46e5c076e073ee2585c25789abec6e0c10796c881a2eb5a2a723ca754ea8cae5
MD5 cd99ef45eced2b17ffddd313a32b951a
BLAKE2b-256 0ecdb7efa2967ef604d59e55cc02b20833f8e271235133408555be87ef028345

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70cb6d0040c8bde3e9fe567a2dd5e01b01de6ff1a24211a1a1810da041b1e1ae
MD5 8b09e83b437e135b3182d036da4a4232
BLAKE2b-256 832e0d8262e16756905fc4f53a9a77cd7aab49e128f47a349b6888e9f7063eea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 177.9 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.1.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c91c7bbecce86c87c92dbfb64c5665db30238d797bea910b54997da031572007
MD5 f4545b923df8b7184343e1218c172fd3
BLAKE2b-256 32a6c1a7962facbdc42216adf88861b8ec44fa222d3105cbb6604fe6c4824856

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 17e26408ff5d08dc0219066850dd30bbfffeb6e25c4f0b98f5dccb592ac4eb23
MD5 0807c652bd4194f2a10d3b16a01979f6
BLAKE2b-256 67177d812fe7df35039e034c37dca6f287ac64beac4ffb31a009950a289b1882

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d791201adbc1a00d087b2a17a35a223614ab88ee4e25e57e96170e260def8b74
MD5 7da74bdbd8d9d311f7ba4a7b5c5f551d
BLAKE2b-256 3903aa8d79ef8f07ff96794eed1caab54aaaad87ab52a4edafa1599861c06786

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14cccfc861166f204cb6bfb7256eec0e3b02faac6a5031b8a8e5180b487f09ec
MD5 bf7d06e15a73bc30ac175581af171398
BLAKE2b-256 05a197765d7cadbbff5034f3b108c26bf810980ebfd8bcff559abcb4cc70f725

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 176.6 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.1.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cd9fd4de909ff89ceea869863d7c27590da64b894a86b30639135f0f645273c3
MD5 9303b7ab623fbad605905fd73cbb53cb
BLAKE2b-256 417433c1889399381f3b097c92e29d5bd09e718ee2873908209764f3016aab2a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d60a53da3a3f417b37a1b9d14fd71f5e49558fe051e57d8383d8baad7718599d
MD5 9c4dc7235a5f1f376ce9b19bb18c9e75
BLAKE2b-256 615f47e2e4ef0123ad734967f52f15064379f9d046904bf3cbcb9d5585321bc3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 233362e51a6f192d92f65c2f07b9e1ce76753b4ea381e3f32856e22da8d69393
MD5 158dac57ab1fa33dcc6fcaf480bde7b3
BLAKE2b-256 549c11f67e8e52e09f8c3315c041282ddfdc6ac59fb1874a587a27c63748d3f7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcd54e8ea3044f0ea2404db3a71d402c9b40d22076b833eecc428812031de359
MD5 17e23872b80be999c6ff6d31135d5e96
BLAKE2b-256 06ea1818d6a1ff4deee4de913e50f8e7f45193f358766581944150ccd18806f7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 175.6 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.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3967829700694c8c2aa2a163043e861c50e909eff5ea2f3ee92cee7dc6bf2373
MD5 7d1a24ce13700559a52eb9fe53465ee8
BLAKE2b-256 fe21d7e0fb0ad67b21a074d5a519387a1c4e220fde7a085a2a49e06a6beb6e91

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ce31c48cf0eaf5c09a4b9ac27d7466c8fdc41a462f11f45c2dbed18b2b7e2790
MD5 58bbb75c659d387c6873c3594176cd11
BLAKE2b-256 472ed1d68185d31a9ca0b4f5bf9041c9ad74052b2c626c59d7da66abbdfd0a15

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6ed86469f78b10a851de03d038fae28115b076a2d2538cd091755c4a41a2572
MD5 3dbadda871f59410f9d899836f3a2e79
BLAKE2b-256 b1630e6c44187bac7ef6a6509218cacf66fff33506468347b2e878031f2d393d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 09d3565d10c878bfb0212525c91d003219733aaf374aaa945f662ef1c476c070
MD5 a0fa5a91528e4cb5543a7bb2fddf51be
BLAKE2b-256 0a224282d5168b4ebabea9f64847428d551a58cda64a68c67fe9c14b5890a1af

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 182.3 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.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 97a515632603592aa8ff705b2b4d15c9f3657ebc25b508bec928d561276f30bf
MD5 80dfaf4cc9bfde44a93e890bfa834558
BLAKE2b-256 a6e9e14ee90588afa9870e4ce4e84b6ef7ee3fffb32bd340b8c3576a8c8a684c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aa665d892cbbdad3fb8e0a7c83d4227f7313c147486c900067d1d302b5348a05
MD5 3f8337f07c5e1b07880dbbbb1cb08322
BLAKE2b-256 b3239403682a61787b9b903aa857235391fcba7f15dc12919b28c544a2b775a2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 081eb81af74439b710ee1a40ebe335da5a5740e8b5352b5d2a90189040dc5cc2
MD5 efb4b27d162f8709c8fd9ff83a6ec9cd
BLAKE2b-256 36393b7edb88a16694e2e3eb7ee1f570c14689f781c2150fadd520d7913ec89e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d43e0f1300bedcf8e9d1b3ef3ea328a0208c6b6f13cd0ac0d0c40bc3dddacf8
MD5 f21658466421e7a6eec1346224712c89
BLAKE2b-256 33b07dfd3c9d59c056fa730026ce910ef77159134cb7c6a1722979040e190c2a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 181.9 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.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 02e7c595e36f926b8d7da0bea2856fa992bb564231a7e2cafddb9cc31b0f11f7
MD5 53ef3064fcdb628e080b70dad0fca71a
BLAKE2b-256 08e257293327fa574e64b879fc3c0c1bd1460290ea08877f5618c64fa362f442

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b44a7a99cc2bedbeb710ca637c55e3bce27577a1a3cbf48729eb507d87979367
MD5 40d391326b371b08d693472c503c9c3c
BLAKE2b-256 67164f7eef603c69604a6fb4cd68a991ec1dfe5a5def97d68aee81d6123b42d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05d6df2617c5e572e97df54e4d72c3d0ef85091c716510dff1539449b171dd6e
MD5 d5183c80192fc8d97993048ef7ec858c
BLAKE2b-256 c340b7e668c8b1cfc8416cb9509dc350d8754b65d0d73ad65715e6ef9120aa95

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba66cb611f2b584b9bde39c60b7af09470c1018ee364c4f53b906b1f695f792d
MD5 d2cedee2d106eaabf55b2fbc130617bb
BLAKE2b-256 d0bb9865923098b79aca2945206fcfc6f064ca0ca057dd0bf0e526ef8363b8ba

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 182.4 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.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3b5b9ddab2dbb29be5024b50ce0a6747bb9f28148c6577821c5ca59b33fb86ca
MD5 019023cee1c66a12d1cc8d98f560e7cd
BLAKE2b-256 9dc8ee6ac1b38192a4fa7feff51b7d9d410a3fb02703b38fca3df8a455889a37

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4a9925694c55e8e5771969e58676be5b0cebf8b658cf5d4709eb31ac3b61890d
MD5 4595b2e549ba89e9e40aa53698c73987
BLAKE2b-256 d923e8fca28a1f122b50aff474c9fd101db1592da2145ffa5dc0ab3425f8c1e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b564703e469f59f178e5bb02a1c0bda43f1a9fbd91291b838e0235c84ba36bb3
MD5 f116c0864c66b5a7936363f892aa3e7f
BLAKE2b-256 2e885ce5bf0015aab46e2723d1f58629a25ebd5d0f7536c5a183123cc51be984

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 208a943c4c9b6899551ea6f8ca30d805d898ebc3d8f2493beea8b5c423f65af4
MD5 80692a179222ece9e48b2c8d9f2e58d3
BLAKE2b-256 797de1ccb2a03e223182ef06ee4a76c294e84f3d19e5fdf939f30f98ac94072b

See more details on using hashes here.

Provenance

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