Skip to main content

Copapy

Copapy is a Python framework for deterministic, low-latency realtime computation with automatic differentiation support, targeting hardware applications - for example in the fields of robotics, aerospace, SDR, embedded systems and control systems in general.

GPU frameworks like PyTorch, JAX and TensorFlow jump-started the development in the field of AI. With the right balance of flexibility and performance, they allow for fast iteration of new ideas while still being performant enough to test or even use them in production.

This is exactly what Copapy aims for - but in the field of embedded realtime computation. While making use of the ergonomics of Python, the tooling, and the general Python ecosystem, Copapy runs seamlessly optimized machine code. Despite being highly portable, the copy-and-patch compiler allows for effortless and fast deployment without any dependencies beyond Python. It's designed to feel like writing Python scripts with a shallow learning curve, but under the hood it produces high-performance, statically typed and memory-safe code with a minimized set of possible runtime errors1. To maximize productivity, the framework provides detailed type hints to catch most errors even before compilation.

Embedded systems come with a variety of CPU architectures. The copy-and-patch compiler already supports the most common ones2, and porting it to new architectures is straightforward if a C compiler for the target architecture is available3. The generated code depends only on the CPU architecture. The generated binaries neither perform system calls nor rely on external libraries like libc. This makes Copapy both highly deterministic and easy to deploy on different realtime operating systems (RTOS) or bare metal.

The main features can be summarized as:

  • Fast to write & easy to read
  • Memory and type safety with a minimal set of runtime errors
  • Deterministic execution
  • Automatic differentiation for efficient realtime optimization (reverse-mode)
  • Optimized machine code for x86_64, 32 Bit ARM (Cortex-A and Cortex-M) and AArch64
  • Highly portable to new architectures
  • Small Python package with minimal dependencies and no cross-compile toolchain required

Execution of the compiled code is managed by a runner application. The runner is implemented in C and handles I/O and communication with the Copapy framework. The overall design emphasizes minimal complexity of the runner to simplify portability, since this part must be adapted for the individual hardware/application. Because patching of memory addresses is done by the runner, the different architecture-specific relocation types are unified to an architecture-independent format by Copapy before sending the patch instructions to the runner. This keeps the runner implementation as minimal as possible.

Copapy architecture

The design targets either an architecture with a realtime-patched Linux kernel - where the runner uses the same CPU and memory as Linux but executes in a realtime thread - or a setup where even higher determinism is required. In such cases, the runner can be executed on a separate crossover MCU running on bare metal or a RTOS.

The Copapy framework also includes a runner as Python module build from the same C code. This allows frictionless testing of code and might be valuable for using Copapy in conventional application development.

Current state

While hardware I/O is obviously a core aspect of the project it is not yet available. However the computation engine is already fully functional - for all above mentioned target architectures - and available for testing and experimentation simply by installing the package. The project focuses now on integration into the first demonstration hardware platform.

Furthermore in development are currently:

  • Array stencils for handling large arrays and generating SIMD-optimized code - e.g., for machine vision and neural network applications
  • Constant regrouping for further symbolic optimization of the computation graph

Despite missing SIMD-optimization, benchmark performance shows promising numbers. The following chart plots the results in comparison to NumPy 2.3.5:

Copapy architecture

For the benchmark (tests/benchmark.py) the timing of 30000 iterations for calculating the therm sum((v1 + i) @ v2 for i in range(10)) where measured on an Ryzen 5 3400G. Where the vectors v1 and v2 both have a lengths of v_size which was varied according to the chart from 10 to 500. For the NumPy case the "i in range(10)" loop was vectorized like this: np.sum((v1 + i) @ v2) with i being here a NDArray with a dimension of [10, 1]. The number of calculated scalar operations is the same for both contenders. Obviously Copapy profits from less overheat by calling a single function from python per iteration, where the NumPy variant requires 3. Interestingly there is no indication visible in the chart that for increasing v_size the calling overhead for NumPy will be compensated by using faster SIMD instructions. It is to note that in this benchmark the Copapy case does not move any data between python and the compiled code.

Furthermore for many applications copypy will benefit by reducing the actual number of operations significantly compared to a NumPy implementation, by precompute constant values know at compile time and benefiting from sparcity. Multiplying by zero (e.g. in a diagonal matrix) eliminate a hole branch in the computation graph. Operations without effect, like multiplications by 1 oder additions with zero gets eliminated at compile time.

For Testing and using Copapy to speed up computations in conventional Python programs there is also the @cp.jit decorator available, to compile functions on first use and cache the compiled version for later calls:

import copapy as cp

@cp.jit
def calculation(x: float, y: float) -> float:
    return sum(x ** 2 + y ** 2 + i for i in range(10))

# Compile and run:
result1 = calculation(2.5, 1.2)

# Run cached compiled version:
result2 = calculation(3.1, 4.7)

It is to note that cp.jit is not optimized very much at the moment concerning transfer data between Python and the compiled code back and forth.

Install

To install Copapy, you can use pip. Precompiled wheels are available for Linux (x86_64, AArch64, ARMv7), Windows (x86_64) and macOS (x86_64, AArch64):

pip install copapy

Examples

Basic example

A very simple example program using Copapy can look like this:

import copapy as cp

# Define variables
a = cp.value(0.25)
b = cp.value(0.87)

# Define computations
c = a + b * 2.0
d = c ** 2 + cp.sin(a)
e = cp.sqrt(b)

# Create a target (default is local), compile and run
tg = cp.Target()
tg.compile(c, d, e)
tg.run()

# Read the results
print("Result c:", tg.read_value(c))
print("Result d:", tg.read_value(d))
print("Result e:", tg.read_value(e))

Inverse kinematics

Another example using autograd in Copapy, here implementing gradient descent to solve an inverse kinematics problem for a two-joint 2D arm:

import copapy as cp

# Arm lengths
l1, l2 = 1.8, 2.0

# Target position
target = cp.vector([0.7, 0.7])

# Learning rate for iterative adjustment
alpha = 0.1

def forward_kinematics(theta1, theta2):
    """Return positions of joint and end-effector."""
    joint = cp.vector([l1 * cp.cos(theta1), l1 * cp.sin(theta1)])
    end_effector = joint + cp.vector([l2 * cp.cos(theta1 + theta2),
                                     l2 * cp.sin(theta1 + theta2)])
    return joint, end_effector

# Start values
theta = cp.vector([cp.value(0.0), cp.value(0.0)])

# Iterative inverse kinematics
for _ in range(48):
    joint, effector = forward_kinematics(theta[0], theta[1])
    error = ((target - effector) ** 2).sum()

    theta -= alpha * cp.grad(error, theta)

tg = cp.Target()
tg.compile(error, theta, joint)
tg.run()

print(f"Joint angles: {tg.read_value(theta)}")
print(f"Joint position: {tg.read_value(joint)}")
print(f"End-effector position: {tg.read_value(effector)}")
print(f"quadratic error = {tg.read_value(error)}")
Joint angles: [-0.7221821546554565, 2.6245293617248535]
Joint position: [1.3509329557418823, -1.189529299736023]
End-effector position: [0.6995794177055359, 0.7014330625534058]
quadratic error = 2.2305819129542215e-06

How it works

The compilation step starts with tracing the Python code to generate an acyclic directed graph (DAG) of variables and operations. The code can contain functions, closures, branching, and so on, but conditional branching is only allowed when the condition is known at tracing time (a cp.iif function exists to work around this). In the next step, this DAG is optimized and linearized into a sequence of operations. Each operation is mapped to a precompiled stencil or a combination of several stencils. A stencil is a piece of machine code with placeholders for memory addresses pointing to other code or data. The compiler generates patch instructions that fill these placeholders with the correct memory addresses.

After compilation, the binary code built from the stencils, the constant data, and the patch instructions is handed to the runner for execution. The runner allocates memory for code and data, copies both into place, applies the patch instructions, and finally executes the code.

The C code for a very simple stencil can look like this:

add_float_float(float arg1, float arg2) {
    result_float_float(arg1 + arg2, arg2);
}

The call to the dummy function result_float_float ensures that the compiler keeps the result and the second operand in registers for later use. The dummy function acts as a placeholder for the next stencil. Copapy uses two virtual registers, which map on most relevant architectures to actual hardware registers. Data that cannot be kept in a register is stored in statically allocated heap memory. Stack memory may be used inside some stencils, but its usage is essentially fixed and independent of the Copapy program, so total memory requirements are known at compile time.

The machine code for the function above, compiled for x86_64, looks like this:

0000000000000000 <add_float_float>:
   0:    f3 0f 58 c1              addss  %xmm1,%xmm0
   4:    e9 00 00 00 00           jmp    9 <.LC1+0x1>
            5: R_X86_64_PLT32    result_float_float-0x4

Based on the relocation entry for the jmp to the symbol result_float_float, the jmp instruction is stripped when it is the last instruction in a stencil. Thus, a Copapy addition operation results in a single instruction. For stencils containing multiple branch exits, only the final jmp is removed; the others are patched to jump to the next stencil.

For more complex operations - where inlining is less useful - stencils call a non-stencil function, such as in this example:

0000000000000000 <sin_float>:
   0:    48 83 ec 08              sub    $0x8,%rsp
   4:    e8 00 00 00 00           call   9 <sin_float+0x9>
            5: R_X86_64_PLT32    sinf-0x4
   9:    48 83 c4 08              add    $0x8,%rsp
   d:    e9 00 00 00 00           jmp    12 <.LC0+0x2>
            e: R_X86_64_PLT32    result_float-0x4

Unlike stencils, non-stencil functions like sinf are not stripped and do not need to be tail-call-optimizable. These functions can be provided as C code and compiled together with the stencils or can be object files like in the case of sinf compiled from C and assembly code and merged into the stencil object files. Math functions like sinf are currently provided by the MUSL C library, with architecture-specific optimizations.

Non-stencil functions and constants are stored together with the stencils in an ELF object file for each supported CPU architecture. The required non-stencil functions and constants are bundled during compilation. The compiler includes only the data and code required for a specific Copapy program.

The Copapy compilation process is independent of the actual instruction set. It relies purely on relocation entries and symbol metadata from the ELF file generated by the C compiler.

Developer Guide

Feedback and contributions are welcome - please open an issue or submit a pull request on GitHub.

To get started with development, first clone the repository:

git clone https://github.com/Nonannet/copapy.git
cd copapy

You may set up a virtual environment:

python -m venv .venv
source .venv/bin/activate  # On Windows: `.venv\Scripts\activate`

Build and install the package and dev dependencies:

pip install -e .[dev]

If the build fails because no suitable C compiler is installed, you can either install one or use the binary package from PyPI:

pip install copapy[dev]

When running pytest, it will use the binary components from PyPI, but all Python code is executed from the local repository.

To run all tests, you need the stencil object files and the compiled runner. You can download them from GitHub or build them yourself with gcc.

Download the latest binaries from GitHub:

python tools/get_binaries.py

Build the binaries from source on Linux:

bash tools/build.sh

Run the tests:

pytest

License

This project is licensed under the MIT license - see the LICENSE file for details.

  1. Errors like divide-by-zero are currently still possible. The feasibility of tracking value ranges in the type system is under investigation to enable compile-time checks. ↩

  2. Supported architectures: x86_64, AArch64, ARMv6/7 (non-Thumb) and ARMv7 Thumb for Cortex-A and Cortex-M. Code for x86 32-bit exists but has unresolved issues and a low priority. ↩

  3. The compiler must support tail-call optimization (TCO). Currently, GCC is supported. Porting to a new architecture requires implementing a subset of relocation types used by that architecture. ↩

Release files for copapy 0.0.7.post0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for copapy 0.0.7.post0
File
copapy-0.0.7.post0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.31+ ARMv7l, Linux glibc 2.17+ ARMv7l Details
copapy-0.0.7.post0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) Details
copapy-0.0.7.post0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
copapy-0.0.7.post0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
copapy-0.0.7.post0-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details
copapy-0.0.7.post0-cp314-cp314-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) Details
copapy-0.0.7.post0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_armv7l.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
copapy-0.0.7.post0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
copapy-0.0.7.post0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
copapy-0.0.7.post0-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
copapy-0.0.7.post0-cp313-cp313-macosx_10_13_universal2.whl CPython 3.13 CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) Details
copapy-0.0.7.post0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_armv7l.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
copapy-0.0.7.post0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.31+ ARMv7l, Linux glibc 2.17+ ARMv7l Details
copapy-0.0.7.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
copapy-0.0.7.post0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
copapy-0.0.7.post0-cp312-cp312-macosx_10_13_universal2.whl CPython 3.12 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) Details
copapy-0.0.7.post0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_armv7l.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
copapy-0.0.7.post0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
copapy-0.0.7.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
copapy-0.0.7.post0-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
copapy-0.0.7.post0-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
copapy-0.0.7.post0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_armv7l.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARMv7l Details
copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARM64 Details
copapy-0.0.7.post0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
copapy-0.0.7.post0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
copapy-0.0.7.post0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
copapy-0.0.7.post0-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
copapy-0.0.7.post0-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 11.0 MB

Release files / copapy-0.0.7.post0-cp314-cp314t-win_amd64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-win_amd64.whl
Size 198.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
4f7b8f3b25aba5878c139c9a335ee26d73d036ca7d976ceb668a335b3d37b9d7
BLAKE2b-256 checksum
How to use checksums
0e67fc77990ad08b06379d3ef6062368511c174991781e42b82b93ee26c0a87a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 206.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
bbde6c8c68cd554eb530df25dce5ca1577ef77e4d4ae7194f66843a7169a3437
BLAKE2b-256 checksum
How to use checksums
afb89bd6bd37a326a97574876969849a599be7024fbd0079f588db4d857acd97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_armv7l.whl
Size 206.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
157717562508dabd2d594d1ffa5a769a32d9baedc98004ea644a8b79f219cde1
BLAKE2b-256 checksum
How to use checksums
9cdb0081346c3e56fc928c4f60887892afd976c97ec95b5bd61f205e8b58bc20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 206.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
2c4fead82ca80b3a68ef18b261d950a18af1e058805e267db94926590a5c4d5b
BLAKE2b-256 checksum
How to use checksums
cdcbcbce4f78b2f0a2e3ca8be4413930c24db414c8f5d00fc95277f226989328
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 206.5 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bdb3acfd016a4e3d5a9d6f729ad541500a6511a3356e061bb219e9a445b9f852
BLAKE2b-256 checksum
How to use checksums
24e3fec3569622aaac16cef61b15b3ed600043b5b81edd5671e71e8e8ff050eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 212.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
7d3fec41263da7ac537e472078af06d5bfc066d26db2266bec20affe5909fede
BLAKE2b-256 checksum
How to use checksums
b0518c62d4818663c9a960dcfa3aa67dc193a4c70c2172abab1bb5ca4fcf4a6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 207.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
0fbff7200b0ba6becf5754fb9e4e05118f52ebbb87394fb4711d9cfc1403fd78
BLAKE2b-256 checksum
How to use checksums
4241affbbd62eeab6c534e004f40d4ccbe3cb1609f8c013eec97225b842e4574
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_x86_64.whl
Size 193.2 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
36dc8f7207640dd600efa0fa6c207fe4549d387978c5e5db418185cad56a2c7b
BLAKE2b-256 checksum
How to use checksums
e6032438437c1174bcbe732f8ee3cef8add0621297f71b9aa8a8c9b8a558e38a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_universal2.whl

Download URL copapy-0.0.7.post0-cp314-cp314t-macosx_10_15_universal2.whl
Size 197.5 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
dc904e3fc917f4b8489478a03762cf2ece655d53cf8f15919a9699f8a4e27100
BLAKE2b-256 checksum
How to use checksums
92c872b148fc6a95131d66ce80830ead9d42db3a24737c7c458f4ad23c73dce8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-win_amd64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-win_amd64.whl
Size 198.3 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
8a94fad55e58baa2c69d6b91530a9bfda1c278afe73d664495b8a46e45d3c847
BLAKE2b-256 checksum
How to use checksums
9237f262f422b042aad6bf3495f5a568d5a284e99fbce43e3ffd72700cec85b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 206.2 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
0a6047e7fbf4d3d0b0e0f4cc90c743fc122d609ed0440f6f5434cac74c2c9d07
BLAKE2b-256 checksum
How to use checksums
bf50a3311a3cf241b929c9d4adfc61ebab8486bed77563782456d905971bb110
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_armv7l.whl
Size 205.9 kB
Tags CPython 3.14 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
2adc8a630c468b0c84707d4ea244e1d92762de10ed48a13c10a2ce552dd4cc9e
BLAKE2b-256 checksum
How to use checksums
eaa6d02ceb924a5dd7971652a81a983a209a68ea313924ee7531f91aa18ef46c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 206.3 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
77832b3648a051e35b51ce9a706c2297b410dee40e3e4d445f7cb6960a954fa8
BLAKE2b-256 checksum
How to use checksums
6ed666952cf6029effc9b919c346a9b00296f076d70e6904f9a9b13bcafbb454
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 206.4 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b80b1e3869d3e4a825f683751b85dfaabd9605a7ea1d1fe13fea4f1433d1a127
BLAKE2b-256 checksum
How to use checksums
794f9b316bab3c6d1202e34c7d6016f24434e7d8f5f42c6d9fc729f4a004b058
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 211.8 kB
Tags CPython 3.14 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
160f89660c9bba3e35b2896fb6395b1ae47d9a0b081a9c4d54402b504784d476
BLAKE2b-256 checksum
How to use checksums
0bb845ff7f80995c6fbb21acb8e0f112eb705d6ae34a7091fd37ebdf95332139
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 207.0 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
d1ae8e3f383aa8952a6aff978fa9a83e3e0dca170d17097d19612d9b9f3bb9de
BLAKE2b-256 checksum
How to use checksums
3eacd858b335d8d5749ea78fba8d1289369121f6d4d9dace26d281bbe2195192
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL copapy-0.0.7.post0-cp314-cp314-macosx_10_15_x86_64.whl
Size 193.2 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
cfe8d87c8306036b3ebce81109636697e42ddc5b6a863dd7fce260b1f2995a2c
BLAKE2b-256 checksum
How to use checksums
543976a2df29f44c774005dd69e6bdd1903a514d2a20d7c35466074e7e971b8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp314-cp314-macosx_10_15_universal2.whl

Download URL copapy-0.0.7.post0-cp314-cp314-macosx_10_15_universal2.whl
Size 197.5 kB
Tags CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
55b2fca243faba79039b1ebe9f3093cd0bd0cfc9ecfd5c903ea1a695882c8db9
BLAKE2b-256 checksum
How to use checksums
79a1ae274d2e7676d0630ce330a5141f96209df871acba1b5bec5b74e8d7444b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-win_amd64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-win_amd64.whl
Size 195.6 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
3b5b695c7540bb503a93349904a7262504fda88b48b45566e2366d4fdd9aedcc
BLAKE2b-256 checksum
How to use checksums
27173aa6862aea4a84043a2effe83acb52c91affd1b029ca6721c8c3b6716eca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 206.0 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
ebd80928ee7c82e19610da971e9da4edf4b2de2ef34af36f9e791ff08fa2c3f9
BLAKE2b-256 checksum
How to use checksums
a85b47cd1d6b27f389651162576bf6852d848e97c35cea4c0e84d7f3d660907f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_armv7l.whl
Size 205.8 kB
Tags CPython 3.13 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
85b227129ce3bfdc3a4373b0b2319162be18a0335fb3c2576215a4ed5cef7493
BLAKE2b-256 checksum
How to use checksums
3d67225336c7d4b91ec7caf39c382b2d644c6d5a1b1cba224b54896c925d47dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 206.2 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
a417b74c9e6ef96c9a2e2aafafdba192dbf8a3ed0ec5656040e74e300007f3fb
BLAKE2b-256 checksum
How to use checksums
095f0f56eedf26abfe1b2e25c6f2b1fc2b8fa7a0a19cbdd2e7480b9f51ded380
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 206.3 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
12bb396c56e03dbe12b33e8234aca965934e6fee1db1afb9f546c242a382c5be
BLAKE2b-256 checksum
How to use checksums
e8b6eb26ee9383feab8802f55e067a3db2e31f4c71696b9fe8bc685d35847cc8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 211.7 kB
Tags CPython 3.13 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
aeba9b1e1ab8fe501369aba6c6ee32ed4dec0c9cb034826b800d909f0f182302
BLAKE2b-256 checksum
How to use checksums
fdb6610d6e69f90fb2cbaffa83e88eaffc9514722c457be287ba5329b7960819
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 206.9 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c50d5126bc0492aabc5b17ea104a14a476b8ace9a7d5f9df42098bfb3813aeb7
BLAKE2b-256 checksum
How to use checksums
8cd944950f48c057a9538c3d919f6eef9711fb0160dea123f8254ca10e597836
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL copapy-0.0.7.post0-cp313-cp313-macosx_10_13_x86_64.whl
Size 193.1 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
3270e0cd1db48a0700d03f6be46228c0f9f0d7e0c961bcbd325a954d5875821b
BLAKE2b-256 checksum
How to use checksums
4a71ed6d0c0554a4276742e43c557dea6909735f2a01e1aa4e95a5ebc52ca463
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp313-cp313-macosx_10_13_universal2.whl

Download URL copapy-0.0.7.post0-cp313-cp313-macosx_10_13_universal2.whl
Size 197.5 kB
Tags CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c081369536d15a033216d333248a4f2fd49326811adb3ad7a0799b54cd5c5a25
BLAKE2b-256 checksum
How to use checksums
944ef1194b0f50d44e0b44bf740c6e7c7eb03cf2eb47718e51bdfa68c2025df1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-win_amd64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-win_amd64.whl
Size 195.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e99bf8ed509af13cd8d637f6b96a088168910c41b0a2dd3e1cf1060efde25e63
BLAKE2b-256 checksum
How to use checksums
5a6214d3146515ab7930f181cfc981074a8d9ed8152e7425bb5b00cefebc99e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 206.0 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
b572208c81fe0b6f1c4f92e53a15cb5853d17614db4b196debcdca26b5886ebe
BLAKE2b-256 checksum
How to use checksums
1cb8e968ea9804bd1b1fff08b873d652f3a3f63fd1240f977ff3b0e9f4d27ebd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_armv7l.whl
Size 205.7 kB
Tags CPython 3.12 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
95c0f6ee4f7375aa290a58cab875d0a715141fe0f767b66b5d0f1d910c219b36
BLAKE2b-256 checksum
How to use checksums
86f59071bbd39bbecc61f80bedb70e0741f2ab5cd89eb12a2b82f42e01875058
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 206.1 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
1495104cb58fe059481bc0a4aec4825aed39fba349ec521007bbbe11de5b2aab
BLAKE2b-256 checksum
How to use checksums
af361b3568349154a68e5715052e615d7ca3fb2c83319107d02957d7cba58d02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 206.2 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1b30b63830fdfa3c35dec87e7205b88eb4699cd756a868edd62c80d930ae6839
BLAKE2b-256 checksum
How to use checksums
a88095175addb5b754c75055b2587f0b655b9d00fc1c7b3944652c0e5a8cb804
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 211.9 kB
Tags CPython 3.12 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
52dc258c3259b7f690ca363f9fe5875175b817304eff21dd667ea778615ea797
BLAKE2b-256 checksum
How to use checksums
c1aaf0b50075316097506d4eb551fbb1f8e6f8c8906ef45df71a1a3942c8e5c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 206.8 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
24c5b145b81e26b93007bcbc9b06e8577e2c8eb8de2e74b8353916132fbd9657
BLAKE2b-256 checksum
How to use checksums
a7d67986ffa790c6834cb88e5250464fd9d19d8245c7a03748a02179dab35afc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL copapy-0.0.7.post0-cp312-cp312-macosx_10_13_x86_64.whl
Size 193.1 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
f2975a315d567b8970c1e6424b1b2fae4d26ffd13d2341a1d0cca9958ffdaba0
BLAKE2b-256 checksum
How to use checksums
5b40b64facb66d52349f5d1f80e84c94303cbf827e3a74a7033df71916589079
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp312-cp312-macosx_10_13_universal2.whl

Download URL copapy-0.0.7.post0-cp312-cp312-macosx_10_13_universal2.whl
Size 197.5 kB
Tags CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
9b68416caa4aef891a121b3605bb9377eb7e9e76a152b855ca505533fd42d364
BLAKE2b-256 checksum
How to use checksums
8a740f9e54ed06193ee4acfa66237987937266f2648555fcd4ba4d4bd4354f16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-win_amd64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-win_amd64.whl
Size 195.6 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
f169f5ed93d0484ad6f49a59cb2a3f44c6329a9b7e5e36210f23fc2dc0b9862a
BLAKE2b-256 checksum
How to use checksums
620e7a18d76384255f1f3fa5e6cedb683628f7ad2f3a9fb292766644253dbf2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 206.6 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
683336506d3add17890d57ea085bd12c1ac9ea582875b489a51cfe6b9479cca9
BLAKE2b-256 checksum
How to use checksums
44896ceb2d1b43f93504f063c45c43f766e886b2733debbe374c1fe572310285
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_armv7l.whl
Size 206.4 kB
Tags CPython 3.11 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
a3a7fe40d2385dd6ad0ca37d667b3e73b9a186b03374eb333ef683600d62d295
BLAKE2b-256 checksum
How to use checksums
6f4ef3301fb6c143025d4c2725edcdd1bf484cca214e44e7a03affc3480e233f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-musllinux_1_2_aarch64.whl
Size 206.7 kB
Tags CPython 3.11 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
39d80c7bd8b9da87e064a1edf92a109afeec3d36f2a0aff030ccd89cf62589c0
BLAKE2b-256 checksum
How to use checksums
a2b10222eadb16548333879bef9c8d3ad19cea1d31e59c17605173b1a1eda95b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 206.7 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5511f08c3b3a61a253ca0943fab9dd3a65fccb59cc66a84f80c74dd471b83d9b
BLAKE2b-256 checksum
How to use checksums
208c50b6870b600e992b9c02c61e3308b129b4759007720118bf2c7aafc6de69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 212.4 kB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
76c5909307ec0cc65dd480fb37d9fe397bf775942c6b2ca9324a86e00149f441
BLAKE2b-256 checksum
How to use checksums
6734f468fbe6e5545125c74fb3d1f03331351d3b428bc54e135d4ea4ce21c2f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 207.4 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f387e2a8fe7f43b0a2af2ea5f29f1d8efb18d31e06d59f484678af40f6be6c00
BLAKE2b-256 checksum
How to use checksums
dc4aeea3ab0f4471d4affddf2d26c8151febda4d47948e594a1f2e3a1185e689
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-macosx_10_9_x86_64.whl

Download URL copapy-0.0.7.post0-cp311-cp311-macosx_10_9_x86_64.whl
Size 193.1 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
bc8a88d93522dbc02f40993223200f1e019867e9a899840c36ea109b6a788924
BLAKE2b-256 checksum
How to use checksums
3e78b0d33325a0d21397435ebdbc70e0d5b7eedd115515eaf211e660df6d3271
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp311-cp311-macosx_10_9_universal2.whl

Download URL copapy-0.0.7.post0-cp311-cp311-macosx_10_9_universal2.whl
Size 197.5 kB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
274e2362d814ff6627338d5d296206ab836a047b26f448684092c4ad6d3cac8b
BLAKE2b-256 checksum
How to use checksums
8d75d6671bb23167b5540f4786864cb5f5997407d46c58d90dae03f929d855db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-win_amd64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-win_amd64.whl
Size 195.6 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
3ef9e679cf39a9ba454792044e554907e8b29e3cf99405eb8f680deb07274075
BLAKE2b-256 checksum
How to use checksums
5ab447cc9343b617ed49a497cda327e5af3288cd9e954e9806346f3da3896454
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 205.7 kB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c8f290df867daca2ae23ff5532287ebbaa129c25ed4f58dc668b46674e2cd885
BLAKE2b-256 checksum
How to use checksums
536f29d19915abc76856fff6fd02590b8cd980116a7c7fa0c16fe662ea830d3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_armv7l.whl

Download URL copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_armv7l.whl
Size 205.5 kB
Tags CPython 3.10 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
e677656d29b80a9513843faa1e87e8c1e672fa586b03b70e9276b2e4b2eb66c4
BLAKE2b-256 checksum
How to use checksums
342174fc267a2d208fa4d273d26a3d02c7abaa5244e68adb36b11e4b5ab9e74b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_aarch64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-musllinux_1_2_aarch64.whl
Size 205.9 kB
Tags CPython 3.10 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
377ef77f1f27bf7bb6bfd56db90319eac88d2412ebc9e4eba85953102a65a345
BLAKE2b-256 checksum
How to use checksums
34aac17925a87d270377bd45973dce8b4308ea208f1301087806dc4ea5b30bea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 205.9 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
848882267f265d11c575078f2f659bd04cbba09ab9b9f595809468b5636d036a
BLAKE2b-256 checksum
How to use checksums
e03c051567b2379e2378fb504501674ee562f7545c7b00694dc69ed6e81039a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL copapy-0.0.7.post0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 211.5 kB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
8f49304d229a3f809b56375e1dc2842e032c0b5206cb87524e64ac5ded8ae87f
BLAKE2b-256 checksum
How to use checksums
cd86b24ca8d39913e94d2a21fe3611466733c6830055da3aa3ed69df794e51e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 206.5 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
418167248c23b648ef7749fe9e3c89e43a748ef3c89d9972f1e0459e526c473b
BLAKE2b-256 checksum
How to use checksums
71b186df2838b20fec29afc5c5f725e49966907fb79604601f3821a5fc9c8773
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-macosx_10_9_x86_64.whl

Download URL copapy-0.0.7.post0-cp310-cp310-macosx_10_9_x86_64.whl
Size 193.1 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
56e713d8c03501558f5ca121dd62544ead0c28ff56848a8888a08777d72e5274
BLAKE2b-256 checksum
How to use checksums
37de54b81af489846f64ecb3bdab83e20bfd359c3a450ccce74f180ae4fd160e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / copapy-0.0.7.post0-cp310-cp310-macosx_10_9_universal2.whl

Download URL copapy-0.0.7.post0-cp310-cp310-macosx_10_9_universal2.whl
Size 197.5 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
60fd9f8b5c326bbe5e1d99a4623321bfcaf2719efb6fc12d84e4273ad1e6fde1
BLAKE2b-256 checksum
How to use checksums
fe529cc50c635d24cc38535275333d3b48627d93963f1dd25c6bd157cfc5f4b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page