Skip to main content

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

Project description

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

PyPI version License Python Version Build Status

Table of Contents

Overview

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

Features

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

Installation

pip install numcircbuf

Or install from source:

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

For development installation with all dependencies (from source):

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

Verification

To verify the installation and check the version:

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

Common Buffer API

All buffer types expose the following methods:

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

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

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

The Buffer View (ViewProtocol)

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

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

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

Usage Example

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

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

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

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

Main Buffers

1. OverwriteCircBuffer

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

Provides simple vectorized mathematical metrics over the buffer contents.

Note: This buffer is not thread safe.

  • Concurrent reads during writes can provide inaccurate data
  • Concurrent writes can cause data corruption.

Constructor

def __init__(
    self,
    maxlen: int,
    return_overwritten_policy: Literal["never", "always", "conditional"],
    dtype: (
        type[np.float32]
        | type[np.float64]
        | type[np.int32]
        | type[np.int64]
        | type[np.uint32]
        | type[np.uint64]
    ) = np.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.
    test_blocks: int = 128, # How many blocks to run the benchmark for,
                            # more = (higher memory usage)
                            # + (potentially more accurate results).
    verbose: bool = False, # Logs the exact relative multipliers,
                           # as well as total time spent in the function.
) -> Literal["calculation", "extend/append"]: # Outputs the best operation focus
                                              # for this (use case) + (system),
                                              # This can be directly passed to
                                              # the buffer init

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

Recalculation Threshold

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

Usage Example

import numpy as np
from numcircbuf import RunningMeanSqBuffer, determine_operation_focus

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

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

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

2. RunningMeanBuffer

Accumulator-capable circular buffer optimized for mean calculations.

Features fully vectorized operations, and caching for mean.

Note: This buffer is not thread safe.

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

Constructor

def __init__(
    self,
    maxlen: int,
    operation_focus: Literal["extend/append", "calculation"],
    dtype: type[np.float32] | type[np.float64] = np.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 the square of the input values. Values retrieved via views will represent squared values, not the original linear amplitude.

Note: This buffer is not thread safe.

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

Constructor

def __init__(
    self,
    maxlen: int,
    abs_gate_lufs: float,
    rel_gate_lu: float,
    recalc_threshold: int | None = 0,
    dtype: type[np.float32] | type[np.float64] = np.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 is optimized for speed and efficiency:

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

Benchmark Results

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

Key Performance Highlights:

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

    • Cold cache (data):

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

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

Documentation

Changelog

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

License

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

Support

For issues, questions, or feature requests:

Citation

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

@software{NumCircBuf,
  author = {Syed Basim Ali},
  title = {NumCircBuf: High-Performance Numerical Circular Buffers for Python},
  year = {2026},
  url = {https://github.com/basimali-ai/NumCircBuf},
  version = {1.0.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.0.2.tar.gz (260.3 kB view details)

Uploaded Source

Built Distributions

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

numcircbuf-1.0.2-cp314-cp314t-win_amd64.whl (206.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

numcircbuf-1.0.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.0.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.0.2-cp314-cp314t-macosx_11_0_arm64.whl (209.4 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

numcircbuf-1.0.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.0.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.0.2-cp314-cp314-macosx_11_0_arm64.whl (196.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

numcircbuf-1.0.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.0.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.0.2-cp313-cp313-macosx_11_0_arm64.whl (195.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

numcircbuf-1.0.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.0.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.0.2-cp312-cp312-macosx_11_0_arm64.whl (195.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

numcircbuf-1.0.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.0.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.0.2-cp310-cp310-macosx_11_0_arm64.whl (198.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

numcircbuf-1.0.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.0.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.0.2-cp39-cp39-macosx_11_0_arm64.whl (199.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2.tar.gz
Algorithm Hash digest
SHA256 e831c550f4fd608506d486925a4a5ff84af3b600ec60d3cbc11f8598e390bcca
MD5 d1292694158d7b5fc2a27cc9174fe1fa
BLAKE2b-256 cf5ab6b4ecf381cb64774a1b2cd9bf4d67d6d541de7af319c46425357bf3b832

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 862e61e16039af4c466c6c1a87a0b3a5eccf315854dff3bc433ffe620e8d7a3f
MD5 27e21c4b157e7de0eabb76005ac23969
BLAKE2b-256 2131b4710a96465770d3faec7ed983f75941a281b42921ecdffaf3cb61d1f2a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e0dc029d8108fbec72262a943658e9cd2729d49a8298746b46cb5eebd9d61441
MD5 b651a978a935a2df66183e5d0f69345e
BLAKE2b-256 3bcb66c024251bd5f4cfc292a2936ea6eb7db572e658ad5b6442ee73d2945e70

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ad0b5b669c2c32f4ce1f6628516f4a229059922ccccdd0ab8308fca7a96aa77f
MD5 0e7b4f3124b9b4265cd88cfeceb4b074
BLAKE2b-256 48a9e187c92a956fecd2952ce9cd01ebbc15fb2a9648b23ff69b9d69723697f1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2319b245d5b88b8606e65ecb1354a8d3e5c0f65431e72b72981f92920d08e519
MD5 e03eeac5cf6f39d49b476822f64d842f
BLAKE2b-256 1d650656be90152c2f3c437d62d1e68e6843d597bafb9ff42df4a178852c078b

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 67bb6bd759e3b77701efa1744c2fbbb00e0596f0a6444a59e1651cf6c91f2dd3
MD5 87176214e1c3dd660b5dfb78cb8f8e71
BLAKE2b-256 cfd5b87e37b95772465a9c6b947de1b063594870b66771a4af8cc9a5eaa7aebc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 addf5be7cca35d3c558f06864f309dc74c60bc773f2b01cb14ea9c5b94cf7607
MD5 bb9ff0b411d2f2ce005dffe9928778ed
BLAKE2b-256 12e10e4a298cc522baf77507ab3bd2edfc02d8e4f8d2198cc7c72d5ad9462245

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a238ecc5db1f70596d3c2afa0f260d0961a296cd2a777b5f1af241821afb8c23
MD5 5d6c12cfcf7f33dfa71cf5ecf4249043
BLAKE2b-256 8a4e11bcd2f85161190d8760f1fbb1b5a31fdb4e34f35a68de3296c313a957f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11c2cb6ea14fabc8862f924c9f20aad197dbb2f72465784293c6ee2b9ba76a38
MD5 2add750d0cee423ed897fe16a1cdcb46
BLAKE2b-256 0d3f11a00677b91265c096b131fca16109ae63c0464d426495ca0217a0bbf2bf

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 66fa98d36cee6d27de58254176a5542834b94f679f2106ee9f3ba3f50ba6f1e2
MD5 175fa398dbfbd91dfb02dd670099cf5c
BLAKE2b-256 9906fc29d8f8494ba3e0a3881317e0c9cef1c4ee621c3f4af02283a1f0d9f600

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 00eeb466680e5212bab471fea19be315f2e88924cd469f1e89900fa888283669
MD5 0564b70f1b1887be4220833908b886ad
BLAKE2b-256 8f4032430311d2d8abf91a9ab883f978932efb00224d1a9949859017e265c9ce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f8a5d096c89b5942a0c4890021a935cf9c83b85da77375a8c3efef0d03a594c5
MD5 8b403da33f2de5b4655d3f1ad9b2bc41
BLAKE2b-256 2841475e6b00d92bbf08a716ca6d8081eccfdd8a010caa047a943171984ba751

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 099ef3bf9c90123defbf248514c68375009d9299b44a0e9b3a79ee47799cb3a8
MD5 ee3032ea2217d9263d569db8c514c831
BLAKE2b-256 53f5f8db7554e91147c49d7ca64eaecc29ff6ebfafe0c33eee6e00b3e592e031

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c23909d69dfde5777f60df6d2d8386de0d1e3b31f435b2bf4ccc57eb902d2049
MD5 14d8cc334721adb870c2acb466084067
BLAKE2b-256 406e379fbf5bcb60a4c446ce2f439f901629a8ce51a9f92e2012efabb8384f25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d59a7504d12e6c1af61079f112ebdd6cc8af2bacbace413b711b2e97afaa7fa0
MD5 dbaef0f4747d836716203e4a9ecf409f
BLAKE2b-256 0786587a8025874a1074b0f981ce3029d9774ff7264b3e08784bf2d44624952d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6d906fc346088d3f1852204fda89e28d921eee8e3b23db2f9e21c44e93e8fa55
MD5 3807e9634e29854c1af7054c0cb91c0c
BLAKE2b-256 e9e4d3b6875ac8690f60b06b796ad8bc5c5af0d6d8d1b315546ea53f80c84073

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b8a6fb11f967cba10d6d2675bf08d4308dfed4a7409e900f8bf29c7e2221064
MD5 bd41dbea6d35d505d761ddce2c1e714d
BLAKE2b-256 fcb2ab3a8bf6d442e10fe057c6a72125d2649714a3e69faff1eaa95f06811d7f

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c8019d3647d637306c38b7498419d59bd67641d1a838603ffefc611ed732722a
MD5 5711d58ffc4515244b10dfed68dd32f8
BLAKE2b-256 35945c9313fc45f34335d4b612ce5e3e98669c9c8546910fe692bd8cf59b7614

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5986ffc9f106f2f09e50e5361da32ad1b33b7084b7e82f328139f973bb3e6e61
MD5 f0f9b473dc9e458fdc06ed42306aaadc
BLAKE2b-256 900ddda19a8dc845c3d8790e473a43b6cb89d1c993a261b66ba5dc4937bc6cd3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8236b692bba1f2edd5f56c7d43a2aba0aca70fad830df7ef7a4c68c704efc63a
MD5 62b1cea022e94db1057e0a6cf629bfb4
BLAKE2b-256 56916941565afa2716a639213ba23607d2d4a2f5b0ec53955c279ff24441bd76

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f3703552701486366ef3d6ab3c4b47e37e2b43d0d8a49c876e3da37b978e5dc
MD5 571e7118d5958ed5e9db97dc343f742b
BLAKE2b-256 39c4363f9026e27145b5ad22b8f406d344bdac707fa2aab0c5be36854de7570a

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 29d8d1df269acc2dbebec1bb4a859a91cde06bc1e5605643e4bc0b967251471d
MD5 d03fa96f6e79ca052649e42f37f58da5
BLAKE2b-256 bdcd433b1f5e64bdcb7ad9fb4d8836aaaf081a032cbb9bc8a4af0f6f9f615f7a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f9c54164020dc516539af71b1512549dc7c6c7332f33ebcbf49efc3a4f55834f
MD5 9eb00cda007ce0be31d8f3b84c37b48c
BLAKE2b-256 10c2f384b4bd022a679163aafa0e799e07f788b29967b680353080e15c3ab21a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a0e709ed44cb4bb93d25d8b32e5d8077f3178660e0943c4bfec76a0ad77658bd
MD5 3d6ad27ceb267c2095d614b1bdee4cd9
BLAKE2b-256 ab93bdf6390446ea0b2ffa9c763c2a2b9ecd7c18970438ecefef4c7fc654730b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66fdd42fee9a568e8ea4c461750efb3a28306ecf643481cd5ae274e6b9099ecd
MD5 ed0ddf1cf14f8d193505c6228bbc6a18
BLAKE2b-256 1c5e9e556f7c3e1e6bedc2e21100848645801f8e9f9cb0c921ff789eac9b0007

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for numcircbuf-1.0.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f67f120ac34addd86027d2707099212db67dca8c0ba91ac13ad071022970552f
MD5 770e29393d395d44c9636ab404834c76
BLAKE2b-256 39548f1e582f2071ee229625f25ae7984a1853807c8b42ca13742b4ef6544814

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d70db05b5b13b901a0afb077e7de49d8f8f040556ff19a20380f7669f9728d59
MD5 0d8284cf5d31fd145b236f92f89424c8
BLAKE2b-256 b90046a62db28c7f907372df4219c5fcbeedcb62bc14124c618e367158205af7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 468ef10a1031446c4ec402a4e7d18756977c2c8000045c5082901944b5f01dee
MD5 c4410d08ab40851ca4099d377c7c4539
BLAKE2b-256 a9f713de7e6d7fbab1d55017c489b5d135a7ca28b0b69039e2bd04b0486d709b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for numcircbuf-1.0.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba6fe6aa7e4226c798fbf6339bb377a94e2d8dd7a21286b358170ff9e84db881
MD5 bb07d7e06205390b2c060a52bf98bf50
BLAKE2b-256 910396f472d3ba48457c88e8e8668503292a815432d5b3e5bfd34b82af5441d5

See more details on using hashes here.

Provenance

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