Skip to main content

RCH: Partial-Expansion Anytime Focal Search solver for heterogeneous multi-agent TSP

Project description

RCH Solver

RCH — a solver for the Heterogeneous Multi-Agent Travelling Salesman Problem (MTSP).

This package wraps the high-performance C++ solver core via pybind11 and makes it available as a regular Python library.


Installation

Prerequisites

  • Python >= 3.8
  • A C++17 compiler (g++ >= 7, clang++ >= 5)
  • CMake >= 3.15
  • pip
  • matplotlib (only needed for visualization helpers)

Install from PyPI

pip install PyRCH

If you also want plotting helpers:

pip install "PyRCH[viz]"

Install from source

cd MTSP-Solver

# Install (builds the C++ extension automatically)
pip install .

# Or, for development (editable install):
pip install -e .

Note: On Ubuntu 24+ managed Python installs, you may need to add --break-system-packages or use a virtual environment.

Release To PyPI

If you are publishing manually from a Linux development machine, upload the sdist only:

python -m build --sdist
twine check dist/*
twine upload dist/pyrch-*.tar.gz

Why not upload the local wheel? A wheel built locally on Linux is typically tagged like linux_x86_64 or linux_aarch64. PyPI rejects those platform tags. Linux wheels uploaded to PyPI should be built as compliant manylinux wheels, which this repository produces through GitHub Actions.

To publish wheels:

  1. Configure PyPI Trusted Publishing for this repository.
  2. Push a version tag such as v1.0.0.
  3. Let .github/workflows/publish-pypi.yml build and upload the wheels plus sdist.

Quick Start

1. Solve a JSON problem file

import rch

result = rch.solve("path/to/problem.json", time_limit=10)

print(result["status"])        # "success" or "failed"
print(result["timeout"])       # True if time-limit was reached
print(result["statistics"])    # {"max_cost": ..., "sum_cost": ..., "solve_time": ..., ...}

for route in result["routes"]:
    print(f"Agent {route['agent_id']}: path={route['path']}, cost={route['cost']}")

# Anytime improvement history
for snapshot in result["anytime"]:
    print(f"  t={snapshot['time']:.3f}s  max_cost={snapshot['max_cost']:.2f}")

2. Solve from a Python dict

import rch

problem_data = {
    "nodes": [
        {"id": 0, "x": 0.0, "y": 0.0, "type": "depot"},
        {"id": 1, "x": 1.0, "y": 2.0, "type": "target"},
        {"id": 2, "x": 3.0, "y": 1.0, "type": "target"},
    ],
    "agents": [
        {"id": 0, "type": "UAV", "start_node": 0, "end_node": 0},
        {"id": 1, "type": "UAV", "start_node": 0, "end_node": 0},
    ],
    "costs": {
        "UAV": [
            [0.0, 2.24, 3.16],
            [2.24, 0.0, 2.24],
            [3.16, 2.24, 0.0],
        ]
    },
    "options": {
        "return_to_end": True,
        "objective": "min_max"
    }
}

result = rch.solve(problem_data, time_limit=5)
print(result)

3. Planner API (recommended)

import rch

planner = rch.Planner()

# Add nodes
planner.add_depot(0, x=0.0, y=0.0)
planner.add_target(1, x=1.0, y=2.0)
planner.add_target(2, x=3.0, y=1.0)

# Add agents
planner.add_agent(agent_id=0, agent_type="UAV", start_node=0, end_node=0, time_limit=6.0)
planner.add_agent(agent_id=1, agent_type="UGV", start_node=0, end_node=0, time_limit=9.0)

# Set cost matrices (one per agent type)
planner.set_cost_matrix("UAV", [
    [0.0, 2.24, 3.16],
    [2.24, 0.0, 2.24],
    [3.16, 2.24, 0.0],
])
planner.set_cost_matrix("UGV", [
    [0.0, 1.80, 4.20],
    [1.80, 0.0, 2.90],
    [4.20, 2.90, 0.0],
])

# Add constraints (optional)
planner.add_assignment(1, ["UAV"])
planner.add_assignment(2, ["UGV"])
planner.add_time_window(1, start=0.0, end=3.0)
planner.add_time_window(2, start=0.0, end=6.0)

# Set solver options
planner.set_options(return_to_end=True, objective="min_max", time_limit=5)

# Visualize the problem map
planner.show_map()

# Solve
result = planner.solve()
print(result["status"])
for route in result["routes"]:
    print(f"  Agent {route['agent_id']}: path={route['path']}, cost={route['cost']:.3f}")

# Visualize the result
planner.show_result(result)

4. Visualization

show_map — view the problem before solving

# Via Planner method:
planner.show_map()

# Or via module-level function:
rch.show_map(planner)

# Draw on an existing axes (e.g. for subplots):
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
rch.show_map(planner, ax=ax, show=False)
plt.savefig("map.png")

Depots are drawn as black stars (★), targets as grey dots, and each agent's start position as a coloured triangle.

show_result — view routes after solving

result = planner.solve()

# Via Planner method:
planner.show_result(result)

# Or via module-level function:
rch.show_result(planner, result)

Each agent's route is drawn with a distinct colour and directional arrows.

return_to_end=False handling: when the solver option return_to_end is False, the solver internally appends the depot as the last node in each route. show_result automatically detects this and removes the trailing depot from the visualization — the route will end at the last target visited, without drawing an edge back to the depot.

5. Low-level programmatic API

from rch import Problem, Solver, Options, ObjectiveType, NodeType
from rch import Node, Agent, AssignmentConstraint, TimeWindowConstraint

# Build a problem instance in code
problem = Problem()

# Add nodes
for nid, (x, y), ntype in [(0, (0, 0), NodeType.DEPOT),
                             (1, (1, 2), NodeType.TARGET),
                             (2, (3, 1), NodeType.TARGET)]:
    n = Node()
    n.id = nid
    n.position.x = x
    n.position.y = y
    n.type = ntype
    problem.add_node(n)

# Add agents
a = Agent()
a.id = 0
a.type = "UAV"
a.start_node = 0
a.end_node = 0
problem.add_agent(a, 0)

a2 = Agent()
a2.id = 1
a2.type = "UAV"
a2.start_node = 0
a2.end_node = 0
problem.add_agent(a2, 1)

# Set cost matrix (one per agent type)
import math
nodes_xy = [(0,0), (1,2), (3,1)]
n = len(nodes_xy)
cost = [[0.0]*n for _ in range(n)]
for i in range(n):
    for j in range(n):
        dx = nodes_xy[i][0] - nodes_xy[j][0]
        dy = nodes_xy[i][1] - nodes_xy[j][1]
        cost[i][j] = math.sqrt(dx*dx + dy*dy)
problem.set_cost_matrix("UAV", cost)

# Configure options
problem.options().objective = ObjectiveType.MinMax
problem.options().return_to_end = True
problem.options().time_limit = 5.0

# Solve
opts = problem.options()
solver = Solver(problem, opts)
ret = solver.solve()
result = solver.get_result()

# Note: this low-level API follows the original C++ convention:
# ret == 1 means success, ret == 0 means failure.
print(f"Return code: {ret}")
print(f"Paths: {result.paths}")
print(f"Costs: {result.times}")

JSON Input Format

{
  "nodes": [
    {"id": 0, "x": 0.0, "y": 0.0, "z": 0.0, "type": "depot"},
    {"id": 1, "x": 1.5, "y": 2.3, "z": 0.0, "type": "target"}
  ],
  "agents": [
    {
      "id": 0,
      "type": "TypeA",
      "start_node": 0,
      "end_node": 0,
      "max_length": 100.0,
      "capacity": 10.0
    }
  ],
  "costs": {
    "TypeA": [[0.0, 1.5], [1.5, 0.0]]
  },
  "constraints": [
    {
      "kind": "assignment",
      "items": [
        {"node": 1, "types": ["TypeA"]}
      ]
    },
    {
      "kind": "timewindow",
      "items": [
        {"node": 1, "start": 0.0, "end": 50.0}
      ]
    }
  ],
  "options": {
    "return_to_end": true,
    "objective": "min_max",
    "time_limit": 60
  }
}

Fields

Field Description
nodes List of nodes. Each has id, x, y, optional z, type ("depot" or "target").
agents List of agents. Each has id, type, start_node, end_node, optional max_length, capacity.
costs Dict mapping agent type name → cost matrix (2D array, row = from node id, col = to node id).
constraints Optional. List of constraint blocks. kind = "assignment" or "timewindow".
options Optional. return_to_end (bool), objective ("min_max" or "min_sum"), time_limit (seconds).

Result Format

{
    "status": "success",       # "success" or "failed"
    "timeout": False,          # True if solver hit time limit
    "routes": [
        {
            "agent_id": 0,
            "path": [0, 2, 0],    # ordered node IDs
            "cost": 6.32          # route cost
        },
        ...
    ],
    "statistics": {
        "solve_time": 0.123,      # wall-clock time (s)
        "max_cost": 6.32,         # maximum route cost
        "sum_cost": 10.56,        # total cost of all routes
        "n_generated": 1500,      # labels generated
        "n_expanded": 800,        # labels expanded
        "last_update_time": 0.08  # time of last solution improvement
    },
    "anytime": [
        {"time": 0.01, "max_cost": 9.5, "sum_cost": 15.2},
        {"time": 0.05, "max_cost": 7.1, "sum_cost": 12.0},
        ...
    ]
}

API Reference

rch.solve(source, *, time_limit=-1) → dict

Solve an MTSP instance.

  • source — file path (str / Path), raw JSON string, or Python dict.
  • time_limit — override the time limit in seconds (default: use the value in JSON).

rch.Planner (recommended)

High-level builder API. All mutating methods return self for chaining.

  • add_depot(node_id, *, x, y, z=0) — add a depot node.
  • add_target(node_id, *, x, y, z=0, demand=0) — add a target node.
  • add_agent(*, agent_id, agent_type, start_node, end_node, order=None, capacity_limit=-1, time_limit=-1) — add an agent. time_limit is the max travel distance/time (≤0 means no limit).
  • set_cost_matrix(agent_type, matrix) — set cost matrix for an agent type.
  • add_assignment(node_id, types) — assign a node to a list of allowed agent types.
  • add_time_window(node_id, start, end) — add a time window constraint for a node.
  • set_options(*, return_to_end=None, objective=None, time_limit=None) — set solver options. objective accepts "min_max" or "min_sum".
  • solve() → dict — run the solver and return a result dict.
  • show_map(**kwargs) → Axes — visualize the problem map (depots, targets, agent starts).
  • show_result(result, **kwargs) → Axes — visualize solved routes on the map.

rch.show_map(planner, *, ax=None, figsize=(8,6), show=True) → Axes

Plot the problem map: depots (★), targets (●), and agent start positions (▲).

rch.show_result(planner, result, *, ax=None, figsize=(8,6), show=True) → Axes

Plot solved routes on the map. Each agent's path is drawn with a distinct colour and directional arrows. When return_to_end=False, the trailing depot is automatically stripped from the visualization.

rch.Problem

Low-level programmatic problem builder. Methods:

  • add_node(node: Node) — add a node.
  • add_agent(agent: Agent, id: int) — add an agent.
  • set_cost_matrix(agent_type: str, matrix: List[List[float]]) — set cost matrix.
  • set_assignment_constraint(c: AssignmentConstraint) — set assignment constraint.
  • set_timewindow_constraint(c: TimeWindowConstraint) — set time window constraint.
  • options() → Options — access/modify solver options.

rch.Solver

Low-level solver. Construct with Solver(problem, options).

  • solve() → int — run the solver (1 = success, 0 = failure).
  • get_result() → Result — get the final result.
  • get_result_process() → List[Tuple[float, Result]] — get full anytime history.

rch.ObjectiveType

Enum: ObjectiveType.MinMax, ObjectiveType.MinSum.

rch.NodeType

Enum: NodeType.DEPOT, NodeType.TARGET.


License

MIT

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

pyrch-0.2.0.tar.gz (487.9 kB view details)

Uploaded Source

Built Distributions

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

pyrch-0.2.0-cp312-cp312-win_amd64.whl (300.2 kB view details)

Uploaded CPython 3.12Windows x86-64

pyrch-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (429.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyrch-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (401.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pyrch-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (237.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyrch-0.2.0-cp311-cp311-win_amd64.whl (297.8 kB view details)

Uploaded CPython 3.11Windows x86-64

pyrch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (431.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyrch-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (404.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pyrch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (237.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyrch-0.2.0-cp310-cp310-win_amd64.whl (296.5 kB view details)

Uploaded CPython 3.10Windows x86-64

pyrch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (430.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyrch-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (403.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pyrch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (236.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pyrch-0.2.0-cp39-cp39-win_amd64.whl (296.8 kB view details)

Uploaded CPython 3.9Windows x86-64

pyrch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (431.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pyrch-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (404.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

pyrch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl (236.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pyrch-0.2.0-cp38-cp38-win_amd64.whl (296.7 kB view details)

Uploaded CPython 3.8Windows x86-64

pyrch-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (427.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pyrch-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (401.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pyrch-0.2.0-cp38-cp38-macosx_11_0_arm64.whl (236.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file pyrch-0.2.0.tar.gz.

File metadata

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

File hashes

Hashes for pyrch-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1f49fad35da0c371b98e50e930e406231efb5be3592f3782a54022ddaca21544
MD5 9a63150fb0220bba91b09e6eee825c21
BLAKE2b-256 359b60655a1b1e6a5605e5d09251665f4afd30c5bdb3556479eaf51afac628d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0.tar.gz:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyrch-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 56b31ee1d8cb838949387ccda88192ccff869b88435987d0b3a1e901c57aa0aa
MD5 b8ff26e337083abcdbdd434a98ac0083
BLAKE2b-256 04627c348f827966ebb34664a7b1e050cb13809a3b39a52d1d9cb8761795aa62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e8f9d0a3fcc3a21183a35300ab194aecbeacd5332b9bc3da4856244a8dac1baa
MD5 b63300ddb45042d57f77de3683a1e6ff
BLAKE2b-256 7be1c7084332ea8282aec883e0110f7a299a396d362c606545a8f83a4fe978bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a83ee3d96591072773d4e46b636ea82b0cdad0607aeab06b04d6cbf100045382
MD5 9fa0743cfd89735fddeca1523bd5112d
BLAKE2b-256 81dcbe036596144253b42a0117bdae616f2ec91c971b8f73b8d5cf0846ab55c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6399492b653ab85ebd1a0f157abc481682d8788dc1e6f57edcd981f088886d60
MD5 193540674f1273c64e761a13a7afcd20
BLAKE2b-256 79dfd5c9fdc92a17491e5772d187d8cb8f7b3ebe230453c40a91005895d66f3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyrch-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b401effc2a677318f7d2d3c8186f33f4c9ea8c29a1f2404aa14ebd8911bdf340
MD5 562ab1c70b555ee20ee59c42e5d2ac38
BLAKE2b-256 54d36df09fb2ae40f38cde02606938f16e4dfcb748c2ccd46a9b2ac767e9bc52

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f733ed6bc279b422cc7461b3d916a69e6c63bf72f133fd3f60f4bb82de41aae
MD5 2d91d511ee9a5c769f43315fdc25b18e
BLAKE2b-256 a43655d5f5c90f291567802e96e1868f6824d8b244803d81a3f813c1ea70f3de

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bceccf928e746431df894f17469ae475c5cfc06c42370251ada9b80fbd63aace
MD5 744d2e067cd1f3020083c58dd0431db3
BLAKE2b-256 1dd157d99cb06e42b3b6b43f11a20f9eab81004802ec44324b2f28f918148154

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1327ff21988b91e8e077c6b2395787b46df797c3bb70040e102d96d18dd697d6
MD5 94578296711031fec0e39ecf7560f706
BLAKE2b-256 8dcfe69083371bbd7b670e73bec53f0f5bb3e8549cae4532cafbff45cfcec4f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyrch-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e4209b508489bf2c4af85c65f147a3555dda4f2153d48b6e2b63ff35223d73da
MD5 7df291d0f7c4e7e8f79ea38323c3b269
BLAKE2b-256 96d7686449475ebfb77f35e4b419e084db3c7fc6786c620870e53cbf02db4b62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp310-cp310-win_amd64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 921257bcf4d53a838edad4c948d59853115383cd866ed08587be7ab4fcb1b874
MD5 1dddd5d2617bc25befe498127666d88c
BLAKE2b-256 972d7df7bafcce759301eb495fb1faa4a74a684625f232b05c039bcbd39834c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e77ee772671173907a3bec3b03b45e471769b2259d402248f42ca49909185601
MD5 579a85f52e229d011551e8d5338597eb
BLAKE2b-256 0301d031931433ac98953eab2ef26c36f6fa2a70dc733693f1e0dc157e34f626

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e692258067a93442eef9a8181f9ad52c5035b0fa630231448e87f8f863b2c04c
MD5 ab5ced862eb7124922966729f33ea54e
BLAKE2b-256 2deb7889b0146b5883f641452ac5abe6d228e978d3742f0a320384a0f6dfc682

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp39-cp39-win_amd64.whl.

File metadata

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

File hashes

Hashes for pyrch-0.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 57236231d1d673371829f4b2a032a27c87e931ed8e6d9ba3be24128c8626de43
MD5 ab1b650d62040e3a2032ac602eb1a048
BLAKE2b-256 8f60e4d1bff76a5b909cf32afbce4b0161b0b84012646ac87104adb34b12ac7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp39-cp39-win_amd64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3d7e42e23a9bf0cf1d56da7eb54b1156831c26702a5ba2de0a4f39ecc3d8c340
MD5 0d46aeeab0808f5d06359dc8a7c6bffa
BLAKE2b-256 1127432ad7b60fb874c1ba60e9a4c626bee96b1a615e5bcd5c1316a308d085d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1fa305d4296884f24b5a69cc37388beac7c63bf402b6fb9a87c5c7ff25c88839
MD5 83ed8d0c28643a67c5f8fc8face4ced7
BLAKE2b-256 b45f7fbe13300952279cea61f1a8ae0fefda27401279b48db705d095c44a4db8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pyrch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 236.2 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 633beddd67f39710d8b51e9c6e08b3be69f044ecf603cf259587ccdaebe33f3d
MD5 6f86b3cc9b620553107e91080bd53395
BLAKE2b-256 fb3bbe3127d2514dbc2a88c12efea0964edc554b3a6dd9b0ba7606365e6d64a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pyrch-0.2.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 296.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrch-0.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e08c9b0b4079badcb0f72f38f19483fbb54fd63ff8fc08eeee5de93a7456bb9f
MD5 56b1adcd784ab4fc4e0a9022a3224536
BLAKE2b-256 309aeead9299c4f3a3a8ec4b045132a9b13c7a8584f6a8d87b01a2afe543e41f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp38-cp38-win_amd64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f125b5b557d25faab580ae4b1813045017bc8e33191b1e0444c1f60703ded211
MD5 be62bdc7961406fb37df43b7cd780c43
BLAKE2b-256 30962643646af608a03c8f0ae16db6bf1a38617c97ee501d814ca49a634dddcd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26f61f27d11075fc5a604acd2be86601265209735f54f878d04a55ada88bbf3f
MD5 6716fcbd478c1a0b7e342f4ff614667b
BLAKE2b-256 16b5574112e70be775dc7a73f1a103bd713c0bc1d2f79efeb05ff420f4a41fc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

File details

Details for the file pyrch-0.2.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pyrch-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 236.0 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrch-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f0d06810ff1508fec886d8126a2db6c1c5f6ba43b00437f44c01dabfe349262
MD5 c3eac1cd4b8e838702094cc68b9666d3
BLAKE2b-256 38d5a274cf9181029746ded67211deadfe3e615b931930b8e37a7f7cd1e38fa1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.2.0-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on rap-lab-org/dev_peaf

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page