Skip to main content

Convex-objective path parameterization for robotic trajectory planning.

Project description

COPP Python Bindings

License: MIT Website Docs PyPI Python

Convex-Objective Path Parameterization

This directory contains the Python package for COPP. Install the open-source distribution as copp-py and import the Python package with import copp_py as copp. It wraps the Rust solver core through PyO3 while presenting a NumPy-friendly interface for paths, robot constraints, solver options, and post-processing helpers.

COPP solves optimal path-parameterization problems. A geometric path

$$ q = q(s) $$

is converted into a time law

$$ s = s(t) $$

so the executed trajectory q(s(t)) satisfies velocity, acceleration, jerk, torque, or user-supplied constraints. The second-order solvers optimize the profile

$$ a(s) = \dot{s}^2 $$

and the third-order solvers optimize the pair

$$ a(s) = \dot{s}^2,\qquad b(s) = \ddot{s}. $$

The Python API follows the Rust crate layout: core modeling namespaces live under copp_py.path, copp_py.robot, copp_py.constraints, copp_py.objective, copp_py.interpolation, and copp_py.clarabel, while algorithms live under copp_py.solver.<algorithm>. Examples import copp_py as copp, so user code can use the short copp.Path and copp.solver.* aliases. This README focuses on installing, building, running examples, and using the Python interface. For the full project overview, benchmark tables, citation information, and collaboration contact details, see the COPP GitHub README.

Open-source / PRO note: this README documents the open-source Python package distributed as copp-py and imported as copp_py. COPP PRO provides additional licensed solvers and support options; see the repository-level PRO section or contact hello@copp.pro if those capabilities are relevant to your application.

The Python bindings follow a deliberately small set of rules:

  • install the distribution as copp-py and import the Python module with import copp_py as copp;
  • pass numerical data as NumPy-compatible arrays or ordinary Python sequences;
  • use float64 data for predictable behavior and fewer copies;
  • build paths with copp.Path, constraints with copp.Robot, and solver inputs with solver-specific Problem classes;
  • call algorithms through Rust-like solver modules such as copp.solver.topp2_ra, copp.solver.copp2_socp, and copp.solver.copp3_socp;
  • use copp.interpolation for profile-to-time conversion helpers.

API Availability

Problem class Python API
Core utilities copp.core, root aliases for version, __version__, errors, and common enums
Path copp.path.Path, spline paths, evaluator paths, path derivative evaluation
Robot copp.robot.Robot, station grids, sampled path derivatives, velocity/acceleration/jerk limits, raw constraints, inverse-dynamics callbacks
TOPP2 copp.solver.topp2_ra.solve, copp.solver.reach_set2.backward, copp.solver.reach_set2.bidirectional
COPP2 copp.solver.copp2_socp.solve, copp.solver.copp2_socp.solve_expert
TOPP3 copp.solver.topp3_lp.solve, copp.solver.topp3_lp.solve_expert, copp.solver.topp3_socp.solve, copp.solver.topp3_socp.solve_expert
COPP3 copp.solver.copp3_socp.solve, copp.solver.copp3_socp.solve_expert
Objectives copp.objective.Time, ThermalEnergy, TotalVariationTorque, Linear
Interpolation copp.interpolation.s_to_t_topp2, t_to_s_topp2_uniform, s_to_t_topp3, t_to_s_topp3_uniform, sample-based variants

Runnable examples are in examples. The Sphinx tutorials include those same files with literalinclude, so examples and documentation stay aligned.

Quick Start

Prerequisites

For the published Python package, you need:

  • Python 3.9 or newer;
  • numpy;
  • jax for examples that build differentiable paths with Path.from_jax.

Create and activate any Python environment you prefer before running the commands below. The commands intentionally avoid machine-specific activation scripts, user directories, or environment names.

Install from PyPI

Install COPP with pip:

python -m pip install -U pip
python -m pip install -U copp-py

For examples that use Path.from_jax, install JAX as well:

python -m pip install -U jax

After installation:

python -c "import copp_py as copp; print(copp.version())"

Build and Install from Source

Use the source build path when you are working from a checkout or changing the Rust/Python binding code. You also need Rust, Cargo, a native compiler toolchain suitable for Rust extension modules, and maturin.

Install the local build tools once:

python -m pip install -U maturin numpy jax

Run from the repository root:

cargo build --release --lib --features python
maturin develop --release --features python

The Cargo command makes the Rust/Python feature build explicit. maturin develop then builds and installs the Python extension module into the active Python environment. After the build:

python -c "import copp_py as copp; print(copp.version())"

Run Examples

Run examples from the repository root after installing the package:

python bindings/python/examples/topp2_ra.py
python bindings/python/examples/copp2_socp.py
python bindings/python/examples/topp3_socp.py
python bindings/python/examples/copp3_socp.py
python bindings/python/examples/reach_set2.py

General Workflow

Most Python scripts follow the same shape:

  1. Build a path from waypoints or a Python evaluator object.
  2. Build a station grid s.
  3. Create a copp.Robot.
  4. Append stations and sample path derivatives into the robot.
  5. Add velocity, acceleration, jerk, torque, or raw constraints.
  6. Build a Problem descriptor for the chosen solver family.
  7. Call a solver.
  8. Convert the returned path-domain profile into t(s) or s(t) samples.
  9. Evaluate the original path at s(t) for downstream control or plotting.

For second-order problems, the solver output is usually an a profile sampled on the station grid. For third-order problems, the output is a Profile3rd object with a and b profiles.

Path evaluation helpers return a consistent PathDerivatives object. For position-only evaluation, use the .q field:

out = path.evaluate_q(s)
q = out.q

Higher-order calls fill more fields on the same result type:

out = path.evaluate_up_to_2nd(s)
q = out.q
dq = out.dq
ddq = out.ddq

Minimal Program

import copp_py as copp

print("COPP version:", copp.version())

TOPP2-RA Example

This complete example builds a three-axis path with JAX, lets Path.from_jax provide the path derivatives, adds symmetric velocity and acceleration limits, solves TOPP2-RA, and converts the result into uniform time samples.

import numpy as np
import copp_py as copp


def main() -> None:
    try:
        import jax
        import jax.numpy as jnp
    except ImportError as exc:
        raise SystemExit("Install JAX to run this example: python -m pip install jax") from exc

    jax.config.update("jax_enable_x64", True)

    dim = 3
    n = 1001
    dt = 1.0e-3

    # 1) Define q(s). Path.from_jax differentiates it up to third order.
    def q_fn(s):
        freq = jnp.array([2.0 * jnp.pi, 3.0 * jnp.pi, 5.0 * jnp.pi], dtype=jnp.float64)
        phase = jnp.array([0.0, 0.3, 0.7], dtype=jnp.float64)
        return jnp.sin(freq * s + phase)

    path = copp.Path.from_jax(q_fn, 0.0, 1.0)
    s = np.linspace(0.0, 1.0, n, dtype=np.float64)

    # 2) Build robot constraints, then apply symmetric velocity and acceleration limits in [-1, 1].
    robot = copp.Robot(dim, capacity=n)
    robot.append_s(s)
    robot.set_q_from_path_2nd(path, 0, n)

    upper = np.ones(dim, dtype=np.float64)
    lower = -upper
    robot.add_velocity_limits(upper, lower, start_idx_s=0, length=n)
    robot.add_acceleration_limits(upper, lower, start_idx_s=0, length=n)

    # 3) Solve TOPP2-RA with boundary values a(0) = 0 and a(1) = 0.
    problem = copp.solver.topp2_ra.Problem(
        robot.constraints,
        idx_s_interval=(0, n - 1),
        a_boundary=(0.0, 0.0),
    )
    options = copp.solver.topp2_ra.Options()
    a_profile = copp.solver.topp2_ra.solve(problem, options)

    # 4) Post-process TOPP2-RA results: a(s) -> t(s) -> s(t).
    t_final, t_s = copp.interpolation.s_to_t_topp2(s, a_profile, 0.0)
    s_t = copp.interpolation.t_to_s_topp2_uniform(
        s,
        a_profile,
        t_s,
        dt,
        t0=0.0,
        include_final=True,
    )

    # 5) Print the tutorial summary.
    print("TOPP2-RA done.")
    print(f"dim = {dim}, N = {n}")
    print(f"t_final = {t_final:.6f} s")
    print(f"a_profile.len() = {len(a_profile)}")
    print(f"s(t) samples = {len(s_t)}")


if __name__ == "__main__":
    main()

The same structure extends to COPP2 by replacing the TOPP2 problem with copp.solver.copp2_socp.Problem and an objective list, and to third-order solvers by using set_q_from_path_3rd, jerk constraints, copp.solver.topp3_socp.Problem or copp.solver.copp3_socp.Problem, and the TOPP3 interpolation helpers.

Solver Namespaces

copp.solver.topp2_ra and copp.solver.reach_set2

TOPP2 is the second-order time-optimal family. It optimizes a(s) under first- and second-order constraints. Use copp.solver.topp2_ra.solve for the reachability-analysis solver and copp.solver.reach_set2.backward / bidirectional when you need reachable-set bounds directly.

copp.solver.copp2_socp

COPP2 solves second-order convex-objective problems. Objectives are constructed through copp.objective, for example:

objectives = [
    copp.objective.Time(1.0),
    copp.objective.ThermalEnergy(0.1, np.ones(dim, dtype=np.float64)),
]

Use copp.solver.copp2_socp.solve for the Clarabel SOCP formulation. Use copp.solver.copp2_socp.solve_expert when application code needs solver status and diagnostics instead of only the accepted profile.

copp.solver.topp3_lp and copp.solver.topp3_socp

TOPP3 is the third-order time-optimal family. It uses the (a,b) state and supports jerk-aware constraints. Use copp.solver.topp3_lp.solve for the linear-objective approximation or copp.solver.topp3_socp.solve for the Clarabel conic formulation. A common pattern is to generate an initial a profile with TOPP2-RA, substitute it into the constraints, then solve the third-order problem with LP or SOCP.

copp.solver.copp3_socp

COPP3 combines third-order constraints with convex objectives. Use copp.solver.copp3_socp.solve for the Clarabel SOCP formulation. Third-order solvers return Profile3rd objects that can be post-processed with copp.interpolation.s_to_t_topp3 and copp.interpolation.t_to_s_topp3_uniform.

Data Conventions

Python inputs are accepted as NumPy-compatible array-like values. At the wrapper boundary, arrays are validated and converted into contiguous float64 buffers when needed. To reduce copies in hot loops, pass numpy.ndarray values with dtype=np.float64 and C-contiguous layout unless the function documents another layout.

Path-sampled matrices commonly use sample-major layout, where each row is one station and each column is one axis. The MatrixLayout enum and path helpers document the accepted alternatives.

Path.evaluate_q, Path.evaluate_up_to_2nd, and Path.evaluate_up_to_3rd all return PathDerivatives. evaluate_q fills only out.q; derivative fields are None. This keeps path evaluation calls structurally consistent while making the requested derivative order explicit in the method name.

Boundary values are expressed in path-domain variables:

  • a_boundary=(a_start, a_final) fixes a = ds/dt * ds/dt;
  • b_boundary=(b_start, b_final) fixes b = d2s/dt2 for third-order problems.

Error Handling

Python argument-format errors are reported as standard Python exceptions such as TypeError or ValueError. Errors returned by the Rust core are exposed as copp.CoppError and typed subclasses such as PathError and ConstraintError.

try:
    a_profile = copp.solver.topp2_ra.solve(problem, options)
except copp.CoppError as exc:
    print("COPP failed:", exc)

For Clarabel-based solvers, the simple solver functions return an accepted profile or raise an exception. Expert variants such as copp.solver.copp2_socp.solve_expert and copp.solver.topp3_socp.solve_expert expose solver status, residuals, and other diagnostic fields for applications that need status-aware behavior.

Documentation

The Python documentation is generated with Sphinx from:

bindings/python/docs/source/

Install documentation dependencies:

python -m pip install -U sphinx

Build the HTML documentation from the repository root:

python -m sphinx -E -b html bindings/python/docs/source bindings/python/docs/build/html

Open the generated entry page after the build:

bindings/python/docs/build/html/index.html

The documentation is organized as:

  • Guide: quick start, mathematical concepts, solver selection, tutorials, and how-to pages;
  • Reference: API pages generated from Python modules and PyO3 docstrings.

Guide pages use the same path-parameterization variables as the Rust docs, and tutorial pages include runnable files from bindings/python/examples.

Package Layout

bindings/python/
  README.md
  copp_py/
    __init__.py          # public package facade
    core.py              # shared enums, version, and errors
    path.py              # path constructors and evaluation
    robot.py             # robot sampling and high-level constraints
    constraints.py       # raw constraint buffer namespace
    objective.py         # objective constructors
    interpolation.py     # profile/time conversion helpers
    clarabel.py          # Clarabel options and diagnostics
    solver/              # solver namespaces
      topp2_ra.py
      reach_set2.py
      copp2_socp.py
      topp3_lp.py
      topp3_socp.py
      copp3_socp.py
  docs/
    source/              # Sphinx source
    build/html/          # generated HTML output
  examples/              # runnable Python examples

The native extension module is built as copp_py._native.

Troubleshooting

import copp_py as copp Fails

Install the published package into the active Python environment:

python -m pip install -U copp-py

If you are working from a source checkout, build and install the local extension instead:

cargo build --release --lib --features python
maturin develop --release --features python

Then verify that the same interpreter can import the package:

python -c "import sys, copp_py as copp; print(sys.executable); print(copp.version())"

Sphinx Cannot Import copp_py

Install the package first with python -m pip install -U copp-py, or build the local checkout with cargo build --release --lib --features python followed by maturin develop --release --features python. Then run the Sphinx command using the same Python interpreter.

Native Build Fails

For source builds, check that Rust, Cargo, Python headers, and the platform compiler toolchain are available. On Windows, install a Visual Studio C++ build toolchain compatible with your Python interpreter. On Linux and macOS, ensure that the usual compiler and linker tools are available on PATH.

Array Shape or Type Errors

Convert inputs explicitly before calling into COPP:

values = np.ascontiguousarray(values, dtype=np.float64)

For path samples, verify the intended matrix layout and station count. Most robot-building helpers expect lengths to match the station grid already stored in Robot.

Project details


Download files

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

Source Distribution

copp_py-0.2.2.tar.gz (606.5 kB view details)

Uploaded Source

Built Distributions

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

copp_py-0.2.2-cp314-cp314-win_amd64.whl (891.3 kB view details)

Uploaded CPython 3.14Windows x86-64

copp_py-0.2.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (968.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (890.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

copp_py-0.2.2-cp313-cp313-win_amd64.whl (890.7 kB view details)

Uploaded CPython 3.13Windows x86-64

copp_py-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (968.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (888.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

copp_py-0.2.2-cp312-cp312-win_amd64.whl (891.2 kB view details)

Uploaded CPython 3.12Windows x86-64

copp_py-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (969.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (889.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

copp_py-0.2.2-cp311-cp311-win_amd64.whl (894.9 kB view details)

Uploaded CPython 3.11Windows x86-64

copp_py-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (972.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (893.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

copp_py-0.2.2-cp310-cp310-win_amd64.whl (896.6 kB view details)

Uploaded CPython 3.10Windows x86-64

copp_py-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (975.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (894.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

copp_py-0.2.2-cp310-cp310-macosx_11_0_arm64.whl (985.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

copp_py-0.2.2-cp310-cp310-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

copp_py-0.2.2-cp39-cp39-win_amd64.whl (899.2 kB view details)

Uploaded CPython 3.9Windows x86-64

copp_py-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (977.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

copp_py-0.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (897.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file copp_py-0.2.2.tar.gz.

File metadata

  • Download URL: copp_py-0.2.2.tar.gz
  • Upload date:
  • Size: 606.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2.tar.gz
Algorithm Hash digest
SHA256 bfdfd45a542a089af01d93ec475b0aafd1b3a369d90f7e1b65c720404c3da85f
MD5 1f6e15fc7fab3857096478d0154d2fee
BLAKE2b-256 36a6242b7d8e341942cfd7920585e364c122bc47a6aa0c765e38d6f300a0d69f

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 891.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3eee1f54b8efbe5dd288c7c6709041fef9664840f224bc8b84993730bfad63ae
MD5 9071812bb03eba91ca094cc10aa00dc6
BLAKE2b-256 d09bf21d5bc9decd2e9fd8efb861baaf65f87467038b916d649528102b1fe555

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b9ae1bb87159be1f180adbe8147f718e2dcdba67254ee4e850299e7feb721b3a
MD5 a31ddb1c0aac46d797464501284316e8
BLAKE2b-256 9285ec21e280a4dd6d42aa00bf9907ec452ce0fbc8cc0b69e8e59ac024d62b5b

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1f4c65da78c0d80b90c0a397767d51b8aae9082a1cf6e2ff34489ab2ab09f8d9
MD5 b864629a087448d44754e4d6fe2eccf8
BLAKE2b-256 fc1f5ababd41d9cd503faa704d9b1f5e16807c45162ca12451ccec76d5ee8e94

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 890.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6195effb93e4c5bd266ced48ed65aca2a88035b04ba652346b303b136b160720
MD5 fe8b9956b4f9361a7b031d06ebf96e5c
BLAKE2b-256 8d5b8d23a7e431640c33f9d496f52cf4362bad01f06b0988ff5dc8779b6cde3d

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 004941f08fc7aaef5f5f9d24d10ed7fc2de12911a0677beef7bb184b28f3f7df
MD5 b7a1daf3b5d83bee2a7418e5f874ebfc
BLAKE2b-256 9c9c21001d71046b6656f1918aeb8d609943db1d69690135f814fb4f90c7c9d9

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e390666f0f54acc31a9a913616fb0f94bd3120dbc19a5c3411b0b456bafdea61
MD5 4a2668076d9c326791e7374d327247f8
BLAKE2b-256 6c31afa1ece41db381a230ebceb6f2fc39e9f5eb54efbca762b39baf361b8852

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 891.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5f53c67542e2ebf0406479251c7c7923cafc9cf1afde1c7e3a293a31edc35e6b
MD5 8e9b71c812d7d61382797497a4e80943
BLAKE2b-256 fa3c07e910b2aa51b10e3245da9c7e8c67dcfd302ac13c8b4773c24e97442a89

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4ce1a80a95df959a967201ba591a8590f5db6c251727e0232b6476aa782b4e97
MD5 74972020a94981ea07c7e4cb77acd7e3
BLAKE2b-256 ce0806f79e83a8e0c4b0d67b2cf331b3ec84610b5eef7f1471a9b94fb34127e3

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a79f2c09a459750ee57942bf08b4ce68d564921b37fd4ab43bc8447b8ba9f609
MD5 dd483e485edd0853b80256e5202cb489
BLAKE2b-256 697e1ef11ac1a11d5c0018c9d92689e4542df335c1248bf7c1cbc9d3007a3976

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 894.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 88ff0e9d1b5b3aadb9d15c51f52567b38d61ef4b1df24be43c7e2fde79bd0a4f
MD5 847e6cf2d79284b5b6868ee035ff5dc2
BLAKE2b-256 702774010836f81e3c576ccc78c352072463bd838fc7ed66b7d2d25f23ec1888

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55e4f8188c99fd0d41fb379bb0a1c9bef69cce8a368db1f41f54bfb041029502
MD5 bd79da2476cb8428a790c3d9144c5143
BLAKE2b-256 24cc473b647794385f0472246b28b6336641eedad7c11c239044fd0b30a518ac

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c7e622d3bd9a574a8edb35b2e503a12a0362f03ac108532e425cd4e2894ebb59
MD5 9b09403e08db09e5ab3884eda3068db3
BLAKE2b-256 4011ef002bc3531e177a26a1664f9b41902741bc88b5193966937a29f1028342

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 896.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a77d5fbc6497823630ed2ab27a0cd9b940f298104659f8d290770ea8543bda1d
MD5 e6d0704559b82eea6e7e5ae8152bd562
BLAKE2b-256 4aa6d2fc0f84a32c58f00031186d4f83ebdb65590e08095a50a9d381e5c756ca

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a765de99d86cd95a6b936648e57ae98bcee2c4ee69ec68da777e8e2a9420479e
MD5 aa7954ffff059a2132b04150c2cddb4e
BLAKE2b-256 c3cf72aa36931dd73f81f9013bd9d0c645bdf2e538e21e3746afff38477c88d4

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 989f5efa1741a5e9dc75014031400fc89fb45054f1d62a0a4f8034d1f4f60580
MD5 464ae00d9d61bc6aca4e4b57eba2b679
BLAKE2b-256 2324593a510930da001cc95cbd173568582135c96c7bae4d4302d53294fb6b67

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1255f7b70496a86e3f26d0d0c3fa411d429c76cb88496bfd8d6d08f653e1a3bf
MD5 8afb55e3e09b3a8dd63c8cfbf0119cbf
BLAKE2b-256 0e4c478cc2f8c9515412b0554863d52ea3b52222e1d4a767e8e1170129db5c50

See more details on using hashes here.

Provenance

The following attestation bundles were made for copp_py-0.2.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python-wheels.yml on TOPP-THU/copp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file copp_py-0.2.2-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f648d729b8fc2aa15cdc42f2d4c4227c50fc004a93e7af74f315a4ef19622fb
MD5 cfc9d2d7ebabc350db770ac717b21e57
BLAKE2b-256 d79efb8d5ca9bb6e988aa9ac01384b6b2898ab22aed01c5ed7437c669208c0d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for copp_py-0.2.2-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: python-wheels.yml on TOPP-THU/copp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file copp_py-0.2.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: copp_py-0.2.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 899.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copp_py-0.2.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c8ee0d48b9929142adb3efc187c5148a9f3da4f66dce6c405db863778190e298
MD5 0b2eb143b7d70089a03bb2ff1fcd543f
BLAKE2b-256 6162770f5b0f165e7e06c3cc76b1d399623718b7441d3d5b22bca572fe60d5ed

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dca9171a00310788c6ce2b779504b13d3ccdce7f7e825fda1fe5e611927143d7
MD5 0829543d6040ddf9cd1ca4fddaa9077f
BLAKE2b-256 7c67726ce354187a9a3ea00a2263f3b56e0353a139c598e96cad85c5f4926689

See more details on using hashes here.

File details

Details for the file copp_py-0.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for copp_py-0.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 11eafc014d120acac18259fbc0f5c9c0a4ad7334130eb8be0f145aa259a6708e
MD5 71bad8e0fcf12453e90467f5f62ca678
BLAKE2b-256 09c52ede44ba3bc7224f508db8336ed8869bf34afc898ce43f313dd6e479ab0e

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