copp-py 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- copp_py-0.2.1/.cargo/config.toml +7 -0
- copp_py-0.2.1/.gitattributes +37 -0
- copp_py-0.2.1/.github/workflows/c-abi.yml +248 -0
- copp_py-0.2.1/.github/workflows/python-wheels.yml +186 -0
- copp_py-0.2.1/.github/workflows/rust.yml +54 -0
- copp_py-0.2.1/.gitignore +28 -0
- copp_py-0.2.1/CHANGELOG.md +38 -0
- copp_py-0.2.1/Cargo.lock +1961 -0
- copp_py-0.2.1/Cargo.toml +57 -0
- copp_py-0.2.1/LICENSE +21 -0
- copp_py-0.2.1/PKG-INFO +427 -0
- copp_py-0.2.1/README.md +344 -0
- copp_py-0.2.1/bindings/c/CMakeLists.txt +266 -0
- copp_py-0.2.1/bindings/c/Doxyfile +77 -0
- copp_py-0.2.1/bindings/c/README.md +420 -0
- copp_py-0.2.1/bindings/c/cbindgen.toml +25 -0
- copp_py-0.2.1/bindings/c/cmake/coppConfig.cmake.in +52 -0
- copp_py-0.2.1/bindings/c/examples/README.md +31 -0
- copp_py-0.2.1/bindings/c/examples/copp2_socp.c +96 -0
- copp_py-0.2.1/bindings/c/examples/copp3_socp.c +203 -0
- copp_py-0.2.1/bindings/c/examples/example_common.h +419 -0
- copp_py-0.2.1/bindings/c/examples/reach_set2.c +85 -0
- copp_py-0.2.1/bindings/c/examples/topp2_ra.c +73 -0
- copp_py-0.2.1/bindings/c/examples/topp3_lp.c +134 -0
- copp_py-0.2.1/bindings/c/examples/topp3_socp.c +134 -0
- copp_py-0.2.1/bindings/c/include/copp/copp.h +27 -0
- copp_py-0.2.1/bindings/c/include/copp/copp2.h +199 -0
- copp_py-0.2.1/bindings/c/include/copp/copp3.h +186 -0
- copp_py-0.2.1/bindings/c/include/copp/core.h +1011 -0
- copp_py-0.2.1/bindings/c/include/copp/formulation.h +406 -0
- copp_py-0.2.1/bindings/c/include/copp/interpolation.h +289 -0
- copp_py-0.2.1/bindings/c/include/copp/path.h +408 -0
- copp_py-0.2.1/bindings/c/include/copp/robot.h +744 -0
- copp_py-0.2.1/bindings/c/include/copp/topp2.h +192 -0
- copp_py-0.2.1/bindings/c/include/copp/topp3.h +160 -0
- copp_py-0.2.1/bindings/c/scripts/generate_docs.ps1 +30 -0
- copp_py-0.2.1/bindings/c/scripts/generate_docs.sh +28 -0
- copp_py-0.2.1/bindings/c/scripts/generate_headers.ps1 +598 -0
- copp_py-0.2.1/bindings/c/tests/package_consumer/CMakeLists.txt +19 -0
- copp_py-0.2.1/bindings/c/tests/package_consumer/main.c +15 -0
- copp_py-0.2.1/bindings/c/tests/test_copp2_socp.c +312 -0
- copp_py-0.2.1/bindings/c/tests/test_copp3_socp.c +325 -0
- copp_py-0.2.1/bindings/c/tests/test_error_handling.c +83 -0
- copp_py-0.2.1/bindings/c/tests/test_headers.c +206 -0
- copp_py-0.2.1/bindings/c/tests/test_path_evaluation.c +509 -0
- copp_py-0.2.1/bindings/c/tests/test_reach_set2.c +190 -0
- copp_py-0.2.1/bindings/c/tests/test_robot_raw_constraints.c +368 -0
- copp_py-0.2.1/bindings/c/tests/test_topp2_interpolation.c +85 -0
- copp_py-0.2.1/bindings/c/tests/test_topp2_ra.c +225 -0
- copp_py-0.2.1/bindings/c/tests/test_topp3_interpolation.c +181 -0
- copp_py-0.2.1/bindings/c/tests/test_topp3_lp.c +262 -0
- copp_py-0.2.1/bindings/c/tests/test_topp3_socp.c +246 -0
- copp_py-0.2.1/bindings/c/tests/test_version.c +27 -0
- copp_py-0.2.1/bindings/python/README.md +389 -0
- copp_py-0.2.1/bindings/python/copp_py/__init__.py +67 -0
- copp_py-0.2.1/bindings/python/copp_py/__init__.pyi +30 -0
- copp_py-0.2.1/bindings/python/copp_py/_native.pyi +17 -0
- copp_py-0.2.1/bindings/python/copp_py/_parametric.py +568 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/__init__.pyi +1 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/clarabel.pyi +275 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/constraints.pyi +143 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/copp2.pyi +121 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/copp3.pyi +140 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/core.pyi +125 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/interpolation.pyi +410 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/objective.pyi +136 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/path.pyi +562 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/robot.pyi +243 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/topp2.pyi +228 -0
- copp_py-0.2.1/bindings/python/copp_py/_stubs/topp3.pyi +189 -0
- copp_py-0.2.1/bindings/python/copp_py/clarabel.py +36 -0
- copp_py-0.2.1/bindings/python/copp_py/clarabel.pyi +20 -0
- copp_py-0.2.1/bindings/python/copp_py/constraints.py +5 -0
- copp_py-0.2.1/bindings/python/copp_py/constraints.pyi +5 -0
- copp_py-0.2.1/bindings/python/copp_py/core.py +29 -0
- copp_py-0.2.1/bindings/python/copp_py/core.pyi +17 -0
- copp_py-0.2.1/bindings/python/copp_py/interpolation.py +27 -0
- copp_py-0.2.1/bindings/python/copp_py/interpolation.pyi +16 -0
- copp_py-0.2.1/bindings/python/copp_py/objective.py +26 -0
- copp_py-0.2.1/bindings/python/copp_py/objective.pyi +10 -0
- copp_py-0.2.1/bindings/python/copp_py/path.py +19 -0
- copp_py-0.2.1/bindings/python/copp_py/path.pyi +12 -0
- copp_py-0.2.1/bindings/python/copp_py/py.typed +1 -0
- copp_py-0.2.1/bindings/python/copp_py/robot.py +5 -0
- copp_py-0.2.1/bindings/python/copp_py/robot.pyi +5 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/__init__.py +17 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/__init__.pyi +10 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/copp2_socp.py +25 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/copp2_socp.pyi +20 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/copp3_socp.py +23 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/copp3_socp.pyi +18 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/reach_set2.py +22 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/reach_set2.pyi +17 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp2_ra.py +20 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp2_ra.pyi +16 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp3_lp.py +23 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp3_lp.pyi +18 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp3_socp.py +23 -0
- copp_py-0.2.1/bindings/python/copp_py/solver/topp3_socp.pyi +18 -0
- copp_py-0.2.1/bindings/python/docs/Makefile +20 -0
- copp_py-0.2.1/bindings/python/docs/make.bat +35 -0
- copp_py-0.2.1/bindings/python/docs/source/api/clarabel.rst +29 -0
- copp_py-0.2.1/bindings/python/docs/source/api/copp2.rst +10 -0
- copp_py-0.2.1/bindings/python/docs/source/api/copp3.rst +10 -0
- copp_py-0.2.1/bindings/python/docs/source/api/core.rst +35 -0
- copp_py-0.2.1/bindings/python/docs/source/api/index.rst +16 -0
- copp_py-0.2.1/bindings/python/docs/source/api/interpolation.rst +34 -0
- copp_py-0.2.1/bindings/python/docs/source/api/objective.rst +12 -0
- copp_py-0.2.1/bindings/python/docs/source/api/path.rst +29 -0
- copp_py-0.2.1/bindings/python/docs/source/api/robot.rst +13 -0
- copp_py-0.2.1/bindings/python/docs/source/api/topp2.rst +16 -0
- copp_py-0.2.1/bindings/python/docs/source/api/topp3.rst +16 -0
- copp_py-0.2.1/bindings/python/docs/source/concepts/index.rst +11 -0
- copp_py-0.2.1/bindings/python/docs/source/concepts/opp.rst +150 -0
- copp_py-0.2.1/bindings/python/docs/source/concepts/solver_selection.rst +72 -0
- copp_py-0.2.1/bindings/python/docs/source/conf.py +104 -0
- copp_py-0.2.1/bindings/python/docs/source/how_to/diagnostics.rst +57 -0
- copp_py-0.2.1/bindings/python/docs/source/how_to/index.rst +12 -0
- copp_py-0.2.1/bindings/python/docs/source/how_to/interpolation.rst +61 -0
- copp_py-0.2.1/bindings/python/docs/source/how_to/paths_and_constraints.rst +135 -0
- copp_py-0.2.1/bindings/python/docs/source/index.rst +36 -0
- copp_py-0.2.1/bindings/python/docs/source/quickstart.rst +60 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/copp2_socp.rst +35 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/copp3_socp.rst +22 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/index.rst +14 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/reach_set2.rst +28 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/topp2_ra.rst +38 -0
- copp_py-0.2.1/bindings/python/docs/source/tutorials/topp3_socp.rst +27 -0
- copp_py-0.2.1/bindings/python/examples/copp2_socp.py +87 -0
- copp_py-0.2.1/bindings/python/examples/copp3_socp.py +121 -0
- copp_py-0.2.1/bindings/python/examples/reach_set2.py +85 -0
- copp_py-0.2.1/bindings/python/examples/topp2_ra.py +77 -0
- copp_py-0.2.1/bindings/python/examples/topp3_socp.py +114 -0
- copp_py-0.2.1/bindings/python/tests/test_copp2_interpolation.py +25 -0
- copp_py-0.2.1/bindings/python/tests/test_copp2_socp.py +204 -0
- copp_py-0.2.1/bindings/python/tests/test_copp3_socp.py +111 -0
- copp_py-0.2.1/bindings/python/tests/test_path_evaluator.py +141 -0
- copp_py-0.2.1/bindings/python/tests/test_path_parametric.py +107 -0
- copp_py-0.2.1/bindings/python/tests/test_path_waypoints.py +115 -0
- copp_py-0.2.1/bindings/python/tests/test_public_namespaces.py +71 -0
- copp_py-0.2.1/bindings/python/tests/test_reach_set2.py +100 -0
- copp_py-0.2.1/bindings/python/tests/test_robot_constraints.py +159 -0
- copp_py-0.2.1/bindings/python/tests/test_topp2_ra.py +131 -0
- copp_py-0.2.1/bindings/python/tests/test_topp3_interpolation.py +56 -0
- copp_py-0.2.1/bindings/python/tests/test_topp3_problem.py +100 -0
- copp_py-0.2.1/bindings/python/tests/test_topp3_socp.py +79 -0
- copp_py-0.2.1/examples/copp2_socp.rs +87 -0
- copp_py-0.2.1/examples/copp3_socp.rs +161 -0
- copp_py-0.2.1/examples/reach_set2.rs +85 -0
- copp_py-0.2.1/examples/topp2_ra.rs +76 -0
- copp_py-0.2.1/examples/topp3_lp.rs +145 -0
- copp_py-0.2.1/examples/topp3_socp.rs +145 -0
- copp_py-0.2.1/mathjax-config.html +14 -0
- copp_py-0.2.1/pyproject.toml +54 -0
- copp_py-0.2.1/src/copp/clarabel_backend.rs +361 -0
- copp_py-0.2.1/src/copp/constraints.rs +2449 -0
- copp_py-0.2.1/src/copp/copp2/dp2/mod.rs +12 -0
- copp_py-0.2.1/src/copp/copp2/dp2/reach_set2.rs +834 -0
- copp_py-0.2.1/src/copp/copp2/dp2/topp2_ra.rs +397 -0
- copp_py-0.2.1/src/copp/copp2/formulation.rs +292 -0
- copp_py-0.2.1/src/copp/copp2/interpolation.rs +306 -0
- copp_py-0.2.1/src/copp/copp2/mod.rs +54 -0
- copp_py-0.2.1/src/copp/copp2/opt2/clarabel_constraints.rs +246 -0
- copp_py-0.2.1/src/copp/copp2/opt2/copp2_socp.rs +1460 -0
- copp_py-0.2.1/src/copp/copp2/opt2/mod.rs +33 -0
- copp_py-0.2.1/src/copp/copp3/formulation.rs +735 -0
- copp_py-0.2.1/src/copp/copp3/interpolation.rs +627 -0
- copp_py-0.2.1/src/copp/copp3/mod.rs +53 -0
- copp_py-0.2.1/src/copp/copp3/opt3/clarabel_constraints.rs +487 -0
- copp_py-0.2.1/src/copp/copp3/opt3/copp3_socp.rs +2129 -0
- copp_py-0.2.1/src/copp/copp3/opt3/mod.rs +38 -0
- copp_py-0.2.1/src/copp/copp3/opt3/topp3_lp.rs +463 -0
- copp_py-0.2.1/src/copp/copp3/opt3/topp3_socp.rs +622 -0
- copp_py-0.2.1/src/copp/general.rs +123 -0
- copp_py-0.2.1/src/copp/mod.rs +39 -0
- copp_py-0.2.1/src/copp/objectives.rs +263 -0
- copp_py-0.2.1/src/diag/diagnostics.rs +315 -0
- copp_py-0.2.1/src/diag/error.rs +578 -0
- copp_py-0.2.1/src/diag/mod.rs +12 -0
- copp_py-0.2.1/src/ffi/c/core/mod.rs +13 -0
- copp_py-0.2.1/src/ffi/c/core/status.rs +565 -0
- copp_py-0.2.1/src/ffi/c/core/types.rs +717 -0
- copp_py-0.2.1/src/ffi/c/core/verbosity.rs +39 -0
- copp_py-0.2.1/src/ffi/c/core/version.rs +22 -0
- copp_py-0.2.1/src/ffi/c/formulation.rs +466 -0
- copp_py-0.2.1/src/ffi/c/interpolation.rs +582 -0
- copp_py-0.2.1/src/ffi/c/mod.rs +31 -0
- copp_py-0.2.1/src/ffi/c/path.rs +1254 -0
- copp_py-0.2.1/src/ffi/c/robot.rs +1801 -0
- copp_py-0.2.1/src/ffi/c/solver/copp2/mod.rs +3 -0
- copp_py-0.2.1/src/ffi/c/solver/copp2/socp.rs +1235 -0
- copp_py-0.2.1/src/ffi/c/solver/copp3/mod.rs +3 -0
- copp_py-0.2.1/src/ffi/c/solver/copp3/socp.rs +287 -0
- copp_py-0.2.1/src/ffi/c/solver/mod.rs +14 -0
- copp_py-0.2.1/src/ffi/c/solver/topp2/mod.rs +4 -0
- copp_py-0.2.1/src/ffi/c/solver/topp2/ra.rs +200 -0
- copp_py-0.2.1/src/ffi/c/solver/topp2/reach_set.rs +207 -0
- copp_py-0.2.1/src/ffi/c/solver/topp3/lp.rs +132 -0
- copp_py-0.2.1/src/ffi/c/solver/topp3/mod.rs +4 -0
- copp_py-0.2.1/src/ffi/c/solver/topp3/socp.rs +132 -0
- copp_py-0.2.1/src/ffi/mod.rs +12 -0
- copp_py-0.2.1/src/ffi/python/array.rs +80 -0
- copp_py-0.2.1/src/ffi/python/error.rs +58 -0
- copp_py-0.2.1/src/ffi/python/interpolation.rs +649 -0
- copp_py-0.2.1/src/ffi/python/mod.rs +71 -0
- copp_py-0.2.1/src/ffi/python/objective.rs +368 -0
- copp_py-0.2.1/src/ffi/python/path.rs +1574 -0
- copp_py-0.2.1/src/ffi/python/robot.rs +1028 -0
- copp_py-0.2.1/src/ffi/python/solver/clarabel.rs +1064 -0
- copp_py-0.2.1/src/ffi/python/solver/common.rs +105 -0
- copp_py-0.2.1/src/ffi/python/solver/copp2.rs +461 -0
- copp_py-0.2.1/src/ffi/python/solver/copp3.rs +378 -0
- copp_py-0.2.1/src/ffi/python/solver/mod.rs +24 -0
- copp_py-0.2.1/src/ffi/python/solver/topp2.rs +434 -0
- copp_py-0.2.1/src/ffi/python/solver/topp3.rs +420 -0
- copp_py-0.2.1/src/lib.rs +249 -0
- copp_py-0.2.1/src/math/mod.rs +11 -0
- copp_py-0.2.1/src/math/numerical/general.rs +12 -0
- copp_py-0.2.1/src/math/numerical/lp.rs +3318 -0
- copp_py-0.2.1/src/math/numerical/mod.rs +11 -0
- copp_py-0.2.1/src/path/autodiff.rs +345 -0
- copp_py-0.2.1/src/path/mod.rs +556 -0
- copp_py-0.2.1/src/path/path_core.rs +1426 -0
- copp_py-0.2.1/src/path/spline.rs +820 -0
- copp_py-0.2.1/src/robot/demo/mod.rs +12 -0
- copp_py-0.2.1/src/robot/demo/robot_2dof.rs +245 -0
- copp_py-0.2.1/src/robot/mod.rs +28 -0
- copp_py-0.2.1/src/robot/robot_core.rs +1092 -0
- copp_py-0.2.1/tests/test_franka.rs +1504 -0
- copp_py-0.2.1/tests/test_random_spline.rs +795 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
2
|
+
|
|
3
|
+
# Keep Windows command scripts in their native line ending.
|
|
4
|
+
*.bat text eol=crlf
|
|
5
|
+
*.cmd text eol=crlf
|
|
6
|
+
|
|
7
|
+
# Binary assets and archives should never be line-ending normalized.
|
|
8
|
+
*.7z binary
|
|
9
|
+
*.a binary
|
|
10
|
+
*.avi binary
|
|
11
|
+
*.bin binary
|
|
12
|
+
*.bmp binary
|
|
13
|
+
*.dll binary
|
|
14
|
+
*.doc binary
|
|
15
|
+
*.docx binary
|
|
16
|
+
*.dylib binary
|
|
17
|
+
*.exe binary
|
|
18
|
+
*.gif binary
|
|
19
|
+
*.gz binary
|
|
20
|
+
*.ico binary
|
|
21
|
+
*.jpeg binary
|
|
22
|
+
*.jpg binary
|
|
23
|
+
*.lib binary
|
|
24
|
+
*.mat binary
|
|
25
|
+
*.mov binary
|
|
26
|
+
*.mp4 binary
|
|
27
|
+
*.npy binary
|
|
28
|
+
*.npz binary
|
|
29
|
+
*.pdf binary
|
|
30
|
+
*.png binary
|
|
31
|
+
*.ppt binary
|
|
32
|
+
*.pptx binary
|
|
33
|
+
*.so binary
|
|
34
|
+
*.tar binary
|
|
35
|
+
*.xls binary
|
|
36
|
+
*.xlsx binary
|
|
37
|
+
*.zip binary
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
name: C ABI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- "**"
|
|
7
|
+
tags:
|
|
8
|
+
- "v*"
|
|
9
|
+
pull_request:
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: c-abi-${{ github.workflow }}-${{ github.ref }}
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
env:
|
|
20
|
+
CARGO_TERM_COLOR: always
|
|
21
|
+
RUSTFLAGS: "-C target-cpu=generic"
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
build-package:
|
|
25
|
+
name: ${{ matrix.platform }} / ${{ matrix.link }}
|
|
26
|
+
runs-on: ${{ matrix.os }}
|
|
27
|
+
|
|
28
|
+
strategy:
|
|
29
|
+
fail-fast: false
|
|
30
|
+
matrix:
|
|
31
|
+
include:
|
|
32
|
+
- os: ubuntu-24.04
|
|
33
|
+
platform: linux-x86_64-gnu
|
|
34
|
+
link: dynamic
|
|
35
|
+
static_flag: OFF
|
|
36
|
+
- os: ubuntu-24.04
|
|
37
|
+
platform: linux-x86_64-gnu
|
|
38
|
+
link: static
|
|
39
|
+
static_flag: ON
|
|
40
|
+
- os: windows-2022
|
|
41
|
+
platform: windows-x86_64-msvc
|
|
42
|
+
link: dynamic
|
|
43
|
+
static_flag: OFF
|
|
44
|
+
- os: windows-2022
|
|
45
|
+
platform: windows-x86_64-msvc
|
|
46
|
+
link: static
|
|
47
|
+
static_flag: ON
|
|
48
|
+
- os: macos-15
|
|
49
|
+
platform: macos-aarch64
|
|
50
|
+
link: dynamic
|
|
51
|
+
static_flag: OFF
|
|
52
|
+
- os: macos-15
|
|
53
|
+
platform: macos-aarch64
|
|
54
|
+
link: static
|
|
55
|
+
static_flag: ON
|
|
56
|
+
- os: macos-15-intel
|
|
57
|
+
platform: macos-x86_64
|
|
58
|
+
link: dynamic
|
|
59
|
+
static_flag: OFF
|
|
60
|
+
- os: macos-15-intel
|
|
61
|
+
platform: macos-x86_64
|
|
62
|
+
link: static
|
|
63
|
+
static_flag: ON
|
|
64
|
+
|
|
65
|
+
steps:
|
|
66
|
+
- name: Checkout
|
|
67
|
+
uses: actions/checkout@v4
|
|
68
|
+
|
|
69
|
+
- name: Prepare package metadata
|
|
70
|
+
shell: pwsh
|
|
71
|
+
run: |
|
|
72
|
+
$refName = "${{ github.ref_name }}"
|
|
73
|
+
if ("${{ github.event_name }}" -eq "pull_request") {
|
|
74
|
+
$refName = "pr-${{ github.event.pull_request.number }}"
|
|
75
|
+
}
|
|
76
|
+
$safeRefName = $refName -replace '[^A-Za-z0-9._-]', '-'
|
|
77
|
+
"COPP_PACKAGE_NAME=copp-c-$safeRefName-${{ matrix.platform }}-${{ matrix.link }}" >> $env:GITHUB_ENV
|
|
78
|
+
|
|
79
|
+
- name: Install Rust
|
|
80
|
+
uses: dtolnay/rust-toolchain@stable
|
|
81
|
+
|
|
82
|
+
- name: Install Linux system dependencies
|
|
83
|
+
if: runner.os == 'Linux'
|
|
84
|
+
run: |
|
|
85
|
+
sudo apt-get update
|
|
86
|
+
sudo apt-get install -y pkg-config libfontconfig1-dev
|
|
87
|
+
|
|
88
|
+
- name: Cache Cargo
|
|
89
|
+
uses: Swatinem/rust-cache@v2
|
|
90
|
+
with:
|
|
91
|
+
key: c-abi-${{ matrix.platform }}-${{ matrix.link }}
|
|
92
|
+
|
|
93
|
+
- name: Install cbindgen
|
|
94
|
+
run: cargo install cbindgen
|
|
95
|
+
|
|
96
|
+
- name: Build Rust native library
|
|
97
|
+
run: cargo build --release --lib --features c
|
|
98
|
+
|
|
99
|
+
- name: Install nightly Rust for cbindgen expand
|
|
100
|
+
run: rustup toolchain install nightly --profile minimal
|
|
101
|
+
|
|
102
|
+
- name: Generate C headers
|
|
103
|
+
shell: pwsh
|
|
104
|
+
env:
|
|
105
|
+
RUSTUP_TOOLCHAIN: nightly
|
|
106
|
+
run: ./bindings/c/scripts/generate_headers.ps1
|
|
107
|
+
|
|
108
|
+
- name: Check generated C headers are committed
|
|
109
|
+
shell: pwsh
|
|
110
|
+
run: |
|
|
111
|
+
$changes = git status --porcelain -- bindings/c/include/copp
|
|
112
|
+
if ($changes) {
|
|
113
|
+
git diff -- bindings/c/include/copp
|
|
114
|
+
$changes
|
|
115
|
+
exit 1
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
- name: Configure C tests and examples
|
|
119
|
+
shell: pwsh
|
|
120
|
+
run: |
|
|
121
|
+
cmake -S bindings/c -B bindings/c/build-c-abi `
|
|
122
|
+
-DCMAKE_BUILD_TYPE=Release `
|
|
123
|
+
-DCOPP_LINK_STATIC=${{ matrix.static_flag }} `
|
|
124
|
+
-DCOPP_BUILD_TESTS=ON `
|
|
125
|
+
-DCOPP_BUILD_EXAMPLES=ON `
|
|
126
|
+
-DCOPP_TEST_EXAMPLES=ON `
|
|
127
|
+
-DCOPP_BUILD_INSTALL_TESTS=ON
|
|
128
|
+
|
|
129
|
+
- name: Build C tests and examples
|
|
130
|
+
run: cmake --build bindings/c/build-c-abi --config Release --parallel
|
|
131
|
+
|
|
132
|
+
- name: Run C tests, examples, and install smoke tests
|
|
133
|
+
run: ctest --test-dir bindings/c/build-c-abi --output-on-failure -C Release
|
|
134
|
+
|
|
135
|
+
- name: Install C SDK package
|
|
136
|
+
shell: pwsh
|
|
137
|
+
run: |
|
|
138
|
+
$prefix = Join-Path "dist" $env:COPP_PACKAGE_NAME
|
|
139
|
+
cmake --install bindings/c/build-c-abi --config Release --prefix $prefix
|
|
140
|
+
|
|
141
|
+
Copy-Item README.md (Join-Path $prefix "README.md")
|
|
142
|
+
Copy-Item CHANGELOG.md (Join-Path $prefix "CHANGELOG.md")
|
|
143
|
+
Copy-Item bindings/c/README.md (Join-Path $prefix "C-README.md")
|
|
144
|
+
Copy-Item bindings/c/examples (Join-Path $prefix "examples") -Recurse
|
|
145
|
+
|
|
146
|
+
$license = Get-ChildItem -Path . -File |
|
|
147
|
+
Where-Object { $_.Name -match '^(LICENSE|COPYING)(\..*)?$' } |
|
|
148
|
+
Select-Object -First 1
|
|
149
|
+
if ($license) {
|
|
150
|
+
Copy-Item $license.FullName (Join-Path $prefix $license.Name)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
- name: Archive C SDK package
|
|
154
|
+
shell: pwsh
|
|
155
|
+
run: |
|
|
156
|
+
New-Item -ItemType Directory -Force release-artifacts | Out-Null
|
|
157
|
+
$archive = Join-Path "release-artifacts" "$env:COPP_PACKAGE_NAME.zip"
|
|
158
|
+
|
|
159
|
+
Push-Location dist
|
|
160
|
+
cmake -E tar cfv "../$archive" --format=zip $env:COPP_PACKAGE_NAME
|
|
161
|
+
Pop-Location
|
|
162
|
+
|
|
163
|
+
$hash = Get-FileHash $archive -Algorithm SHA256
|
|
164
|
+
"$($hash.Hash.ToLower()) $(Split-Path $archive -Leaf)" |
|
|
165
|
+
Set-Content -Path "$archive.sha256" -NoNewline
|
|
166
|
+
|
|
167
|
+
- name: Smoke test archived package
|
|
168
|
+
shell: pwsh
|
|
169
|
+
run: |
|
|
170
|
+
$archive = Join-Path "release-artifacts" "$env:COPP_PACKAGE_NAME.zip"
|
|
171
|
+
$extractRoot = Join-Path "release-smoke" "extract"
|
|
172
|
+
$buildDir = Join-Path "release-smoke" "build"
|
|
173
|
+
|
|
174
|
+
New-Item -ItemType Directory -Force $extractRoot | Out-Null
|
|
175
|
+
Push-Location $extractRoot
|
|
176
|
+
cmake -E tar xf "../../$archive"
|
|
177
|
+
Pop-Location
|
|
178
|
+
|
|
179
|
+
$prefix = Resolve-Path (Join-Path $extractRoot $env:COPP_PACKAGE_NAME)
|
|
180
|
+
cmake -S bindings/c/tests/package_consumer -B $buildDir `
|
|
181
|
+
-DCMAKE_PREFIX_PATH="$prefix" `
|
|
182
|
+
-DCMAKE_BUILD_TYPE=Release
|
|
183
|
+
cmake --build $buildDir --config Release --parallel
|
|
184
|
+
ctest --test-dir $buildDir --output-on-failure -C Release
|
|
185
|
+
|
|
186
|
+
- name: Upload release package artifact
|
|
187
|
+
uses: actions/upload-artifact@v4
|
|
188
|
+
with:
|
|
189
|
+
name: ${{ env.COPP_PACKAGE_NAME }}
|
|
190
|
+
path: |
|
|
191
|
+
release-artifacts/${{ env.COPP_PACKAGE_NAME }}.zip
|
|
192
|
+
release-artifacts/${{ env.COPP_PACKAGE_NAME }}.zip.sha256
|
|
193
|
+
if-no-files-found: error
|
|
194
|
+
|
|
195
|
+
publish-draft:
|
|
196
|
+
name: Create Draft GitHub Release
|
|
197
|
+
needs: build-package
|
|
198
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
199
|
+
runs-on: ubuntu-24.04
|
|
200
|
+
permissions:
|
|
201
|
+
contents: write
|
|
202
|
+
|
|
203
|
+
steps:
|
|
204
|
+
- name: Download release package artifacts
|
|
205
|
+
uses: actions/download-artifact@v4
|
|
206
|
+
with:
|
|
207
|
+
path: release-assets
|
|
208
|
+
|
|
209
|
+
- name: Create or update draft GitHub Release
|
|
210
|
+
shell: pwsh
|
|
211
|
+
env:
|
|
212
|
+
GH_TOKEN: ${{ github.token }}
|
|
213
|
+
GH_REPO: ${{ github.repository }}
|
|
214
|
+
RELEASE_TAG: ${{ github.ref_name }}
|
|
215
|
+
run: |
|
|
216
|
+
$assetPaths = @(
|
|
217
|
+
Get-ChildItem release-assets -Recurse -File |
|
|
218
|
+
Where-Object { $_.Name -like "*.zip" -or $_.Name -like "*.zip.sha256" } |
|
|
219
|
+
Sort-Object Name |
|
|
220
|
+
ForEach-Object { $_.FullName }
|
|
221
|
+
)
|
|
222
|
+
if ($assetPaths.Count -eq 0) {
|
|
223
|
+
throw "No release assets were downloaded."
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
$notesFile = "release-notes.md"
|
|
227
|
+
@'
|
|
228
|
+
Prebuilt C ABI SDK packages are attached below.
|
|
229
|
+
|
|
230
|
+
Each package contains the generated C headers, the Release native library, examples, and the CMake package files needed for `find_package(copp CONFIG REQUIRED)`.
|
|
231
|
+
|
|
232
|
+
See CHANGELOG.md in this tag for API changes and breaking changes.
|
|
233
|
+
'@ | Set-Content -Path $notesFile -NoNewline
|
|
234
|
+
|
|
235
|
+
gh release view $env:RELEASE_TAG *> $null
|
|
236
|
+
if ($LASTEXITCODE -eq 0) {
|
|
237
|
+
& gh release upload $env:RELEASE_TAG @assetPaths --clobber
|
|
238
|
+
& gh release edit $env:RELEASE_TAG `
|
|
239
|
+
--draft `
|
|
240
|
+
--title $env:RELEASE_TAG `
|
|
241
|
+
--notes-file $notesFile
|
|
242
|
+
} else {
|
|
243
|
+
& gh release create $env:RELEASE_TAG @assetPaths `
|
|
244
|
+
--draft `
|
|
245
|
+
--verify-tag `
|
|
246
|
+
--title $env:RELEASE_TAG `
|
|
247
|
+
--notes-file $notesFile
|
|
248
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
name: Python Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["**"]
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
paths:
|
|
8
|
+
- "bindings/python/**"
|
|
9
|
+
- "src/**"
|
|
10
|
+
- "Cargo.toml"
|
|
11
|
+
- "Cargo.lock"
|
|
12
|
+
- "pyproject.toml"
|
|
13
|
+
- ".github/workflows/python-wheels.yml"
|
|
14
|
+
pull_request:
|
|
15
|
+
paths:
|
|
16
|
+
- "bindings/python/**"
|
|
17
|
+
- "src/**"
|
|
18
|
+
- "Cargo.toml"
|
|
19
|
+
- "Cargo.lock"
|
|
20
|
+
- "pyproject.toml"
|
|
21
|
+
- ".github/workflows/python-wheels.yml"
|
|
22
|
+
release:
|
|
23
|
+
types: [published]
|
|
24
|
+
workflow_dispatch:
|
|
25
|
+
inputs:
|
|
26
|
+
publish_testpypi:
|
|
27
|
+
description: "Publish built wheels and sdist to TestPyPI"
|
|
28
|
+
required: false
|
|
29
|
+
default: false
|
|
30
|
+
type: boolean
|
|
31
|
+
|
|
32
|
+
env:
|
|
33
|
+
RUSTFLAGS: "-C target-cpu=generic"
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
build:
|
|
37
|
+
strategy:
|
|
38
|
+
fail-fast: false
|
|
39
|
+
matrix:
|
|
40
|
+
include:
|
|
41
|
+
- os: ubuntu-latest
|
|
42
|
+
target: x86_64
|
|
43
|
+
artifact: wheel-ubuntu-latest-x86_64
|
|
44
|
+
interpreter_args: -i python3.10 -i python3.11 -i python3.12 -i python3.13 -i python3.14
|
|
45
|
+
- os: ubuntu-latest
|
|
46
|
+
target: aarch64
|
|
47
|
+
artifact: wheel-ubuntu-latest-aarch64
|
|
48
|
+
interpreter_args: -i python3.10 -i python3.11 -i python3.12 -i python3.13 -i python3.14
|
|
49
|
+
- os: macos-15-intel
|
|
50
|
+
target: x86_64
|
|
51
|
+
artifact: wheel-macos-15-intel-x86_64
|
|
52
|
+
interpreter_args: -i python
|
|
53
|
+
- os: macos-14
|
|
54
|
+
target: aarch64
|
|
55
|
+
artifact: wheel-macos-14-aarch64
|
|
56
|
+
interpreter_args: -i python
|
|
57
|
+
- os: windows-latest
|
|
58
|
+
target: x86_64
|
|
59
|
+
artifact: wheel-windows-latest-x86_64
|
|
60
|
+
interpreter_args: -i python
|
|
61
|
+
runs-on: ${{ matrix.os }}
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v4
|
|
64
|
+
- uses: actions/setup-python@v5
|
|
65
|
+
if: runner.os != 'Linux'
|
|
66
|
+
with:
|
|
67
|
+
python-version: "3.10"
|
|
68
|
+
allow-prereleases: true
|
|
69
|
+
- uses: PyO3/maturin-action@v1
|
|
70
|
+
with:
|
|
71
|
+
target: ${{ matrix.target }}
|
|
72
|
+
args: --release --out dist ${{ matrix.interpreter_args }}
|
|
73
|
+
manylinux: auto
|
|
74
|
+
- uses: actions/upload-artifact@v4
|
|
75
|
+
with:
|
|
76
|
+
name: ${{ matrix.artifact }}
|
|
77
|
+
path: dist/*.whl
|
|
78
|
+
|
|
79
|
+
sdist:
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@v4
|
|
83
|
+
- uses: PyO3/maturin-action@v1
|
|
84
|
+
with:
|
|
85
|
+
command: sdist
|
|
86
|
+
args: --out dist
|
|
87
|
+
- uses: actions/upload-artifact@v4
|
|
88
|
+
with:
|
|
89
|
+
name: sdist
|
|
90
|
+
path: dist/*.tar.gz
|
|
91
|
+
|
|
92
|
+
test:
|
|
93
|
+
needs: [build]
|
|
94
|
+
strategy:
|
|
95
|
+
fail-fast: false
|
|
96
|
+
matrix:
|
|
97
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
98
|
+
runs-on: ubuntu-latest
|
|
99
|
+
steps:
|
|
100
|
+
- uses: actions/checkout@v4
|
|
101
|
+
- uses: actions/setup-python@v5
|
|
102
|
+
with:
|
|
103
|
+
python-version: ${{ matrix.python-version }}
|
|
104
|
+
allow-prereleases: true
|
|
105
|
+
- uses: actions/download-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: wheel-ubuntu-latest-x86_64
|
|
108
|
+
path: dist
|
|
109
|
+
- env:
|
|
110
|
+
PYTEST_DISABLE_PLUGIN_AUTOLOAD: 1
|
|
111
|
+
run: |
|
|
112
|
+
python -m pip install numpy pytest
|
|
113
|
+
python -m pip install --no-index --find-links dist copp-py
|
|
114
|
+
python -m pytest bindings/python/tests/ -v
|
|
115
|
+
|
|
116
|
+
smoke-test:
|
|
117
|
+
needs: [build]
|
|
118
|
+
strategy:
|
|
119
|
+
fail-fast: false
|
|
120
|
+
matrix:
|
|
121
|
+
include:
|
|
122
|
+
- runner: ubuntu-latest
|
|
123
|
+
artifact: wheel-ubuntu-latest-x86_64
|
|
124
|
+
- runner: ubuntu-24.04-arm
|
|
125
|
+
artifact: wheel-ubuntu-latest-aarch64
|
|
126
|
+
- runner: macos-15-intel
|
|
127
|
+
artifact: wheel-macos-15-intel-x86_64
|
|
128
|
+
- runner: macos-14
|
|
129
|
+
artifact: wheel-macos-14-aarch64
|
|
130
|
+
- runner: windows-latest
|
|
131
|
+
artifact: wheel-windows-latest-x86_64
|
|
132
|
+
runs-on: ${{ matrix.runner }}
|
|
133
|
+
steps:
|
|
134
|
+
- uses: actions/checkout@v4
|
|
135
|
+
- uses: actions/setup-python@v5
|
|
136
|
+
with:
|
|
137
|
+
python-version: "3.10"
|
|
138
|
+
allow-prereleases: true
|
|
139
|
+
- uses: actions/download-artifact@v4
|
|
140
|
+
with:
|
|
141
|
+
name: ${{ matrix.artifact }}
|
|
142
|
+
path: dist
|
|
143
|
+
- env:
|
|
144
|
+
PYTEST_DISABLE_PLUGIN_AUTOLOAD: 1
|
|
145
|
+
run: |
|
|
146
|
+
python -m pip install numpy pytest
|
|
147
|
+
python -m pip install --no-index --find-links dist copp-py
|
|
148
|
+
python -m pytest bindings/python/tests/ -v
|
|
149
|
+
|
|
150
|
+
publish-testpypi:
|
|
151
|
+
name: Publish to TestPyPI
|
|
152
|
+
needs: [sdist, test, smoke-test]
|
|
153
|
+
if: (github.event_name == 'workflow_dispatch' && inputs.publish_testpypi) || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
|
|
154
|
+
runs-on: ubuntu-latest
|
|
155
|
+
environment: testpypi
|
|
156
|
+
permissions:
|
|
157
|
+
contents: read
|
|
158
|
+
id-token: write
|
|
159
|
+
steps:
|
|
160
|
+
- uses: actions/download-artifact@v4
|
|
161
|
+
with:
|
|
162
|
+
path: dist
|
|
163
|
+
merge-multiple: true
|
|
164
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
165
|
+
with:
|
|
166
|
+
repository-url: https://test.pypi.org/legacy/
|
|
167
|
+
packages-dir: dist
|
|
168
|
+
skip-existing: true
|
|
169
|
+
|
|
170
|
+
publish-pypi:
|
|
171
|
+
name: Publish to PyPI
|
|
172
|
+
needs: [sdist, test, smoke-test]
|
|
173
|
+
if: github.event_name == 'release' && startsWith(github.event.release.tag_name, 'v')
|
|
174
|
+
runs-on: ubuntu-latest
|
|
175
|
+
environment: pypi
|
|
176
|
+
permissions:
|
|
177
|
+
contents: read
|
|
178
|
+
id-token: write
|
|
179
|
+
steps:
|
|
180
|
+
- uses: actions/download-artifact@v4
|
|
181
|
+
with:
|
|
182
|
+
path: dist
|
|
183
|
+
merge-multiple: true
|
|
184
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
185
|
+
with:
|
|
186
|
+
packages-dir: dist
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Rust
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: rust-${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
env:
|
|
16
|
+
CARGO_TERM_COLOR: always
|
|
17
|
+
RUSTFLAGS: "-C target-cpu=generic"
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
name: ${{ matrix.os }}
|
|
22
|
+
runs-on: ${{ matrix.os }}
|
|
23
|
+
|
|
24
|
+
strategy:
|
|
25
|
+
fail-fast: false
|
|
26
|
+
matrix:
|
|
27
|
+
os:
|
|
28
|
+
- ubuntu-latest
|
|
29
|
+
- windows-latest
|
|
30
|
+
- macos-latest
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- name: Checkout
|
|
34
|
+
uses: actions/checkout@v4
|
|
35
|
+
|
|
36
|
+
- name: Install Rust
|
|
37
|
+
uses: dtolnay/rust-toolchain@stable
|
|
38
|
+
|
|
39
|
+
- name: Install Linux system dependencies
|
|
40
|
+
if: runner.os == 'Linux'
|
|
41
|
+
run: |
|
|
42
|
+
sudo apt-get update
|
|
43
|
+
sudo apt-get install -y pkg-config libfontconfig1-dev
|
|
44
|
+
|
|
45
|
+
- name: Cache Cargo
|
|
46
|
+
uses: Swatinem/rust-cache@v2
|
|
47
|
+
with:
|
|
48
|
+
key: rust-${{ matrix.os }}
|
|
49
|
+
|
|
50
|
+
- name: Run Rust tests
|
|
51
|
+
run: cargo test --release --all-targets
|
|
52
|
+
|
|
53
|
+
- name: Run Rust doc tests
|
|
54
|
+
run: cargo test --release --doc
|
copp_py-0.2.1/.gitignore
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Rust
|
|
2
|
+
/target
|
|
3
|
+
/data
|
|
4
|
+
/.vscode
|
|
5
|
+
|
|
6
|
+
# C
|
|
7
|
+
/bindings/**/build/
|
|
8
|
+
/bindings/**/build-*/
|
|
9
|
+
/bindings/c/docs/
|
|
10
|
+
|
|
11
|
+
# Python
|
|
12
|
+
__pycache__/
|
|
13
|
+
*.py[cod]
|
|
14
|
+
*$py.class
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.ruff_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.pyright/
|
|
19
|
+
.coverage
|
|
20
|
+
coverage.xml
|
|
21
|
+
htmlcov/
|
|
22
|
+
*.egg-info/
|
|
23
|
+
*.dist-info/
|
|
24
|
+
*.whl
|
|
25
|
+
*.pdb
|
|
26
|
+
pip-wheel-metadata/
|
|
27
|
+
/site/
|
|
28
|
+
/bindings/python/docs/build/
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
This changelog follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [0.2.1]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- [Rust] Made `Constraints::new`, `Constraints::with_capacity`, `Constraints::with_s`, and `Constraints::with_q` public for advanced low-level constraint construction.
|
|
12
|
+
- [Rust] Added documentation examples for direct constraint construction, problem builders, custom path/robot integration, custom objective/sampler interfaces, and Clarabel expert status handling.
|
|
13
|
+
- [Python] Added the initial Python API surface, including path and robot bindings, problem/options/result types, and solver entry points.
|
|
14
|
+
- [c] Added a Cargo `c` feature for the C ABI; source builds now use `cargo build --release --lib --features c` when producing C libraries.
|
|
15
|
+
|
|
16
|
+
## [0.2.0]
|
|
17
|
+
|
|
18
|
+
### Breaking Changes
|
|
19
|
+
|
|
20
|
+
- [Rust] Changed the `RobotTorque::inverse_dynamics` contract to return `Result<(), RobotDynamicsError>`, allowing robot models to report inverse-dynamics failures with user-facing error messages.
|
|
21
|
+
- [Rust] Wrapped third-order trajectory results in dedicated profile types (`Topp3Profile` in Rust and `CoppProfile3rd` in the C API), replacing parts of the previous public API.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- [Rust] Added dry-friction support to inverse-dynamics evaluation through `RobotTorque`. The current model supports biased Coulomb friction; viscous friction is not supported.
|
|
26
|
+
- [Rust] Added `Path::from_evaluator` as a compatibility constructor for third-order path evaluators.
|
|
27
|
+
- [C] Added the initial C API surface, including core types, path and robot bindings, formulation helpers, solver entry points, generated headers, and C integration tests.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- [Rust] Changed `ClarabelOptionsBuilder` defaults to accept Clarabel `AlmostSolved` status by default, aligning the Rust solver policy with the intended production-friendly default.
|
|
32
|
+
- [Rust] Made the `Robot::with_*` and `Constraints::with_*` builder APIs chainable.
|
|
33
|
+
|
|
34
|
+
## [0.1.0] - Initial Release
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- [Rust] Initial Rust implementation of convex-objective path parameterization primitives and solvers.
|