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 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. Each was built against a specific URDF (or extracted spec); T_target is the pose of EE_LINK expressed in BASE_LINK:

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

Every prebuilt exposes BASE_LINK, EE_LINK, DOF, and T_HOME (the 4×4 home pose, FK at q = np.zeros(DOF)) as module constants. Use them to verify the baked geometry matches your robot:

from ssik.prebuilt import franka_panda_ik
print(franka_panda_ik.BASE_LINK, "→", franka_panda_ik.EE_LINK, "(", franka_panda_ik.DOF, "DOF)")
# base_link → ee_link ( 7 DOF)
print(franka_panda_ik.T_HOME[:3, 3])
# array([0.088, 0., 0.926])     ← Franka home pose; matches the spec

When a prebuilt is right vs when to ssik build

The 8 prebuilts cover nominal manufacturer geometry with a bare flange. They work when:

  • You're using the same URDF source we built against (ros-industrial, manufacturer reference, etc.)
  • Your robot's calibration matches the nominal kinematic parameters
  • Your end-effector is the flange itself — no gripper, suction cup, or custom tool past it
  • Your URDF link names match what we baked (see the table above)

If any of those is false — and especially if you're a 7R arm with anything attached past the flange — build your own:

pip install ssik[urdf]
ssik build <your.urdf> --base <your_base_link> --ee <your_actual_tool_link>
# → <your_arm>_ik.py

ssik build reads your exact URDF, picks the right solver via the same dispatcher we use, and emits a single-file artifact correct for your kinematic chain. That artifact's import / API / public constants are identical to the prebuilts'.

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.1.tar.gz (684.2 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.1-cp313-cp313-win_amd64.whl (850.6 kB view details)

Uploaded CPython 3.13Windows x86-64

ssik-1.0.1-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.1-cp313-cp313-macosx_11_0_arm64.whl (862.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

ssik-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl (868.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

ssik-1.0.1-cp312-cp312-win_amd64.whl (851.8 kB view details)

Uploaded CPython 3.12Windows x86-64

ssik-1.0.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (1.6 MB view details)

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

ssik-1.0.1-cp312-cp312-macosx_11_0_arm64.whl (863.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

ssik-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl (869.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

ssik-1.0.1-cp311-cp311-win_amd64.whl (857.1 kB view details)

Uploaded CPython 3.11Windows x86-64

ssik-1.0.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (864.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

ssik-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl (871.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: ssik-1.0.1.tar.gz
  • Upload date:
  • Size: 684.2 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.1.tar.gz
Algorithm Hash digest
SHA256 990988e0a3cc7eea4e4f73af4061f7da5bb39173d6febefd53cbc256f8f7b081
MD5 331cbc1622ac2c8e731c5f267c2f9538
BLAKE2b-256 dd7aedeaae9a234c5589e4d663c4cbe60d5fff18eed9f6ff7dead33c68f6f78a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1.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.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ssik-1.0.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 850.6 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 77727474120f5ef3490771a61c516bcfb1d050c477d5c11f93f570b83a582409
MD5 ddf1381b787347906da8e290b08ff58a
BLAKE2b-256 eaddd72b7c89e2a304c55d8e7e212f480e947f8900a7a4aaa662bc7377f10dc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-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.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 4fcb745c28a887f1e4370b51778d332e9ad856ba15a6106c4a6752fa948193d4
MD5 f64ee3633c3404383c9d01044e37281f
BLAKE2b-256 957c356580e59f333ffc057df2e8097c2b988ee9022abdb34934128fb4a55cda

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ssik-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 862.1 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.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b1f84f15f68b590b6ba1eaca34734cd259bdf80086df10b39c43f2ae3b2206b
MD5 65d349847e2e38f0b3dea1cf71db34d2
BLAKE2b-256 128c4c871cac367ae8805345f47f0c6d7e67a0abf10a4bc21343d6d6b004fd79

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3ab74eb52a59436bc59b95dc20450ae50fef294bfb294c3b21715c507943dff3
MD5 8ee5107a9b2ee3bd722375e5c0852add
BLAKE2b-256 877925119fbd6074590109621b3d3a35815522431aeba4170e181dba35d25a47

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ssik-1.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 851.8 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 10601a32c080760dd4042bac4858e05e52aff17aa8ddd74bc7afe57fa9ada070
MD5 464fadbe47339f63d402067de75aae4e
BLAKE2b-256 c9971b41b3fb4979b79a04af0651e7e0b91a01fad97e79349806ee3afffe256a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-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.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 3c63f4105375d6bb7a45e1b828a7c4428e46973468fe442db802762b32ac9ce9
MD5 c916fba7246d6b175133fee36d302786
BLAKE2b-256 6cb2e7d5cbea5b6823c0a96d629b22d848cf828cae025648c28000fda19ec897

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ssik-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 863.1 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.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 262f870e4a6513870ff9b4f85a905bd95b560b1f57465f0bc912e4380645b5d7
MD5 a25de1ce8247746ab250403a3f6559a6
BLAKE2b-256 f15c208be0f7764b18f14af45609184b91e4caec03e131d734f3bddcaa6513b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5a7d385588ee241e11a31361b02debea6a33d22e331037e8e3bd861dde5f0210
MD5 ddf0f404d3b1183c2e2acbe64aef17c0
BLAKE2b-256 c660dd1f9efcf1f22cfceff061816797a5796b9fecf67958d6be4b568a5d19ff

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ssik-1.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 857.1 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 57420672f4e082017389bbd28a7c161966d6a1f61fb4d59652d2f73580c4a63a
MD5 e3a5f074e3438794f81b185f8ad3d53d
BLAKE2b-256 ec2c2b9b7e39b84f93d508c8c5503d43fa8d0b1203b74bf9ca8db2f1a3d5997c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-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.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 3488cd6a1e7cd34640d4038556a504f16dfce6689f6594f5f6eafe28f8450b01
MD5 12e855a2dca5401e8dd812a3b51365a8
BLAKE2b-256 15932c3fc2158b2eca6f0d0ec68b1fc16b2321e4062ea7cb8e9e06b62d89ffa9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ssik-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 864.3 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.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac6bc5a24384923f99d9de06d1fecdb0f2fe5f3ca2481b2eb09a24696a60e51b
MD5 dc6ca1917432eb5df9755091a248ec2c
BLAKE2b-256 e7acaf1ebad291bb4793835bcd0c65c10a5580c1dbf6a28368c58e9f256a839d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for ssik-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 11c7512e4178a67094d554e59b98ce958bae1d83d692ad2f3d56baa60d0eb470
MD5 9e14ea52cb3d0310a3821b797685ad8b
BLAKE2b-256 294a98cb883a38741f4a30e905d175fa5748ca2157362ce40910fbdabbd760ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for ssik-1.0.1-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