Skip to main content

Analytical inverse kinematics for 6R and 7R revolute arms. Returns every IK branch at machine precision.

Project description

ssik

PyPI Python License: BSD-3-Clause

Analytical inverse kinematics for 6R and 7R revolute robot arms. Each arm becomes a single self-contained Python module — import franka_panda_ik; franka_panda_ik.solve(T) — that returns every IK branch at machine-precision FK closure.

Install

pip install ssik

Python 3.11+. Wheels for Linux x86_64, macOS arm64, macOS x86_64, Windows x86_64.

Quickstart

from ssik.prebuilt import franka_panda_ik
import numpy as np

T_target = np.eye(4); T_target[:3, 3] = [0.5, 0.1, 0.3]
sols = franka_panda_ik.solve(T_target)      # every analytical IK branch

sols is a list[Solution]. Each Solution carries q (the joint vector), fk_residual (‖FK(q) − T‖), and which polish path fired. Empty list = pose is unreachable.

The artifact model

ssik is built around per-arm artifact modules. Each artifact is a single .py file with the per-arm KinBody constants, the dispatched solver, and any cached symbolic preprocessing already baked in. No URDF parsing, no urchin, no sympy on the runtime import path. A robot stack that imports <arm>_ik.py carries no algorithmic complexity beyond what the build pipeline already resolved.

This is the same idea OpenRAVE's IKFast had — generate per-arm specialised IK code at design time, run pure numeric at deployment — but without IKFast's brittleness on non-Pieper geometries.

There are two artifact paths:

Use a prebuilt arm (ssik.prebuilt)

The wheel ships 8 ready-to-import artifacts:

Module Arm Class
ur5_ik Universal Robots UR5 three-parallel 6R
puma560_ik KUKA Puma 560 Pieper 6R (spherical wrist)
jaco2_ik Kinova JACO 2 non-Pieper 6R
iiwa14_ik KUKA iiwa LBR 14 SRS 7R
gen3_ik Kinova Gen3 7-DOF approximate-SRS 7R
franka_panda_ik Franka Panda anthropomorphic 7R
rizon4_ik Flexiv Rizon 4 non-SRS 7R
kassow_kr810_ik Kassow KR810 non-SRS 7R
from ssik.prebuilt import iiwa14_ik
sols = iiwa14_ik.solve(T_target)

For trajectory tracking and IK-based teleop, the canonical pattern is "give me the IK closest to where the robot is now":

# Robot's current configuration (from joint sensors, last command, etc.).
q_current = np.array([0.0, -0.5, 0.0, 0.7, 0.0, 1.2, 0.0])

# Target pose updates every control tick (VR controller, planner, etc.).
T_target = ...

# max_solutions=1 + q_seed: solver visits lock-samples in nearest-to-seed
# order and short-circuits on the first in-limits branch (~5-6× faster
# than the full sweep on 7R jointlock arms; sub-ms on 6R / SRS arms).
sols = franka_panda_ik.solve(T_target, max_solutions=1, q_seed=q_current)
q_command = sols[0].q if sols else q_current

Build an artifact for your own arm

For any arm not in the prebuilt set, run ssik build once against the URDF:

ssik build my_arm.urdf --base base_link --ee tool0
# → my_arm_ik.py

Build time depends on solver class:

  • <1 s for tier-0 closed-form (UR-class, Pieper, SRS-class 7R)
  • ~30 s for non-Pieper 6R (Raghavan–Roth symbolic derivation)
  • 7–20 min for non-SRS 7R (cached Husty–Pfurner per lock sample)

Ship the emitted .py alongside your robot stack. Once built, use it exactly like a prebuilt:

import my_arm_ik
sols = my_arm_ik.solve(T_target)

Re-run ssik build after pip install -U ssik if you want the latest solver fixes. Old artifacts keep working — they're frozen against the ssik version that built them. ssik build requires the URDF extras: pip install ssik[urdf].

Development path: Manipulator.from_urdf (not for deployment)

For one-off experiments before committing to a build artifact, ssik also exposes the runtime classifier as a Python class:

import ssik
arm = ssik.Manipulator.from_urdf("my_arm.urdf", base="base_link", ee="tool0")
sols = arm.solve(T_target, max_solutions=1, q_seed=q_current)

Every fresh process re-runs URDF parsing, topology classification, and (for non-Pieper sub-chains) first-call sympy preprocessing — so this path is strictly slower than the build-artifact path in production and requires urchin + sympy on the runtime path (pip install ssik[urdf]). Once dispatch is settled, switch to ssik build.

Contributors extending ssik's own test fixtures (vs deploying for their own arm) use ssik add-arm; see CONTRIBUTING.md.

What solve() returns

A list[Solution]. Each Solution has:

  • q — joint-angle vector (length DOF)
  • fk_residual‖FK(q) − T‖_F (Frobenius norm against the original URDF / spec FK)
  • refinement_used"none" or "lm" if Levenberg–Marquardt polish fired

A single 6-DOF target pose admits up to 16 analytical IK branches (8 typical for a Pieper-class arm: 4 shoulder × 2 elbow, with the wrist deterministic). For 7R redundant arms the IK is a 1-parameter family; ssik discretises it into 32–256 branches per pose depending on the swivel-sample count.

By default solve() runs respect_limits=True: out-of-URDF-limit branches are dropped (with a q ± 2π rescue pass first). On 7R jointlock arms the limits filter runs during the lock-sweep so max_solutions=1 short-circuits on the first in-limits candidate rather than wasting samples on branches the postprocess would discard. Pass respect_limits=False for the raw geometric set.

The allow_refinement=True opt-in runs LM polish per algebraic candidate at a few hundred microseconds per branch — useful when an algebraic candidate lands just above fk_atol near a kinematic singularity.

Tuning knobs

TolerancePolicy — six thresholds, one object

solve() accepts an optional policy= kwarg. The default ssik.DEFAULT_TOLERANCE_POLICY works for every shipped fixture; reach for a custom policy when a real arm's URDF has structural near-degeneracies (axes that almost but not exactly meet) or when you want tighter / looser FK closure than the defaults provide.

from ssik import TolerancePolicy, DEFAULT_TOLERANCE_POLICY

policy = TolerancePolicy(
    axis_parallel=1e-8,         # ||a × b||: when two axes are "parallel"
    axis_intersect=1e-8,        # perpendicular distance: when two lines "meet"
    subproblem_feasibility=1e-9,# is_ls boundary inside SP1-SP6
    subproblem_numerical=1e-5,  # FK-closure filter on algebraic candidates
    subproblem_degeneracy=1e-12,# rank-drop threshold; below this, return []
    subproblem_dedup=1e-3,      # angle-space tolerance for collapsing duplicates
)
sols = my_arm_ik.solve(T_target, policy=policy)

The fields are named for why they exist so log messages can say "SP6 sign branch rejected: closure 1.2e-4 > subproblem_numerical 1e-5" instead of citing magic numbers.

ssik.postprocess — composable filters

solve() returns the geometric IK set. For application-specific filtering, four helpers in ssik.postprocess compose into the typical "robot-aware IK" pipeline:

from ssik.postprocess import (
    respect_limits, wrap_to_limits, nearest_to_seed, take_first,
)

sols = my_arm_ik.solve(T_target, respect_limits=False)  # raw geometric set
sols = wrap_to_limits(sols, my_arm_ik._KB)              # try q ± 2π to bring in
sols = respect_limits(sols, my_arm_ik._KB)              # drop anything still outside
sols = nearest_to_seed(sols, q_current)                 # sort by wrap-to-pi distance
sols = take_first(sols, k=4)                            # top-k after ranking

By default solve() already runs wrap_to_limits + respect_limits; the standalone helpers exist for callers who want a different order, a different metric, or to add their own filters (collision-aware filtering, dexterity scoring, custom seed metrics) between the layers.

Out of scope: collision filtering (use FCL or similar at the application layer) and continuous-trajectory smoothness (typically a separate planner concern).

How it compares

Numerical-IK libraries take a seed, run damped least-squares to a single converged configuration, and stop. ssik returns every analytical branch at machine precision. Branch enumeration matters for motion planning (try every branch, pick the one with best clearance), for dexterity analysis (the manipulability ellipsoid is per-branch), and for trajectory continuation across kinematic singularities.

EAIK (Ostermeier 2024) is the canonical Python wrapper around C++ subproblem-decomposition solvers. It's analytical on the kinematic families it recognises and refuses everything else. Numbers below from examples/04_compare_vs_eaik.py over 100 random reachable poses per arm, Apple M3 single-thread, mean ± 95% CI via 1000-resample bootstrap. FK residual is the Frobenius norm ‖FK(q) − T‖ against the original URDF / spec FK.

Arm (class) EAIK ssik
UR5 (Pieper 6R, three-parallel) 5 ± 0 µs / FK 2e-15 / 4 sols 556 ± 12 µs / FK 2e-9 / 4 sols
Puma 560 (Pieper 6R, spherical wrist) 5 ± 1 µs / FK 3e-14 / 8 sols 245 ± 3 µs / FK 2e-14 / 8 sols
JACO 2 (non-Pieper 6R) refuses ("6R-Unknown Kinematic Class") 1.02 ± 0.04 ms / FK 3e-6 / 2 sols
iiwa14 (SRS 7R) refuses ("only 1-6R robots are solvable") 5.10 ± 0.07 ms / FK 4e-13 / 96 sols
Gen3 (approximate-SRS 7R, 12 mm offset) refuses ("only 1-6R") 41.83 ± 1.15 ms / FK 1e-12 / 47 sols
Franka Panda (anthropomorphic 7R) refuses ("only 1-6R") 28.03 ± 2.57 ms / FK 7e-13 / 9 sols
Rizon 4 (non-SRS 7R) refuses ("only 1-6R") 30.88 ± 8.80 ms / FK 4e-9 / 35 sols
Kassow KR810 (non-SRS 7R) refuses ("only 1-6R") 28.06 ± 10.63 ms / FK 7e-8 / 24 sols

EAIK is ~100× faster than ssik on Pieper-class 6R — that is its native sweet spot, and ssik does not try to compete there. The interesting cells are the refuses ones: non-Pieper 6R (JACO 2) and every 7R arm. Those are the geometries ssik exists for. The "refuses (...)" strings are EAIK's actual error messages, captured verbatim by the bench harness. A numerical-IK comparison (MINK) is tracked separately in #236.

Under the hood

The algorithmic ingredients are not novel — Raghavan–Roth (1990), Manocha–Canny (1994), Singh–Kreutz (1989), Husty–Pfurner (2007). What's new is making the textbook pipelines survive on real ill-conditioned arms (AE-3 leftvar selection on JACO 2 drops cond(m_quad) from 3.75 × 10^16 to 127), composing them with a uniform dispatch layer, and packaging the whole thing as a deployable artifact.

Cython hot loops cover the leaf primitives (POE forward kinematics, the Levenberg–Marquardt polish and analytical Jacobian); the rest is pure Python so it stays inspectable.

Bulletproof testing: every solver lands with N-way cross-solver agreement on shared fixtures, FK closure ≤ 1e-10 on every retained IK, 500+ Hypothesis-fuzzed random poses per fixture, and an explicit speed bench that has to clear a regression gate. The current suite has 1300+ tests across 11 fixture arms. Negative-result spikes (a Cython estimate that misses by 2-5×, a codegen-bake on a part that's 0.3% of runtime) are published as closed issues with profile data so the next contributor doesn't repeat the path.

Documentation

Related libraries

ssik does not compete with these on the arms they cover. Pick the right tool for your geometry.

  • EAIK (Ostermeier 2024) — Python wrapper around C++ subproblem-decomposition solvers. Analytical, returns all branches on Pieper-class 6R and canonical SRS 7R (with a manual joint lock). Refuses arms outside its recognised kinematic families. Directly benchmarked in the table above.
  • IK-Geo (Elias–Wen 2022/2025) — the reference C++/Rust implementation of subproblem decomposition. Same coverage profile as EAIK. Has Python bindings (ik-geo on PyPI); currently pins pyo3==0.20.3 so the wheel is incompatible with Python 3.13 — track upstream for an update.
  • IKFast (Diankov 2010, part of OpenRAVE) — the original analytical-IK codegen tool. Symbolic preprocessing in sympy → per-arm C++. Works well on the kinematic families it was tuned for (Pieper-class 6R, spherical-wrist 7R via joint lock); the symbolic pipeline fails on modern sympy for non-Pieper geometries (mpmath.polyroots NoConvergence, Matrix.inv / Matrix.det stalls). LGPL-licensed.
  • MINK (Zakka) — Mujoco-native numerical IK via damped least-squares. Iterative, takes a seed, converges to a single configuration. Handles any kinematic geometry but returns one IK, not all branches, and FK closure is proportional to the convergence tolerance (typically 1e-3 to 1e-6 rather than machine precision).
  • TracIK (Beeson & Ames 2015) — combined SQP / pseudoinverse Jacobian solver; the ROS Industrial default numerical IK. URDF-native. Same one-branch-per-seed semantics as MINK. The maintained Python binding (pytracik) ships a broken arm64 wheel; the ROS-native binding works fine inside ROS.
  • KDL-LMA — OROCOS KDL's Levenberg-Marquardt numerical IK. Older and less robust than TracIK or MINK on the same problem class.

License

BSD-3-Clause. The library incorporates clean-room reimplementations of algorithms from BSD-3-licensed IK-Geo (Elias–Wen 2022/2025) and from the academic publications of Raghavan–Roth (1990), Manocha–Canny (1994), Singh–Kreutz (1989), and Husty–Pfurner (2007). Algorithmic lineage is documented in module docstrings.

Citation

@software{ssik,
  author = {Srinivasa, Siddhartha},
  title  = {ssik: analytical inverse kinematics for 6R and 7R revolute arms},
  url    = {https://github.com/personalrobotics/ssik},
  year   = {2026},
}

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

ssik-1.0.0.tar.gz (680.1 kB view details)

Uploaded Source

Built Distributions

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

ssik-1.0.0-cp313-cp313-win_amd64.whl (845.8 kB view details)

Uploaded CPython 3.13Windows x86-64

ssik-1.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.5 MB view details)

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

ssik-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (857.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ssik-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl (864.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

ssik-1.0.0-cp312-cp312-win_amd64.whl (847.0 kB view details)

Uploaded CPython 3.12Windows x86-64

ssik-1.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.5 MB view details)

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

ssik-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (858.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ssik-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl (864.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

ssik-1.0.0-cp311-cp311-win_amd64.whl (852.3 kB view details)

Uploaded CPython 3.11Windows x86-64

ssik-1.0.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.6 MB view details)

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

ssik-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (859.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

ssik-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (866.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

Details for the file ssik-1.0.0.tar.gz.

File metadata

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

File hashes

Hashes for ssik-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b071b7f12dbe6a579333618e69b29aae3cc557a299aeaaceb6238a421d5e4415
MD5 3342bec5a890d33fe6aff86d1a7085cf
BLAKE2b-256 46810367ec46aa637e21916266a478c1d8177fe16be806aa11d140b9aa9cd69e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0.tar.gz:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 845.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssik-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 30c01a0a2480cf420b878670e283701503ce1bd38ca8994bd498c8608ffcee8d
MD5 8989376c3366c7ce54ee0ce6558395d1
BLAKE2b-256 d4fb81f6ddf86a88673e5a239cabb3010879d339150a27ca2b7fc4364211d9c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 3f08220e41b97508d3c1ca90b2043cc81eefa277385fcd1decb8d04d9d58c970
MD5 a315adbc82cac9a2b343732f09bff1df
BLAKE2b-256 cf23652ee65f04b098191f602e4856eba0d9bffa8ec55a188010f1f2a713812d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 857.4 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssik-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b845b3df3d695467a78574d6eb8b093ebefca7961217a3b6c6e8dd1c4edcb87
MD5 2dfe153b94da24ca92cc3c56378f2d8a
BLAKE2b-256 1ae68e02be46b7e253ee12291a4124b8090c651883e01756cc77e508e24613af

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 51ca0f00f228e60383cf65a7068368fa63909c2c0ad274d8e05a301aec2cd3e9
MD5 64e96e8596b5a26d2c7e464794de8f1e
BLAKE2b-256 82e9664ed6b4de4d616df65e30209d9f5bb02631b8a6e538bbb5016fede7148e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 847.0 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 ssik-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2ed13c8c00020101d84e85949255f8746c21b60f441b2a500b24b397c2cd96b
MD5 eb24554c976649b487558240551cfe56
BLAKE2b-256 b9d1099686e8669afa7c4df7d31d0450b7523fec82e8bc6ab574d63e837adb29

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 34f29c35ce5137fff3bbc9e61ccb164f33bce8c79684bed49781d7bf10a6e80a
MD5 733a6468dff1bc82a21dd43df885d2e9
BLAKE2b-256 0a7cfd325cef9bd5c1a297eb4d084a04f0b9faacd28c734e7b61561f0c191cc3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 858.4 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssik-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76848b2992128f6d9fe4ab249fc6edc62ab3c84f08fd07041b4c424a39d6a927
MD5 673efb988a75e9da41c7f2e7dd68b20f
BLAKE2b-256 e463e98b5f94284f69f7062412f11ab347012a1cd494b69ef4052fba109ad3f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 55003f838c70a46bfafa410c4ebd3eb1d3586ef127a433a0b44d548bc9e147d0
MD5 b9c85d1e630d18b3f8bc25165ceef531
BLAKE2b-256 40efaa749aaa69c02ca974218ace65c0785526a5477e0dc0f5b99d2707b50760

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 852.3 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 ssik-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d4ce9cb4c072609ce0db3b55941c0f1fd824a2e503ad2660c8b0a9be722a84bd
MD5 6a68d2a3aad37822fc81f5eb0362e90f
BLAKE2b-256 1c46cf345edc67c1b418c04307fd8074d7d08309175f4f65570530a655c5e06c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 4445f8e13c5d5a9aa6f2c6ad4e0746a9cd4a0503a29921dbc7c849a08a604d64
MD5 e9669c4d74a551184973488b0f3f49ba
BLAKE2b-256 6131e0fa004b8ad4e1e89f1e2d36aad397f9f69e69012e9259d35ff4389e0cba

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ssik-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 859.6 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ssik-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a43e0918c403684b584b561edf3f3ddbd6d137db303e077bbd97dee5a8ac8535
MD5 9efcad06cebe6a94877bb74c8428b29f
BLAKE2b-256 c66815b71cef6f282732518b024f88897b0408f34bdd753d000c0f8e0f060ae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on personalrobotics/ssik

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

File details

Details for the file ssik-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 87ee4c912985e7e73d878d78dcf0a26c4e333607df5afb6606f401c12beadd99
MD5 bcff23d44779f2ed35eea51fc920977e
BLAKE2b-256 9f2f31de4e75fd8a64c21b1e095756412ab2c9410ef5271ed86c0ce3156fec04

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on personalrobotics/ssik

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