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, designed for high-throughput ingestion. 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 – 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/energy 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 & Performance: Includes extensive API documentation, usage examples, and detailed performance benchmarks across all buffer types.

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.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.1.1.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.1-cp314-cp314t-win_amd64.whl (209.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

numcircbuf-1.1.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.1.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.1.1-cp314-cp314t-macosx_11_0_arm64.whl (213.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

numcircbuf-1.1.1-cp314-cp314-win_amd64.whl (177.8 kB view details)

Uploaded CPython 3.14Windows x86-64

numcircbuf-1.1.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.1.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.1.1-cp314-cp314-macosx_11_0_arm64.whl (200.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

numcircbuf-1.1.1-cp313-cp313-win_amd64.whl (176.7 kB view details)

Uploaded CPython 3.13Windows x86-64

numcircbuf-1.1.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.1.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.1.1-cp313-cp313-macosx_11_0_arm64.whl (200.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numcircbuf-1.1.1-cp312-cp312-win_amd64.whl (175.7 kB view details)

Uploaded CPython 3.12Windows x86-64

numcircbuf-1.1.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.1.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.1.1-cp312-cp312-macosx_11_0_arm64.whl (200.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

numcircbuf-1.1.1-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.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (201.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

numcircbuf-1.1.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.1.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.1.1-cp310-cp310-macosx_11_0_arm64.whl (202.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

numcircbuf-1.1.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.1.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.1.1-cp39-cp39-macosx_11_0_arm64.whl (203.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: numcircbuf-1.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 a1aa7c2b8dc0b4e6c9f915509f1676509f3c7f928af5ec7225f594f47e612d86
MD5 ad296592d27bc0d95ddb6e2cbb632947
BLAKE2b-256 d3f8d3f4064bb42f57114664397a03a81cc91b7814867112631d1e7e24232c00

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 209.7 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.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 8b7de4a441bdfcb0a90d03782a30e1731334e4c0f690419cbe93dbb5d1626333
MD5 782eedbc325b3e2a9e89302ae20d50ee
BLAKE2b-256 33002d8d4f872b7c6e1b0ebc5e32d2589c4873eb2d348a0c83c7bbf5dd490cf9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a0e95ae16d2618818f459315e9499ebd04b3d0ed2b11b7e7f8ea627f2de58f68
MD5 30a1f917c92b305e7fec77293ceb6ffd
BLAKE2b-256 f1087b32175fd2fcc420ab1833f9bd474b51ae72c05d05a5f1a4b53710278e12

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f304a2a12d01d38d0ed6c6b811c9f212325ca920def9d688e95956b2072486c
MD5 31b42a798619f94a68fd710e5cdaa06c
BLAKE2b-256 6e72ac85cb0cb884102975045801d02be0ee8cd2bdeaa38a03b4b30af146fe86

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88e38a2f6648d94b9e9c579fa3eb4f2ce3f44097373412be13f3967bd0d9cf40
MD5 c916443d0a8821aaf7e165c20eae5380
BLAKE2b-256 6f4a3783386752b227cd9bd8eb2dbf856b44be56170ceeb6a2d7f686e074e67c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 177.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.1.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ce0f0059f796b601c586f149a1b85e453601a47a541200ae2ff0382d0eb9ad56
MD5 1bd42da7382c3d164ef0a73c3ddfb3a5
BLAKE2b-256 6ce373d53950a9d13518a227c57417f93299b3708119e2b10a9d897a0b495e59

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2454442a194984416413348aa6bbbc1c9073aed9651c9d20f2d00d1c1c82e039
MD5 09d8a6e2a8562a3c4c340e27ee43bc87
BLAKE2b-256 de44fe91475cc168db7dc559f8c1a2ea6a7b6085a2be5e03df61d568da91bdae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7136db234d2c4ad83f432ea99c9715a681c591abda55a93f490991bf336c7ad9
MD5 82e80c417f15a9d75edf898d350eab05
BLAKE2b-256 03ce85a42042cea9e0050e06d9ea44d2ad16aefb00a8cbe8e4639a9547e91d94

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a62c7cbdd628a12db8d8b542e2ba498c3c42348ecc2d552c339f0df3330df95a
MD5 61256f7f26a3e190718cf89dc9528ac6
BLAKE2b-256 e8b99aec1245ae07529319d92c542880496b4af4c50ab2c9df2ecc57c7abb029

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 176.7 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 60b0b38cb33763ac21900dc19a3f383390ff161e5190c4093a28d61d0d1623d1
MD5 092df1253c472d0ef5c9fbae31c383ac
BLAKE2b-256 33fa56bda18ce2134f91fee747ab1816209d746bb92bd5b45450e5a23f0b78b2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d9dafc35d548584d254f274b9b19f0d85b258b3ce4d0f94ce8bbc0030d1c0809
MD5 00671ed95d14286f8769dc3428e4ef07
BLAKE2b-256 e9b40a687db8a2bf556b28cf3b9a22706512b4ab099874eded4f291780e9074e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc5a00fcbccd27f663f019c8a28d028bc827f3901a95973a450ca0f2f6a9fead
MD5 9c0b520eb781c5b47b4707565fdeaf85
BLAKE2b-256 f5f46895945f33d46250c3cd7cb2f3982a6db8170756df83207772acec586891

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 85d4f41f90d30d54b50c736888d1671430a6ee0ee34dbf4dbcd064f9083394bb
MD5 cf92b7bf23cb2592ddc8fd29f0686c2c
BLAKE2b-256 bb5e76239641712568491ec7de100c11363fcab17c0de07584bb312889d36d2e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 175.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.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6c0e2f8d9f34cdda60049b4d56fa2d17e319446a681bdf163f47bd0a37cac28d
MD5 c39c29c1d61df6d621022d5e437435e3
BLAKE2b-256 21066bdd6b19c37575fe553e30d1727bae18cbf4c8e94fdfd4f08f8bcd6f5a87

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bccb76a24b778e4b4f069ab02d6373131daa89a240c4ebae800274a52a750ef3
MD5 b15737244744101c465905b8d3c5504a
BLAKE2b-256 ce581279a326fd465c0dd135f2438726d000a4c2b283dd13a13c5b0a9e6c06cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 edc32fa194e1313e07d6dd4e4cda6947f5ecb22995763d62670a5d262a0ab3a0
MD5 3d24a1d958084e3fa55c9239266bd535
BLAKE2b-256 e8d575aa3c52ac8d7b15e8e1b045371101fbe1d124f33e15fd42f0237a6a2ac0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 443bf88e1757a9a31520453eaf37a00c1b7bbb42da3554cb79b8efd31af24f8d
MD5 728ea28fa4d7418a608546b1d6af94e2
BLAKE2b-256 69426362fef80c7465579c219b039f859f9491950d8ca763cb67c00d29571b80

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bee8b7a1938da4a6503a04900b197499f5e987d4af09de8d0f3af3359f90cbb8
MD5 033a8224e05fdc5d09ba27d33d155f08
BLAKE2b-256 181f6422d9023d3bf831fdddb3fab6d956f1403ec07e7ab67917497e8406221a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2bd1eab1e712dd29c454c867f14ed2869a2c63cd4044c0a22865da7b118f9e73
MD5 11d4cc605b674e5b4e1419c54908e039
BLAKE2b-256 ce64995dd95a6a874af654beeb83afa29378d2dc60027f966caf3a65d1e6a76f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 57b97e98f754c1ef3d978b557cd4df8621eff5e42406db68149171824780320d
MD5 454c380ad6a8f98a89e05dd56f19b4cd
BLAKE2b-256 ff9dd340a4c61d27099757629550ff40c34762b46772d002717e7cf755593e1c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1b4f5c38f341b08a4b9b1aec477bec68defff3d7933b9b957f6ebbf886181bf
MD5 0f0e597cdd26d576c86310b00d0208b6
BLAKE2b-256 e65f83105fd5970f4d4bedb6178f35345180b1506f59207aa4d8996462771c2a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 823e56e79da2bbbd30c7cc0600cfb3156af3b72feb2c36d25d6e76f1c59f2aea
MD5 49a83fb7368f4e519f95323dca1ab94e
BLAKE2b-256 8a2e868776d571c39fdf433694062e2251513be6adbb9e2559bc4a2bebf47356

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5f155233a31d7b74e8cc4d5e94259e7b7539534b6900a27be09121d99f512a04
MD5 ed40801869bd20c04217357f09974121
BLAKE2b-256 2b67c63e94bac9bcdbcadf6d66aeff72e0d4526481f34867889b12c1c3fa4dd6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d8d1b239668d67707d974da1e0f84e3ec245edea0a4bbb4d342220f0de7f19c
MD5 d5830f1866213ebde98dfad84cefc6ca
BLAKE2b-256 ad175a509d47cf954468cf62a1d1591f6e754f0bd87be702bd37331db526d2bf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1956124b7b84bdd86f19ac401d26150b70c9436f9f3b74fb532b544840c7fd0
MD5 cc4fdf076ab2092660aea32c8539f95e
BLAKE2b-256 974c1a8a1b66a77db5104ba93430ae2332fffc8665983c5cdd07cf112d470995

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: numcircbuf-1.1.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8b8b8a82c0b238948550613805d4efc6962da8195a6b8a5fa106e6397f83f08f
MD5 b33cca71efae4748d827ccf37ac6ad74
BLAKE2b-256 f3fcfb963f179ebbf6d25ebee833ead281004e83730875fbd6e7f423ff1b3dd5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 476cb850a095e1f27e49bf8e26de2f2cba18a3886cb3cd80d15ebcaf199e0b02
MD5 a55aa336c549d7c6e41c3c4ccee36420
BLAKE2b-256 9cb4cce507d84b6829b4ffe18b709ae375c966f437a02a4bcace0b659761f912

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 08f2dad5fabc0d5d3284f79870f6184159a56050cc699154e71d12cc72ed32a2
MD5 76056db02b5cbddc0dab06cfc86aeb51
BLAKE2b-256 a1e162ce8ebd8bdf0c5516a9ca43073af2a0f6d0ce248501f210600a0354161d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4b381398c3e6fa2057bb8fb32f23669df451f16c8f3de628d26361fe45d1e3f
MD5 e76b28ddb9edfdfd0e3f63fde484d154
BLAKE2b-256 1c10b003e65e6ba39be43930d1de1cb5fe9af3cbe4a84879625db15968bb7c2b

See more details on using hashes here.

Provenance

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