Skip to main content

Spline trajectory optimization — fast C++ bindings for Cubic/Quintic/Septic MINCO splines

Project description

spline-trajectory

Python bindings for SplineTrajectory — a fast C++ library for smooth N-dimensional trajectory optimization based on MINCO-family splines (Cubic / Quintic / Septic).

[Python Docs] | C++ Library | 中文

Installation

pip install spline-trajectory                    # basic (numpy only)
pip install "spline-trajectory[optimize]"        # with scipy for optimize()

Requires Python ≥ 3.9. Pre-built wheels are provided for Linux, macOS, and Windows (x86-64 and arm64).


Spline types

Class Order Minimizes MINCO equiv
CubicSplineND 3 Acceleration S2
QuinticSplineND 5 Jerk S3
SepticSplineND 7 Snap S4

All three families are available for spatial dimensions 1–6.
Default aliases (CubicSpline, QuinticSpline, SepticSpline) point to the 3D variants.


Quick Start

import numpy as np
from spline_trajectory import CubicSpline3D, BoundaryConditions3D, Deriv

waypoints = np.array([[0, 0, 0],
                      [1, 0, 0],
                      [2, 1, 0]], dtype=float)

bc = BoundaryConditions3D(
    start_velocity=[0.5, 0, 0],
    end_velocity=[0, -0.5, 0],
)

spline = CubicSpline3D([0.0, 1.0, 2.0], waypoints, bc)

print(spline.evaluate(1.0, Deriv.Pos))   # position at t=1  → shape (3,)
print(spline.evaluate(1.0, Deriv.Vel))   # velocity at t=1

# Batch evaluation → shape (N, 3)
ts = np.linspace(0, 2, 200)
positions = spline.evaluate_batch(ts.tolist(), Deriv.Pos)

Trajectory Optimization

1. Optimize time segments, fix all waypoints

The simplest use case: waypoints are hard constraints, only the duration of each segment is optimized to minimize total time + jerk energy.

import numpy as np
from spline_trajectory import (
    QuinticOptimizer3D, BoundaryConditions3D,
    OptimizationMask, Deriv, optimize,
)

waypoints = np.array([[0, 0, 0],
                      [2, 1, 1],
                      [4, 0, 2],
                      [6, 2, 0]], dtype=float)
n_seg = len(waypoints) - 1

# Fix all waypoints, free all time segments
mask = OptimizationMask()
mask.waypoints = [0] * len(waypoints)   # 0 = fixed
mask.time      = [1] * n_seg            # 1 = optimize

opt = QuinticOptimizer3D()
opt.set_config(rho_energy=1.0)          # weight for jerk-energy regularization
ctx = opt.prepare_context(
    time_segments=[1.0] * n_seg,
    waypoints=waypoints,
    bc=BoundaryConditions3D(),
    mask=mask,
)

def time_cost(times):
    """Minimise total duration."""
    return float(np.sum(times)), np.ones_like(times)

result = optimize(opt, ctx, time_cost=time_cost, max_iter=300)
print(result.message)

spline = opt.get_working_spline(ctx)
print(f"Optimized duration: {spline.duration:.3f} s")

2. Optimize waypoints, fix time segments

Let the optimizer relocate intermediate waypoints while keeping durations fixed. Useful when the rough path shape matters more than timing.

import numpy as np
from spline_trajectory import (
    QuinticOptimizer3D, BoundaryConditions3D,
    OptimizationMask, optimize,
)

waypoints = np.array([[0, 0, 0],
                      [1, 1, 0],   # ← will be optimized
                      [3, 0, 0],   # ← will be optimized
                      [4, 0, 0]], dtype=float)
n_seg = len(waypoints) - 1

mask = OptimizationMask()
mask.waypoints = [0, 1, 1, 0]   # fix start/end, free middle points
mask.time      = [0] * n_seg    # fix all durations

opt = QuinticOptimizer3D()
opt.set_config(rho_energy=1.0)
ctx = opt.prepare_context(
    time_segments=[1.0] * n_seg,
    waypoints=waypoints,
    bc=BoundaryConditions3D(),
    mask=mask,
)

# Energy-only cost (no custom time/integral cost needed)
def zero_time(t): return 0.0, np.zeros_like(t)
def zero_integral(t, tg, seg, step, p, v, a, j, s):
    z = np.zeros_like(p); return 0.0, z, z, z, z, z, 0.0

result = optimize(opt, ctx, time_cost=zero_time, integral_cost=zero_integral)
spline = opt.get_working_spline(ctx)

3. Optimize both time segments and waypoints

Free everything — let the optimizer jointly tune timing and path shape.

import numpy as np
from spline_trajectory import (
    QuinticOptimizer3D, BoundaryConditions3D,
    OptimizationMask, optimize,
)

waypoints = np.array([[0, 0, 0],
                      [1, 2, 0],
                      [3, 1, 1],
                      [5, 0, 0]], dtype=float)
n_seg = len(waypoints) - 1

mask = OptimizationMask()
mask.waypoints = [0, 1, 1, 0]   # fix only start/end positions
mask.time      = [1] * n_seg    # all durations free

opt = QuinticOptimizer3D()
opt.set_config(rho_energy=1.0)
ctx = opt.prepare_context(
    time_segments=[1.0] * n_seg,
    waypoints=waypoints,
    bc=BoundaryConditions3D(),
    mask=mask,
)

def time_cost(times):
    return float(np.sum(times)), np.ones_like(times)

result = optimize(opt, ctx, time_cost=time_cost)
spline = opt.get_working_spline(ctx)
print(f"Duration: {spline.duration:.3f} s,  Energy: {spline.energy:.4f}")

4. Custom integral cost (e.g. penalise high velocity)

integral_cost is called at every integration sample along the trajectory.
It receives the local state (p, v, a, j, s) and must return the cost and its gradients w.r.t. each quantity.

import numpy as np
from spline_trajectory import QuinticOptimizer3D, BoundaryConditions3D, optimize

waypoints = np.array([[0, 0, 0], [2, 1, 0], [4, 0, 0]], dtype=float)

opt = QuinticOptimizer3D()
opt.set_config(rho_energy=0.5, integral_num_steps=64)
ctx = opt.prepare_context(
    time_segments=[1.0, 1.0],
    waypoints=waypoints,
    bc=BoundaryConditions3D(),
)

V_MAX = 2.0   # m/s — soft speed limit

def vel_penalty(t, t_global, seg, step, p, v, a, j, s):
    """Soft penalty for |v| > V_MAX."""
    excess = np.maximum(np.linalg.norm(v) - V_MAX, 0.0)
    cost = 0.5 * excess ** 2
    gv = excess * v / (np.linalg.norm(v) + 1e-9) if excess > 0 else np.zeros_like(v)
    z = np.zeros_like(p)
    return cost, z, gv, z, z, z, 0.0

def zero_time(t): return 0.0, np.zeros_like(t)

result = optimize(opt, ctx, time_cost=zero_time, integral_cost=vel_penalty)
spline = opt.get_working_spline(ctx)

5. Closed-loop trajectory (drone racing / periodic motion)

optimize_closed_loop closes the position loop and jointly optimizes the boundary derivatives (velocity, acceleration) so that the trajectory is C² continuous at the junction — the drone can lap indefinitely.

import numpy as np
from spline_trajectory import QuinticOptimizer3D, optimize_closed_loop, Deriv

# Gates arranged roughly in a circle
gates = np.array([
    [7.0, 3.5, 1.5],
    [6.0, 7.0, 1.2],
    [2.0, 7.0, 0.8],
    [0.0, 4.5, 1.0],
    [2.5, 1.0, 1.8],
    [5.0, 1.0, 1.2],
], dtype=float)

time_segs = [1.2] * len(gates)   # one segment per gate (loop is closed automatically)

opt = QuinticOptimizer3D()
result, ctx = optimize_closed_loop(
    opt,
    waypoints=gates,
    time_segments=time_segs,
    closure_weight=5000.0,  # penalty weight for BC continuity at junction
    rho_energy=0.5,
    max_iter=500,
)
print(result.message)

spline = opt.get_working_spline(ctx)

# Verify continuity at the junction
t0, tf = spline.start_time, spline.end_time
dv = np.linalg.norm(spline.evaluate(tf, Deriv.Vel) - spline.evaluate(t0, Deriv.Vel))
da = np.linalg.norm(spline.evaluate(tf, Deriv.Acc) - spline.evaluate(t0, Deriv.Acc))
print(f"Duration: {spline.duration:.2f} s")
print(f"BC closure  ‖Δv‖ = {dv:.2e},  ‖Δa‖ = {da:.2e}")   # should be ~1e-4 or less

# Sample the full lap
ts = np.linspace(t0, tf, 500)
pos = spline.evaluate_batch(ts.tolist(), Deriv.Pos)   # shape (500, 3)
vel = spline.evaluate_batch(ts.tolist(), Deriv.Vel)

6. Soft constraints via integral_cost

Every call to optimize() or optimize_closed_loop() accepts an integral_cost function that is evaluated at every integration sample. Return a scalar penalty and its gradients w.r.t. (p, v, a, j, s) and local time t to impose soft constraints.

General pattern

def my_constraint(t, t_global, seg, step, p, v, a, j, s):
    # Compute penalty and gradients
    cost = ...
    gp = np.zeros_like(p)   # ∂cost/∂p
    gv = np.zeros_like(v)   # ∂cost/∂v
    ga = np.zeros_like(a)   # ∂cost/∂a
    gj = np.zeros_like(j)   # ∂cost/∂j
    gs = np.zeros_like(s)   # ∂cost/∂s
    gt = 0.0                 # ∂cost/∂t (non-zero only when optimising time)
    return cost, gp, gv, ga, gj, gs, gt

Quadrotor: thrust + body-rate constraints (demo_quadrotor.py)

Uses SepticOptimizer3D (7th-order, S4-MINCO) so that jerk is a boundary-condition variable. Setting start_jerk = end_jerk = [0,0,0] hard-constrains body rate to zero at take-off and landing (hover condition).

Under the differential-flatness model (zero drag, yaw=0, mass=1 kg):

Physical quantity Expression
Thrust vector f_vec = a + g·ẑ
Collective thrust f = ‖f_vec‖
Body-axis unit vector z_b = f_vec / f
Body-rate vector ω — exact flatness map (Zhepei Wang, GCOPTER)

The integral_cost function implements the exact forward/backward pass of the flatness map so that gradients w.r.t. (a, j) are analytically correct.

Comparison — before (fixed 0.8 s/segment) vs. after (time optimized):

Quadrotor trajectory with thrust & body-rate constraints

Row 1 (grey dashed): trajectory executed in 3.2 s — 537/600 thrust violations, ω_max = 29.4 rad/s.
Row 2 (red solid): optimizer extends to 9.5 s — f ∈ [6.5, 14.2] m/s², ω_max = 0.92 rad/s — all constraints satisfied.

See examples/python/demo_quadrotor.py for the full implementation including the FlatnessMap forward/backward class.

Common constraint recipes

Constraint Cost term Non-zero gradient
Speed limit ‖v‖ ≤ v_max max(‖v‖−v_max, 0)² gv
Acceleration limit ‖a‖ ≤ a_max max(‖a‖−a_max, 0)² ga
Collective thrust bounds max(F_MIN−f,0)² + max(f−F_MAX,0)² ga
Body-rate limit max(ω−ω_max, 0)² ga, gj
Spherical keep-out zone (centre c, radius r) max(r−‖p−c‖, 0)² gp
Min altitude p_z ≥ h max(h−p_z, 0)² gp

Tip — penalty weight tuning:
Start with a small weight (e.g. 10) to let the optimizer find a feasible region first, then increase toward 100–1000 until the constraint is well-satisfied. Check integral_num_steps (default 64) — increase to 128 for stricter enforcement.


API Reference

Spline classes

All spline classes share the same interface.

CubicSpline3D(time_points, waypoints, bc=BoundaryConditions3D())
QuinticSpline3D(time_points, waypoints, bc=BoundaryConditions3D())
SepticSpline3D(time_points, waypoints, bc=BoundaryConditions3D())
# also: *1D, *2D, *4D, *5D, *6D variants
Parameter Type Description
time_points list[float] Absolute time at each waypoint, length N
waypoints ndarray (N, DIM) Waypoint positions
bc BoundaryConditionsND Boundary conditions (default: all zero)

Properties: start_time, end_time, duration, num_segments, energy, is_initialized

Methods:

spline.evaluate(t, deriv=Deriv.Pos)              # → ndarray (DIM,)
spline.evaluate_batch(times, deriv=Deriv.Pos)    # → ndarray (N, DIM)

Deriv values: Pos, Vel, Acc, Jerk, Snap, Crackle, Pop


BoundaryConditions

bc = BoundaryConditions3D()                             # all zero
bc = BoundaryConditions3D(start_velocity, end_velocity)
bc = BoundaryConditions3D(start_velocity, start_acceleration,
                          end_velocity,   end_acceleration)
bc = BoundaryConditions3D(start_velocity, start_acceleration, start_jerk,
                          end_velocity,   end_acceleration,   end_jerk)

All vector arguments accept list, tuple, or ndarray of shape (DIM,).
Properties: start_velocity, start_acceleration, start_jerk, end_velocity, end_acceleration, end_jerk


Optimizers

opt = QuinticOptimizer3D()           # also Cubic*, Septic*, *1D–*6D
opt.set_config(
    rho_energy=1.0,                  # weight for built-in energy regularization
    integral_num_steps=64,           # trapezoidal integration steps per segment
)
ctx = opt.prepare_context(
    time_segments,                   # list[float], length N_seg
    waypoints,                       # ndarray (N_seg+1, DIM)
    bc=BoundaryConditions3D(),
    mask=None,                       # OptimizationMask or None (optimize everything)
)
x0  = opt.generate_initial_guess(ctx)          # → ndarray (D,)
cost, grad = opt.evaluate(ctx, x, time_cost, integral_cost)
spline = opt.get_working_spline(ctx)           # → QuinticSpline3D (copy)

OptimizationMask

Controls which variables are free vs. fixed.

mask = OptimizationMask()
mask.time      = [1, 0, 1]   # per-segment: 1=optimize, 0=fix
mask.waypoints = [0, 1, 1, 0] # per-waypoint: 0=fix, 1=optimize
mask.start.v = True           # optimize start velocity BC
mask.start.a = True           # optimize start acceleration BC
mask.end.v   = True
mask.end.a   = True

optimize()

from spline_trajectory import optimize

result = optimize(
    optimizer, ctx,
    time_cost=None,       # callable(times) → (float, ndarray)  or None
    integral_cost=None,   # callable(t, t_global, seg, step, p,v,a,j,s)
                          #         → (cost, gp, gv, ga, gj, gs, gt)  or None
    max_iter=200,
    ftol=1e-9,
    gtol=1e-6,
)
# result is scipy.optimize.OptimizeResult

time_cost signature:

def time_cost(times: np.ndarray) -> tuple[float, np.ndarray]:
    # times: shape (N_seg,) — decoded segment durations
    # returns: scalar cost, gradient of shape (N_seg,)
    return float(np.sum(times)), np.ones_like(times)

integral_cost signature:

def integral_cost(t, t_global, seg, step, p, v, a, j, s):
    # t        : local time within segment
    # t_global : global time
    # seg      : segment index
    # step     : integration step index
    # p,v,a,j,s: ndarray (DIM,) — pos, vel, acc, jerk, snap
    # returns  : (cost, gp, gv, ga, gj, gs, gt)
    z = np.zeros_like(p)
    return 0.0, z, z, z, z, z, 0.0

optimize_closed_loop()

from spline_trajectory import optimize_closed_loop

result, ctx = optimize_closed_loop(
    optimizer,
    waypoints,            # ndarray (N, DIM) — last row is overwritten with first
    time_segments,        # list[float], length N (one per gate)
    closure_weight=5000.0,  # penalty weight for BC continuity at junction
    rho_energy=0.5,
    integral_num_steps=64,
    optimize_times=True,
    time_cost=None,
    integral_cost=None,
    max_iter=300,
)
spline = optimizer.get_working_spline(ctx)

The function:

  1. Closes the position loop (waypoints[-1] ← waypoints[0])
  2. Frees start/end boundary derivatives as decision variables
  3. Adds closure_weight * ‖start_BC − end_BC‖² to the objective

A closure_weight of 1000–10000 typically achieves ‖Δv‖ < 1e-4.


Supported dimensions

Suffix DIM
1D 1
2D 2
3D 3 (default alias)
4D 4
5D 5
6D 6 (e.g. 6-DOF robot joints)
from spline_trajectory import (
    QuinticSpline6D, BoundaryConditions6D,
    QuinticOptimizer6D,
)

C++ Library

For the header-only C++ library, performance benchmarks, and the SplineOptimizer C++ API, see README_cpp.md.

License

MIT License. See LICENSE for details.

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

spline_trajectory-0.1.0.tar.gz (3.3 MB view details)

Uploaded Source

Built Distributions

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

spline_trajectory-0.1.0-cp312-cp312-win_amd64.whl (737.8 kB view details)

Uploaded CPython 3.12Windows x86-64

spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

spline_trajectory-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (925.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spline_trajectory-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

spline_trajectory-0.1.0-cp311-cp311-win_amd64.whl (736.5 kB view details)

Uploaded CPython 3.11Windows x86-64

spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

spline_trajectory-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (920.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spline_trajectory-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

spline_trajectory-0.1.0-cp310-cp310-win_amd64.whl (735.7 kB view details)

Uploaded CPython 3.10Windows x86-64

spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

spline_trajectory-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (919.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spline_trajectory-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

spline_trajectory-0.1.0-cp39-cp39-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.9Windows x86-64

spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_aarch64.whl (3.8 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

spline_trajectory-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (919.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

spline_trajectory-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: spline_trajectory-0.1.0.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spline_trajectory-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0c4a16257bd72d7e2d16d38e9cd599e1c428770b2b09c07b4d9b95a31e7fd78f
MD5 7fbe9f7843ecdeabf381076a8c8226e7
BLAKE2b-256 d5fa7d80ac74ca3d33acbe94e9f8820a007cf9f373fdd5ce793c8b27827845d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0.tar.gz:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d5d2bc5aff06384eb1a2dcfa5f059ff36f2e03a741a5f2c50fb7317d4a681838
MD5 e308139e3f5853d1ab31413eff788b25
BLAKE2b-256 61b98352cd7c605e04055f0eff149dd9520252a74c1aceee83425cc245f93ec8

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49fca4524a8b9710e8e9bf24afe40a0767d24c420c9c13ab66137fbbea8c332f
MD5 597c86cdc76dd6ac1fe79a450a95c3ba
BLAKE2b-256 a8cf5b78603b59ac8343ff06b2f71b03efbaebe1460a07cfdf959c52a13349e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5bd5d0cc6d2e5ec40d860f97f6e75bde3d827b554ef481d599dbecf68fdf2d1f
MD5 96c1426d3c04aa856d1b7bd8b6105510
BLAKE2b-256 bf6135d93c96986a27299713405fc40b0069c163d2f5776153b33e3302c0afe8

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5a6d4b30d3bfd4bc0a2fb2c571af1b5bfc50f9188b418b25ed6a56a0f27dbb3
MD5 4f0f4ae1fb6449693fd41e7b7a8e8b59
BLAKE2b-256 8161467e74aedfe4a56988ed1b62a51af069b7de6174d55e5e3ed0a7c71d63f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d3db986392286356d70feb194108e72ca331af4c360b87823a1cc24fc5a3fae9
MD5 9c258d6c55d4896d24004016841882d4
BLAKE2b-256 ab20766541f58e390a647129f35f699fe918334797c4c032eefe590ac7a31d8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a97d477d2a0cd4f06ad1111d8c646acb7672b8a9e0e3144a29a526db2815622d
MD5 da80e98f00e4fa34167ece7b00eb9345
BLAKE2b-256 eee98bba0527440e102626a95be73aedc8bd2b3fe5dbebc55765040d60b08d41

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0462d8035cc809295c25da0821a03322bb01c08d5d6b65ab0cdacee77fda334b
MD5 f115532fc53e64d5a7505eb4f89f7676
BLAKE2b-256 e30001962de7ea755413999e31b229c1a5031f0c86d5d37e190d989357a4f084

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 56cf611802151675bebb8a7acf2a730c919505dc862fb89a5b6cfaee504abda1
MD5 a3b1a2a8757b7d35d8f356d081fbce18
BLAKE2b-256 d7be02ca969d340a3637186b6f267e8e5092900d1beb431d39617236a9a404a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8c776e209848043fdc31d32651c8e7651670322a11be3501d3100b2e49928742
MD5 d4444280f22b0988b1940e79b082695b
BLAKE2b-256 f17122b9a40a0980b5757c28326d4cf6126218589cf2bcc2ad298778265f8a58

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f8952be996d00b6278e6746da2b8594aac224254421a1b00143ba89e55d0c299
MD5 a39828f02d38ab750cd94575df42eb20
BLAKE2b-256 fef8c723cc5df3b9b243eaa14f3e3af335cc23a923f56b39abbacc7b9de70edb

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12965cf9745058b60158fa1ac637fbe92ed946b2ee05513710a503cb881c2fc4
MD5 61f27175892fbb93778acef14ffdf0dd
BLAKE2b-256 d3570dec30b474a48a984d34ef8f6ce82be3dcb4d9a469623bb93eb6b86ce945

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5d8d948d7aada3df50d420de0e745f126144bc590b396a89bcaf4f0d0d12c191
MD5 87cf03844fcd571e029091eb7dd85c3b
BLAKE2b-256 57f676f44c0dbae1dd7be98e2d486b60a39b83db2f33ff9ef727297104d69526

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 932487c2107cfe8db339c97f6a476f5a2ed020ed01f682494fe2c845ead09266
MD5 8d75bffdb0cf137fdf3fe9fa600efb5b
BLAKE2b-256 083c5766fcd2c2809cfebe8481b515cfd9b20351fc3a5ff70d5d09e5d66aaf7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bd239ec3d765f67dbcdb51cb8345380f423410ad286ac595e4ebdaad85ea71e9
MD5 1a2eb8b5d3149646fe8b46a0de95c3bf
BLAKE2b-256 d9e45a58f553804be707090ed827acc8ae15d1f9d0c4beadad64a7815dfcc2c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6ac1ad447dbacfc2de5f2df34e8f6fa8972883928143ab292867bef522f2ba52
MD5 0d4f9633d175e00515e2b2068d7d9fc0
BLAKE2b-256 88b8654a71a83f759fc2c8f146490e42f02f77d507074635e2bf6c353a9b0b65

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a609f343ec9b889cb1f4616a2c297298c62103523c68aecc9e15153822a6aa15
MD5 4ece0a64ec9fd4edc03a9259b90c8c0b
BLAKE2b-256 cbdb00366d6b5e77a95361ca5c7b9383c20a946933136a72ff003171d1563901

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 359a1e759479b378032830db4d72a475cf806e4293482bc865bebeaa47598cf9
MD5 733921f76f5de03ea1bf0521fcfd011e
BLAKE2b-256 8690642a39e4c0afde84fde70bcbbf33214f9e52da9e8ee506c4e585857f4f6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d60b04febfd4f7453a9751a660534346ee54d5127ca01a1d58e540964cb2f4ce
MD5 1aeb9d082e517e338c285389004b92d2
BLAKE2b-256 e0183c3227cd59e671dd22f9850026fbca4e19635e8856e0d6ca10e3ed9bd7f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c26318fbace710004d4cbe9032929095b7e8a6a7c86342e15eb1c5dc0d755dc4
MD5 cfb25997289c483ec15985fe90f72d4f
BLAKE2b-256 dba5751ee7e62c517a492d8036bff0a3833c357f1543ccf39325ec455ea3dbea

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a6a6d33cee77d68494e4e8c2c8a0e1fb9decb34e753f23071e67220db0f7bd3
MD5 d2c6fadb6a22747de4b583ff008b6a55
BLAKE2b-256 e35623f8f06b44872f9ffc65357918e1acc1c486ddf783b9feec0c74a3b62cf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c2a20981f7159b4f1b8b5bc0618aff3eeddc9dab156cb5384b4771cfaa9be680
MD5 f4a5d288a8f799b55927a44067f4dc4f
BLAKE2b-256 69be03538e3800eaf423c00eb990f203b95c8a57f300e5b37c27babfc4f0e0be

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 24e20eacd16b1ebe40a51675225dc8836957f3b4b64d40277fca4feb08f42f2a
MD5 9525315a772fdbcc2565255baa3cb1b3
BLAKE2b-256 73b77502f2c64fa245b890dad98e6593bda6a3dc2ae06f78b608d46deec4eaf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-win_amd64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c876661bcb8b98eb0cffe27656d5bb817c25c930472ad2864801a2cfe822f8a0
MD5 0a60944e3c8c40cf83760473d3e6e649
BLAKE2b-256 60edcf2ee30043a8990ef8c50a306f25a789e40a21493473748f9fa9ab081518

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 82f3ea9f645436f6c0ec95122d86ee1781a2753246da26056980eae60762036f
MD5 9016b4699c53b3f5ab1205cda70b812d
BLAKE2b-256 4321539bd2d1a9171ab42828381066212609746c38592b1fd0667da93a7675ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e969defbd15e3f39e051ac41214090994980070424b3dbb25d85ed83a53ca68c
MD5 0146d2b03e3cd46652c114736e9da741
BLAKE2b-256 0895ae496f13336182203d3ebfd8a33ba5deaf08c8fbf0d697112d3e61ba6a63

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 03f41e24ac594dd25ce7f1b358cba67b552a89827df47b2aaf4e99b9198ed550
MD5 c2f2d12214b95bc79434b96532b9af37
BLAKE2b-256 0da8195ff707a91b266d662c332d15a606f5e327b7f895152d94c89ceb308d86

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c8a987b244961151b780ff13bb091e7012c3d857b138df7643cb7d01913f574
MD5 405733622e930598bc1ca06bfd08b257
BLAKE2b-256 d6779cfb70c394d64cae1623c49670fe9d3a65d666d43c3969a24fb664ae2f9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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

File details

Details for the file spline_trajectory-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for spline_trajectory-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 696f83f0eef7f0090613441a4220e803679b878b6d67a0623e5a3b4e1a0302d1
MD5 afcd880e07da93389223d1038c13280c
BLAKE2b-256 5f95bd612cf1aa8a59c0bad9d6a56a75b1dfaba83f29c774e901c223fdd86270

See more details on using hashes here.

Provenance

The following attestation bundles were made for spline_trajectory-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: publish.yml on RENyunfan/SplineTrajectory

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