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
  • uv
  • matplotlib (only needed for visualization helpers)

Install from PyPI with uv

uv venv
. .venv/bin/activate
uv pip install PyRCH

If you also want plotting helpers:

uv venv
. .venv/bin/activate
uv pip install "PyRCH[viz]"

Install from source

cd MTSP-Solver

# Core package only
uv sync

# Core package + visualization helpers
uv sync --extra viz

# Development environment + visualization helpers
uv sync --group dev --extra viz

This project documents uv as the supported environment workflow for source and development installs.

Quick Start

1. Solve a JSON problem file

Assume your JSON has been saved as problem.json in the current directory.

import pyrch

result = pyrch.solve("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 pyrch

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 = pyrch.solve(problem_data, time_limit=5)
print(result)

3. Planner API (recommended)

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pyrch

planner = pyrch.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(show=False)
plt.close("all")

# 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, show=False)
plt.close("all")

4. Visualization

show_map — view the problem before solving

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pyrch

planner = pyrch.Planner()
planner.add_depot(0, x=0.0, y=0.0)
planner.add_target(1, x=1.0, y=2.0)
planner.add_agent(agent_id=0, agent_type="UAV", start_node=0, end_node=0)
planner.set_cost_matrix("UAV", [
    [0.0, 2.24],
    [2.24, 0.0],
])
planner.set_options(return_to_end=True, objective="min_max", time_limit=1.0)

# Via Planner method:
planner.show_map(show=False)
plt.close("all")

# Or via module-level function:
pyrch.show_map(planner, show=False)
plt.close("all")

# Draw on an existing axes (e.g. for subplots):
fig, ax = plt.subplots()
pyrch.show_map(planner, ax=ax, show=False)
plt.savefig("map.png")
plt.close(fig)

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

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pyrch

planner = pyrch.Planner()
planner.add_depot(0, x=0.0, y=0.0)
planner.add_target(1, x=1.0, y=2.0)
planner.add_agent(agent_id=0, agent_type="UAV", start_node=0, end_node=0)
planner.set_cost_matrix("UAV", [
    [0.0, 2.24],
    [2.24, 0.0],
])
planner.set_options(return_to_end=True, objective="min_max", time_limit=1.0)
result = planner.solve()

# Via Planner method:
planner.show_result(result, show=False)
plt.close("all")

# Or via module-level function:
pyrch.show_result(planner, result, show=False)
plt.close("all")

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 pyrch import Problem, Solver, Options, ObjectiveType, NodeType
from pyrch 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.position.z = 0.0
    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

pyrch.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).
  • If source looks like a file path but the file does not exist, solve() raises FileNotFoundError.

pyrch.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.

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

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

pyrch.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.

pyrch.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.

pyrch.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.

pyrch.ObjectiveType

Enum: ObjectiveType.MinMax, ObjectiveType.MinSum.

pyrch.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.1.tar.gz (487.8 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.1-cp312-cp312-win_amd64.whl (300.2 kB view details)

Uploaded CPython 3.12Windows x86-64

pyrch-0.2.1-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.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (401.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pyrch-0.2.1-cp312-cp312-macosx_11_0_arm64.whl (237.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

pyrch-0.2.1-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.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (237.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

pyrch-0.2.1-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.1-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.1-cp310-cp310-macosx_11_0_arm64.whl (236.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pyrch-0.2.1-cp39-cp39-win_amd64.whl (296.9 kB view details)

Uploaded CPython 3.9Windows x86-64

pyrch-0.2.1-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.1-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.1-cp39-cp39-macosx_11_0_arm64.whl (236.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.8Windows x86-64

pyrch-0.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (427.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pyrch-0.2.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: pyrch-0.2.1.tar.gz
  • Upload date:
  • Size: 487.8 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.1.tar.gz
Algorithm Hash digest
SHA256 e317dabedc9757da1f2cd7a502e673beae530c81f3579e837cbc789c7a2ddc72
MD5 5a6e9b9e7c9a10ff1ecd1766992421e3
BLAKE2b-256 b0828f2be4e9fe776a423b0f497c646a5b7280a5fd53cd04a188ff94dc8b7e8f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3c069ed9e9c349922ae5e48dbc60da8d61f84c9e083dc218c8a045fd49d07878
MD5 b51de060cd0e4452e9cbfe943bae4719
BLAKE2b-256 d31270410d1b40ef73fc19d0d2c49ddd1c76215ca9e4d3ea30b5f9c29f18433e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c5f2b3ca1feb99a588fd292dbe031798f375b9e248f763be7470407e5008894
MD5 3ca69c2ae2f604f2c1444c48296e2961
BLAKE2b-256 b2e301561b86dd3929574027b4f612534141b41bed3be756637937305417b7a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 373b59d6ae2473724bc6ee6627ecf3f1a89bc869f46b4ff31e3b7968b0fccb80
MD5 58a5efce832ac56db55a2153d163a392
BLAKE2b-256 b250813b27ffa8f86db42d1b5051057caa84c7d0e792ee44e80fe9cedbf59804

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2cdaace6d29372c5aa7c1609358cf6f0df6d7fdcd4a181b49a44ef8216aa9ad5
MD5 1f918c385a1e7d24e8d1622c9b3029a2
BLAKE2b-256 0799723805c3b251bc76e459d3146691b10ad5afa56fd35d2b53d43a6ea16dae

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 188414681aeaa3a4e38eb16abcb03728249824b501d2d3f3ea435ae6ac703519
MD5 fcc2258cd7f232c637919a9912bdac1f
BLAKE2b-256 75a83f770cd2750df2b45a28557f03c70e2d3cc3f7c90f9a739d8b6028836505

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bddd24624fbd6ee050b597ba6b398888e6af90a63a8f7ec5b09fd3eefe498fca
MD5 05911760544d8414cbd549bcb3e342d1
BLAKE2b-256 79930419eee3f942803464693f6a0be277314f0676bed9a9757285458847b1df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ed4170f6be4b095819bda38838040c1b3ecea0feeea757eba0d2cf52d80ef7fa
MD5 47f279e49596938e1ba6e19651476f33
BLAKE2b-256 527edb96f55fd3cf6097fa4c7c090540bf9ed745512615e8970232a2e093df53

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3ace7aae6b4db1e5758132ae6275cf4a9ee2c0b257474ebe00dd36a1c139995
MD5 4c8765fb1f26e49100c47ab47ff1dcf6
BLAKE2b-256 e8fe461cf73dd655b3cb1dcaa720288925c9172032937b31267026dc65836b28

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bb383290101e961b8a231faa716ff7dc240e06da8aba03fc93fa850d786ce7f1
MD5 0e48b061a5b9db634bee2587d7e10123
BLAKE2b-256 8ce22bfb5a0d8f1f5bacaba4b766ba5bf830e52a2d7d34152117921110bfc8de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4a3ab1e2aa870f65390c7e8e575eabe2d0111211a353d2d029f88c3f09f453b6
MD5 f16cb2599370dc439af90a78792b9808
BLAKE2b-256 600b67d72210cde2219a4e76d2245ba853d7878a1882361b57965fcebf585098

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f75abd10fd1c26d122051e7047d03a07566b0ec7ff09507e5a38b333b0a47701
MD5 2ce1df2ee6e91e16b6e57c5ad3fc4b7b
BLAKE2b-256 2cfe88d0eece7ee631ca43930f82822906ba33d542625cc0b7acced64e27f3c7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f271cffa15a7e0b422a08a54f004c548944e173e4c46c8c7c5da72d41a84ffeb
MD5 4b9144edba18e05781e79f7d6b9e0d9e
BLAKE2b-256 8946b7cb7c70c4c1a44c075dfc305925be935a0de7ff18dd98b520ada2ab315c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 296.9 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 285f06ae45ec97aa72b56f340e9aecdc8f4a686a75790fe67d4e845c41fb6730
MD5 232727d48c378372f674668514329b5d
BLAKE2b-256 e7aa0d019584fa36860600fa29dc20b8182accc163cfe2a987135bf5f64d53e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3d5a628f978ae21a69a3413d6a03c35975414d4f726086a7a0a41e21d25da19
MD5 3f3ccfad73b855ae6f6a1d15cd1de182
BLAKE2b-256 ddb26735a5f1cf343c0e79b179d81a9b1c87f938b8a600225e573192e7bf3504

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fdc39202a5752b5d9ad1accb3dfd866a397b1a370d33402d6d125be078c6a50d
MD5 667fa9c499473d1efc6951db2fc26e56
BLAKE2b-256 fb8ce9ee477be2120dc5e419adde84c3519eb8e65d551a247899d870f79979b9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 236.3 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.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d675546f5d2e980e4702b93add72c0f9209158855b2bfce7b7f8c14853317843
MD5 b7367f9bc2f4a802996949fc016c9a6c
BLAKE2b-256 5192af7679698fef4d63d21172f49d9de09c42b47d7f754b5bda23f9529c3d9c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e98a127578ca4c228efd464da7354ced6274cedef671169a2c43de44ffe0bf54
MD5 f95694511e9901f6c061ce95f21dca13
BLAKE2b-256 8c436abf683f2634e8790cc42344b95a73bcb42069411d27ced6798a0559786e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 273b7c85256a8b9d1f6932c7345d40f075ecc14bb565777a88f672c05bab8f15
MD5 025af23d0168255adcd9415389c194a2
BLAKE2b-256 75a9b4ef0ea60d1028dedcb5df333c83c4edcd132f34ce3a191341475d32231e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrch-0.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d1251d894e4e4f94b8c9c9081b9a85ea8624b3f257a92f2fe49707870b31b5cc
MD5 15e1a3e257182f346b2cc4d7e9c24dc3
BLAKE2b-256 9a9df364d5401081b04578d084e6cc34908882afc53c5f2d6570edea2524c7b9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pyrch-0.2.1-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.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b3d6a5a6a5b6eb7ad1c27f1da135ed88b61a9d085c4c8f1cc221b67e34f624b
MD5 2e6ece737f526e90b9d87191f42e54c0
BLAKE2b-256 958b2f7655433578e0e29d7a8443fa2299680132644519fcf5961c27db911675

See more details on using hashes here.

Provenance

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