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.1.0.tar.gz (507.5 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.1.0-cp312-cp312-win_amd64.whl (299.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pyrch-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (429.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyrch-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (401.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pyrch-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (236.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyrch-0.1.0-cp311-cp311-win_amd64.whl (296.9 kB view details)

Uploaded CPython 3.11Windows x86-64

pyrch-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (431.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyrch-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (403.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pyrch-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (236.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyrch-0.1.0-cp310-cp310-win_amd64.whl (295.8 kB view details)

Uploaded CPython 3.10Windows x86-64

pyrch-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (430.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyrch-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (403.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pyrch-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (235.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pyrch-0.1.0-cp39-cp39-win_amd64.whl (296.0 kB view details)

Uploaded CPython 3.9Windows x86-64

pyrch-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (430.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pyrch-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (403.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

pyrch-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (235.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pyrch-0.1.0-cp38-cp38-win_amd64.whl (295.8 kB view details)

Uploaded CPython 3.8Windows x86-64

pyrch-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (427.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pyrch-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (401.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pyrch-0.1.0-cp38-cp38-macosx_11_0_arm64.whl (235.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pyrch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ae450f606ac8aadfb70d29f89f62e31e01ec891650fcd75d4a4db9d294e4b3c2
MD5 b83dd8bbe58affb77aa3a97cc423c55b
BLAKE2b-256 e8a5205ac51192b14a1d5f740b6a07185dd013e4267cf874d069bd6db24e8b8b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 299.3 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.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 042a1a06c6f5e4b6cb80460bf881dd511536444b9859edb883d81ef5740630ce
MD5 106e73ae8a59117862b25f4ee3d1cef2
BLAKE2b-256 1a719de08418d7294b2ca037c8fda5c7bda521b3454af895a2799a83cd6a962b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ce818d92ff8f2c0324717c9b89e3eeb702ebdee56a93e84ba97f50dc63fc058
MD5 cfc047d58a4a2ac4b08060b07c6e89aa
BLAKE2b-256 d684fd165bee42bc97b394fe794105f345c0d6e8c9b5c6c1a657361a267f91e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 34db9bab16b9c3c9748fd05ab19150765a32fc3affcdd55b3221d1cd154ba3d0
MD5 f074b6b599f7013f03d82a563e31b6b3
BLAKE2b-256 5e8079eebbe2231f4096bba09607c907c912a0989511cedc7dd848893ed519fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b8c91d4274a53758c8ee707e9fdf3569fe4f5d2ce2ccefb1009f5e22ddeb0e0
MD5 20dc2e4df8d2f7b5870524966285d926
BLAKE2b-256 1ba6e83f10be3f90125a32ff436c6f2bbf729d55dab049594a3adb7d87b2e7bc

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 296.9 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.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9eeb8309f8f06efc02f54179c75904677a298a2a8c8f1119ad5fa468380bf581
MD5 0a17482c7030c101b2642343222e0394
BLAKE2b-256 e90968f0e2f42ec68e1fc57b9cf296d895addf47e4a5dda2a94612982b3cfca5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2d149f204fc25af21f1a64d0511b4fb64e3c3f3931073e4a87c86292999ddbf
MD5 7387dfc846b4aed3024244ccd2cb5695
BLAKE2b-256 38f2da9a72338cc01db3a6db762d15303dacd9e73d160543e7a153017ccc6f7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b29c47688073202e34f706554e1671c287582c6d8958d0126a3458ebe70dd68b
MD5 39747296c7a2d2034a1411b45ed582c6
BLAKE2b-256 50b246ab131373e1a0e578704fdcc12418b20270e4efe9476af3bc7b54852ad8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7308f731aeb885206bc863f0123b8fe7746840592410dc0bb36e20c66c8230bb
MD5 2dc5ad3d0af6b9db46ec85079f3e1e27
BLAKE2b-256 b8de8e0779f793b50b0fa58f18c25fc166ed892d095c9dd2ec3cf47cc4ba60f8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 295.8 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.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4314e3ac51a8260d55a52d654fcbc8253bdca3e7fcc902b85d74a2d808f1c80e
MD5 7d1ceda596447dcaa4d0f94282bc04e2
BLAKE2b-256 92571cef2a52a54a4dd9e664bfec61d5b79230719ce8ca7de53e813ce974de61

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d75fcaa9afff3a72958d11f27d0c6dd202a014ddd21bb97912ff6740e9fb80bd
MD5 98d20b9b61768bd3d5f6224b4a5c3886
BLAKE2b-256 40c7bc03d59cd318e243b3e333fcd47f8a84bc415973bdf3ce812314923c9c99

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9c38bdbb18a03a67aaaf0d42c44c0c3507058b9a035f224d6d4ba8a32edc1023
MD5 e789e9e50b9842ffd9421d9eb11f18ab
BLAKE2b-256 fb96004e075cac69335855ec51f3d5e12d7ce490479147e558e3e43ad532c89d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e9b6a7155db0a7116fda54015ccb37559bedcf63288755cdc9cbc152acfca5b
MD5 f46979ea062d5f2b2dc98a8dad6fa816
BLAKE2b-256 d084dda907d174510805a11e1bfa21c3b7a71601e0b101f5097d6db40e018a99

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 296.0 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.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 34e2e7fddf287d20e6252559f77a38b985d8dc2a075bd95b35654607c5879ce4
MD5 83222dcba8e2488ccfb4528227f4a1a6
BLAKE2b-256 cc3f7146484830f9e303f1243b417e69ce63b3041d4eb7dbc72324b256853614

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91f8372d4cd59e283e22504759707bac6c87cbc1e5d40706893c0f4934d58f52
MD5 1cf5a24014ee5b6642a6760e73ec1e8b
BLAKE2b-256 d46d4356e21ff16575a03cded016e3ae4d8c7ed93155e54c4dfdb95e7430bd9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3fee60d23fa82fa9682ce6892cbd3e03b0e3796256f03d9ec7cf7a47ce8994f6
MD5 3e52a7e3176c3c5509f380b33182b6d9
BLAKE2b-256 c8cff72ba368eccc40f6ec06b588e7885e790110f03b1fd40bfaf1fcffee379f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 235.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.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f100041fe12a0a1f333673fb938cb994d84b74f54517e35fb037b38f29c78d2
MD5 92c0dd718c6d95b3daff7954b0fcdbc2
BLAKE2b-256 6fce10e64cc4d534869fec88cdda7f5acde8a15d628c1f6a7229cd59d5141cc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pyrch-0.1.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 295.8 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.1.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 f30c156e65c12185a4e02814b9c75430724a92fe3e7daef5f46319c0058a950e
MD5 35d07da92d6d24ccf5f607592db61aa9
BLAKE2b-256 2725e2fcd2b6cba25ab4b7fb8eb7dfeeb5d51896244c47b9f4dc875e0fb31737

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 102fbf69091760b5be987bc15f3bb1da986c0dc85dcd4a2ebf4ae82ddf56d802
MD5 e777ccfea13cfe391c012c6353829746
BLAKE2b-256 6917081b6ad876612db1e038b9467cf0bf523286685d61f2914adfbea2faa1e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrch-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 55362b8d304b5e00e91d908cb735c48df3a5f98c7a68fb1fe7ed5b0a128d1373
MD5 f8328a5b2e4b1036980ced9355b242eb
BLAKE2b-256 8b2cdad6b5a485d57afad002a45b6fc8aeccc9656e3ef6fd04b0cb7da4bad8bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrch-0.1.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.1.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pyrch-0.1.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 235.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.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32e429c8dde5011172e7208856b4f665c8ab2e762a7d6b54cc598c6d1d5d673f
MD5 3a1960b384cdcbf19f46d7598445c4e6
BLAKE2b-256 4d3c0e2a6937db666416b33bef78ec9fa02d8103a73b24ee7d05dbfa54528f8d

See more details on using hashes here.

Provenance

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