Skip to main content

Copy-Patch Compiler

Project description

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, 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 errors[^1]. 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 ones[^3], and porting it to new architectures is straightforward if a C compiler for the target architecture is available[^2]. 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, AArch64 and ARMv7
  • 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. Therefore, this package is currently a proof of concept with limited direct use. However, the computation engine is fully functional and available for testing and experimentation simply by installing the package. The project is now close to being ready for integration into its first demonstration hardware platform.

Currently in development:

  • Array stencils for handling very large arrays and generating SIMD-optimized code - e.g., for machine vision and neural network applications
  • Support for Thumb instructions required by ARM*-M targets (for MCUs)
  • 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 600. 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.

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.

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 are not stripped and do not need to be tail-call-optimizable.

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 the specific program.

The whole 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]: 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.

[^3]: Supported architectures: x86_64, AArch64, ARMv7 (non-Thumb). ARMv6/7-M (Thumb) support is in development. Code for x86 32-bit exists but has unresolved issues and a low priority.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

copapy-0.0.3-cp314-cp314t-win_amd64.whl (141.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

copapy-0.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl (149.8 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

copapy-0.0.3-cp314-cp314t-musllinux_1_2_armv7l.whl (149.9 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl (150.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

copapy-0.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (150.0 kB view details)

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

copapy-0.0.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (155.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (151.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp314-cp314t-macosx_10_15_x86_64.whl (137.9 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

copapy-0.0.3-cp314-cp314t-macosx_10_15_universal2.whl (141.8 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ universal2 (ARM64, x86-64)

copapy-0.0.3-cp314-cp314-win_amd64.whl (141.8 kB view details)

Uploaded CPython 3.14Windows x86-64

copapy-0.0.3-cp314-cp314-musllinux_1_2_x86_64.whl (149.7 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

copapy-0.0.3-cp314-cp314-musllinux_1_2_armv7l.whl (149.8 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp314-cp314-musllinux_1_2_aarch64.whl (150.3 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

copapy-0.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (150.0 kB view details)

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

copapy-0.0.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (155.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (150.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp314-cp314-macosx_10_15_x86_64.whl (137.9 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

copapy-0.0.3-cp314-cp314-macosx_10_15_universal2.whl (141.7 kB view details)

Uploaded CPython 3.14macOS 10.15+ universal2 (ARM64, x86-64)

copapy-0.0.3-cp313-cp313-win_amd64.whl (140.3 kB view details)

Uploaded CPython 3.13Windows x86-64

copapy-0.0.3-cp313-cp313-musllinux_1_2_x86_64.whl (149.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

copapy-0.0.3-cp313-cp313-musllinux_1_2_armv7l.whl (149.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp313-cp313-musllinux_1_2_aarch64.whl (150.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

copapy-0.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (149.8 kB view details)

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

copapy-0.0.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (155.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (150.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp313-cp313-macosx_10_13_x86_64.whl (137.8 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

copapy-0.0.3-cp313-cp313-macosx_10_13_universal2.whl (141.8 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

copapy-0.0.3-cp312-cp312-win_amd64.whl (140.3 kB view details)

Uploaded CPython 3.12Windows x86-64

copapy-0.0.3-cp312-cp312-musllinux_1_2_x86_64.whl (149.5 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

copapy-0.0.3-cp312-cp312-musllinux_1_2_armv7l.whl (149.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp312-cp312-musllinux_1_2_aarch64.whl (150.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

copapy-0.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (149.7 kB view details)

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

copapy-0.0.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (155.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (150.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp312-cp312-macosx_10_13_x86_64.whl (137.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

copapy-0.0.3-cp312-cp312-macosx_10_13_universal2.whl (141.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

copapy-0.0.3-cp311-cp311-win_amd64.whl (140.3 kB view details)

Uploaded CPython 3.11Windows x86-64

copapy-0.0.3-cp311-cp311-musllinux_1_2_x86_64.whl (150.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

copapy-0.0.3-cp311-cp311-musllinux_1_2_armv7l.whl (150.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp311-cp311-musllinux_1_2_aarch64.whl (150.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

copapy-0.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (150.2 kB view details)

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

copapy-0.0.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (156.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (151.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp311-cp311-macosx_10_9_x86_64.whl (137.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

copapy-0.0.3-cp311-cp311-macosx_10_9_universal2.whl (141.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

copapy-0.0.3-cp310-cp310-win_amd64.whl (140.3 kB view details)

Uploaded CPython 3.10Windows x86-64

copapy-0.0.3-cp310-cp310-musllinux_1_2_x86_64.whl (149.2 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

copapy-0.0.3-cp310-cp310-musllinux_1_2_armv7l.whl (149.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARMv7l

copapy-0.0.3-cp310-cp310-musllinux_1_2_aarch64.whl (149.8 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

copapy-0.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (149.4 kB view details)

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

copapy-0.0.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (155.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

copapy-0.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (150.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

copapy-0.0.3-cp310-cp310-macosx_10_9_x86_64.whl (137.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

copapy-0.0.3-cp310-cp310-macosx_10_9_universal2.whl (141.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file copapy-0.0.3-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 141.8 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 e00f353f30790d62f90887be222b9a6a70f7d20cef43acd336fd06b5e6808abc
MD5 c2b9dde13a0dd38b9e37256dd405bb4a
BLAKE2b-256 f327d34f707764c367e7cd3fa6469302f17d59dda819f8c550ab7e1804c744a0

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6549889e12594c7b43b977e7dae1f503cc1708e156a2949f8b39dde561712481
MD5 7c7386a7c59171075ee05eb82bf4dbff
BLAKE2b-256 3adf2510e4c685edad97080b160050ae3ed92ee992aab53fcd7b45995b9f55a0

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 8fff182794c946ebbf9bf18acf5ac76a23b78792ac6efa72cbc9e806488df617
MD5 792cb12ada5c3a700efdb161aa0a34c0
BLAKE2b-256 9ab485f28f72eeed5cea9a006817b923d4b24f2aa21f022739ed43775cd24e02

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 96bae8f0c07d7db2368e84d00adc191095db364ef83dadc2502eab51839460e5
MD5 e5dd12c90641023b8fbf358de7f52f5e
BLAKE2b-256 f143f87a9aa7cb9120afcf278ca660ebe197eebfdfcfa48038187e9555ed2412

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23dfe599328feb8046d6ffd6b84f721e92411ddd615b364d8958cc28ab5178f6
MD5 9e07bd6f36b37acb2d0ae313abb670d6
BLAKE2b-256 2a7696b5f2a3e92b9ce18fedf362fe81ece087e24483d36633f6237cd532bfa4

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 6d4dbea0fd850cc943b964725bfb23864461daa665e5c5c570df8761aa70f7fe
MD5 da152dbda3e5b7fe4551f89ed9b423cf
BLAKE2b-256 bc177e261d1238347f535a721920cd92623828dcbc6d0be7e3e4957f0831f8fc

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e3aec1a66fcac4159c5bb0c695cc639a1df0116386ac9d8d2b14074d0406fede
MD5 b082f212b6a1c1e2c75b40c41c0f8225
BLAKE2b-256 fc80c902e8330b5e7460863cd09885bf20154f7b9392a0bf7d126a0f3a6105ff

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 c18312ae81d1a278b271d46baedbfab8e97d4db17d63f588fb4ce8a897a9971d
MD5 67cbe1931b1c81d86ff78c8a072b64be
BLAKE2b-256 f8a810970a6d3c06eaed22f195fdff8c14519c54574b28fbc722b80debbee6b3

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314t-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 86e881f9ab5c0e67977b01a19c1c9aaeeb92abb8f7fcc908926cf4f59b53fe6d
MD5 3ad43b2f918959ba39e5428f1895a16b
BLAKE2b-256 5f52c77cd0661eb1ab8a4a1179868b54225ec8eca864425be5c4d3e8fb3781be

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 141.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 53f896cc1ee603f4b269145dae01128271dc016c08478719713be4fd4aa87d77
MD5 3edbb8d30349e18841c7838a998ff33f
BLAKE2b-256 137a35b70c38794f3233de5984dec0ca9c1ed918e4664644bae065a018d8954a

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e66c75a4881a4b8a880b4840021344348d88e30554299ad9d53fd55ff97cf1eb
MD5 9183584280eecc48187aabd63fd6e768
BLAKE2b-256 a419ceeae2201e04112c0082777cd2dc98d29305a9b1ddcdda3960c23c4ea737

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 3364bd46f4b4f6264cf9d616d9fd5a310ec48a0916bdf9f65a1d9ce8ca112461
MD5 bf9f629562a438bec1c661ecc767c3b3
BLAKE2b-256 19a92855fc23c3b052c3cca758e5ac7b544f4807e67ddbbce2dadee430dcb70e

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1b057eae0aa019f8e31621d2ecb22236ee6a3fa7a5eee2fd9f2b529115e6a651
MD5 46026bfb95107ddeda27990fa487b62d
BLAKE2b-256 f5d83e75371819aa88d106ff25393beba37249107b87b7200753a7b0622a60cf

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b1e8638f71e1756c0c807f66c590e1ec901ebc1e11a86f2c7d4e3c339d60514
MD5 9521f4ae101915d5679cf9bccb66b026
BLAKE2b-256 58fa27fed0c2e0ce663e83bebec74636f887a4ce1d47f5522a44263251eff8ba

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 68fd3326658b136bdfb725e79b9f14f094507c95ed5232d5af389ab5cf367ffe
MD5 1fc253f4874834c85711c7695783d8e3
BLAKE2b-256 796eb656024820a65664cdb99a7cba47e160040fdc9008f24db5d26856aef179

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b993c170b114c0573695abc08ea09cd37a2029d9de04305b3e6f6869eed4192a
MD5 cd5b22a8491f6a86a36b9eee208f4007
BLAKE2b-256 23ec501308c03b7e0dcd4e824bc54613d286921c65a0e3c923a338871af2a691

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 fb29c2a79f026849c79204ea030d770c65dec65df52b1c3f6614c80d2b274ae5
MD5 7deeedb8b1cd01f8f98077ae63a4592c
BLAKE2b-256 0b92046a7303d87d9fb7a7e6e022df8b3aa62bd3123169dd215ad70c554b24a8

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp314-cp314-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 7ce4439556fc964cfd2b10b2073198ae1192ea2f1f84bb46a2a4370604bcc864
MD5 20b43cdb1cf55ae05b48634b140d7f52
BLAKE2b-256 67c42a229b7e95b16418194459d1f164225bc38e88a64ad4a64d62e5c220a77e

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 140.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 98dcd946064cd268146e470df6421d14e5c69b564e3d33e87b05debb7ad78d6b
MD5 935a5bb6bdae12843fa4fc78c47f5e32
BLAKE2b-256 82cf935fc70a39a78bb4389155f1494b6ebb74ac611cd053d2c6e42ad4677263

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4a186c201d1b28e2f9570a42fe18013354e114e90092382e4b35395fd0805a11
MD5 cdeb158dd461e706fce84b3ea88a2b02
BLAKE2b-256 63eddc7831fe3f70e2b37094854eb5e4e6ba3954cabcdcd3169efc45b90cd9ca

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 f1cbbff8d50c5b5d7f9a5bf5f632e4c61de11fdeb6d04911f69044b9b4c04482
MD5 e6b0e8e9fd1ff2e90f1e75e8d08aa985
BLAKE2b-256 5496edbd3fd7cebe7574e3adec5b4695c873f4f938f881c9986ae67e27037363

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 585411903486cbada0b299a26c5cb3396510835a73085f6cd87aeb731be7df28
MD5 86f023404a03863c7b7ca80c877566fa
BLAKE2b-256 85cc75dc6d84f09095018a6a74c57a93515e234102522ce226d129639f478613

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6aeed6b58aa17f44e224d2b1c44ef635aafc2bcd80e32b79e44c517383d811dc
MD5 2379f9a6f7f84f6113145d8686884bc4
BLAKE2b-256 d0fcf9896b16928cf02fb1d13630f56dc402006f75ea949e8f61030f332c44a0

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 9de38cdb4556dd055075a63f64b3f1a1384a079184d7101d8287ac0332a623d7
MD5 90bd80af0413c7a4fc83084a35eb9c35
BLAKE2b-256 44ca7b2c437075a52fb12f6b28b5a6d457b50fde35e24bff7393e491ff2ea746

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 501a92ea19816010aba251b69c3e49cdbda2a67bf7d84e5618847bc8e95c19fc
MD5 b8125a8fa42facb872b28f7d4f1af6b1
BLAKE2b-256 d7d056f212d6e92cbb34dc1dac84b5783682ee24efc5972397e6baf85abee57e

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7804d7657e0155f4f06115ee6fa05f95acb182b55f2d2c6ec0cf31f31d99c237
MD5 d3325babbb7054d227188628cdf145fe
BLAKE2b-256 a31a1192da77ec9ecb681c4ac7d78ceff21e33b6711571e03a70291056c46d17

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 ccc6463336b2bd1bb01f0b668ea5da64ad42e16c04a030f5c92723d66280f0b0
MD5 e96cba961bc022f72fea8674ceec5fbd
BLAKE2b-256 9b8a2b71165cff4676ecfc3d5314937d8db3ebdbac868b3671f13ce4a6be2311

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 140.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ad2296dc96903b2c9bdd3d499e5fe6b51d25ed20f3272c4bfb6e534439ac7f5c
MD5 e0056208f892ac74ed17719182df760e
BLAKE2b-256 3d16695d3a8c9818a20b9311df4f130eda46b87f31533ebd1e04c274715ec8eb

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 32036bf7af1d12f4a400e46839622ec362f9a21b2fbaa1900af703335d0de5e5
MD5 f9b777e3b114bd67162963fe87907038
BLAKE2b-256 cb3b1c338bf899f07579c4f08f978cb748ee9329f9dd16c5db468e2e0363dd78

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 00cceb5b0157b27739acb4cabe393caa197111683d1dea5a96fa0a9c25c391a5
MD5 150bcad5a87acba2c291ee846078235f
BLAKE2b-256 f1d652def47d2b05af937eb1df92b95cf5a63ed3b3e9cc588784baa3021768a8

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7cb6f43239b6d439a820f178d7b772e2021d2bf74a7ab03eb6828c7a0ce479bf
MD5 fa1ed9ecd7675216219e680eee1988e5
BLAKE2b-256 8b717a8101e38e8669e71084822b63084277244d135ee1cf8253aa0f36acaa2d

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4284f99fd145983fc34179bf8704d36c97b15840b150ae11e482bd14b793ed35
MD5 8c4fdc1e2cc3a08b8527c3dd5af7ab5e
BLAKE2b-256 da81dd9ad6224c7c3e871fa86864b0b9a2dbdab1e50f828e815c4e95803c3abd

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 7817a35686ec3e4f615098c93d662c25720b2946a67021856fe18bdc3a2bcb8b
MD5 893d0318589cc25467a73ee6a5f845da
BLAKE2b-256 7cb6c1c9d2cfea64efb4e2ac3a9f8037d3ed997c86d05295e152c22f6b9e4dca

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8403abfe1b433621e29301509e29256d216f7b6edbc79a6b1337f1bd5fefd3a8
MD5 3fb3d01a65e47de3f415e266588436f3
BLAKE2b-256 bc6c3c559dc0db9c431bc278d7ce41282d31608db853411fb6bf224333290770

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 946fb992fa6f74c6de6294da04cf50af30ce38d92ffc7c7de17e1b59aa1eec0d
MD5 ba58181edb511e0e7affb51dc03621a5
BLAKE2b-256 f2c1eb0ca8b741aa94846481537a77120cdf4205fe378c73199585302f97090e

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 bd2f876231fb562250c429825c666875512eaf6e69a0d90e712c45b345d2d06f
MD5 fba436ac7ecdc3ca229aa2ea5037669e
BLAKE2b-256 71e78301ec861a382ebdcd79e5a4939269b03f9e3ca85133081770e1be3d0690

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 140.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1fa8dd6952f59995501f22841a8a18727f01f957b327960ee447e388e51ba575
MD5 dea30107f9ed3ecda7a855e36ac3b21e
BLAKE2b-256 149f0ac941a1912dc2a138b5d5055a37f47dec12b703365567c746dd68cfc8c9

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2840268291be289bdc7f40883c08d1a1c4c66a5654797d7002d990e550db9ed7
MD5 a17f3ad159e21e9cdbde326ca87fc3c2
BLAKE2b-256 1229fde20716054220384458014d9bb21d403dbf7468185ccfb696e8d82199c6

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 84bb8e793a99141e15158a412cce3cc483a68fbf15d797d94fb6344bc91e33c5
MD5 3e78bd2bb647c80ddee04661fdc13df6
BLAKE2b-256 e6bce6459d0742a234ba06fe9cfa36d85d02d97e641010f5ff2b7638d370800e

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8ca4fc5cfd0b3b3f08c1645097f10f104c4bc47de1ff3e14a75b4f2d6945c32b
MD5 04561c436f931efb4125d3d04fdaadb9
BLAKE2b-256 54233783647d90efd265fd9ad6266585f122c3d704bebc1242469d30984611a1

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5972efba4f0bb1d949198412190b11b899d67ec02060cf39d61384f3f56630e3
MD5 8539e16b972f404266785e426fd0ee53
BLAKE2b-256 9e9ee7333b76991d672217054fb907377fccc262384c78874b0ed9a12ea488c5

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 86875043a51ed15af17576f6d945aa6145fa65ecc0161b8c8a660389f9664cc3
MD5 8b5484959bb8c2d061a8715835b5e682
BLAKE2b-256 36f34ab7225b087bb4ad4d7e9a1d5965de9bcf9769c6caab2729e6d4c801154a

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 68ea64577ef7195607e75cfad2068f1cc5c90a2e2f4e1844dda85e4e65942ac8
MD5 14859dcc8f2920f2e1f20f4ded814d2c
BLAKE2b-256 61986cb1d957717417abc900bdb6717a30bf220b18964ae235571df98181c83b

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f33003c2e8c561c96771927a4d00ea2a6ec71a03a1b89772fc8fbcc667265aca
MD5 c14cc967849f2e540500cc3e16484ddf
BLAKE2b-256 f716e08faba6c8457ae6fca52ae32229d43575aa4419fe16d5b8731f654ac895

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 13b69016a795274fea1e9ce305a49bea20a0ba68154af08e3d80406ce5583b77
MD5 4af71d12c3ddf528283ab4259941fc19
BLAKE2b-256 5f2a35ca09f17806f85a07a1a142f3889e2e7c91fe3372f637c453d51ea7f6e6

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: copapy-0.0.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 140.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for copapy-0.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 da57f206b3d24b30f488c44be7c7badcb35449267ed1a5804224a107eb6325b9
MD5 49a5a538b56253aaf9fe57b326df7ae0
BLAKE2b-256 823e43564e565be09f58d9fd69f896de1625176618ae6f247e848d26bc068af1

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bf3eb927c6672bcf36a1558d8f692ee7d4216a32a0774199b9a919df2c457340
MD5 5583579996e9cf37ef845db70128d032
BLAKE2b-256 25221c5cd19e97ef7034352d0b6e77659e55e4fb5ecb4c2916578bbc8771bd5f

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 d8c5c1a4a685582e66e4c81035ef379fa7d4dead2567b93babc225e9cb1df45b
MD5 4189c2ce4f23a105ab119dd0b32b8dce
BLAKE2b-256 34cc192abbf641dc15bc18a5e819b07f919e9638c4b0e14ffac2b91ba37eca1d

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 213e54f60cdd125f92bd5e10949fc115b24b7cbd6521f274e4c45857987d3373
MD5 f277a1d9ccea66f427e863ad0ff4c354
BLAKE2b-256 a6f44ca18bee8893a4086c434905f575dc9aed423f2899ea6f49af36226a7258

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8cfc2deb438f80d5f656252950cff4d04b4c35481e5c41a8653943ca029e073
MD5 b1bdbef98d2fd424eb2928c1d133551d
BLAKE2b-256 d4f584d23282cb579b477a79c0cbc20a60806c5a2477c6f93393d8cb87c468d5

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 deca7b3f99d128e6b34a4288b3d4de4569bfdbe532b4e55519d52ae38c206d75
MD5 459d66b090fcb9dcae56f0a2f1050db7
BLAKE2b-256 dd5febc5d9c9e8487a48422c60620de3fd20168fa70725877f3078224da737e4

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e45e8b4eb571d51266d25df499888c5b6a83469f0a8908729fc6ac92f8b41b4
MD5 3317bfc44074fbc63a28b6e4ec06bcc8
BLAKE2b-256 528773856bcb356d711aea213e9b5146217b388d6b6cddf64519cdc821e152b0

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ef1fcf868a5313b70f7d62be4046e080fa6e79c36573845a3d0f4f2d7927186
MD5 56c08d8843f9dd76966c5b561729c0b5
BLAKE2b-256 b7a82d9322015168ea78a3ce2458f0d33a29cca7a01af2072969cde56f25c8a5

See more details on using hashes here.

File details

Details for the file copapy-0.0.3-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for copapy-0.0.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5c45692aced2bbc4bef220ed4c9e9d59fb9bbf16c4ace64d5fddeaebc0fefa0f
MD5 f9adb926ef6966de40c55f1f301f8a56
BLAKE2b-256 678b26966bc82a657e40da2facd38a36c84d80f616b170e6a088457b34cfddea

See more details on using hashes here.

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