Skip to content

Modernize for PyPI: package rename, CI/CD, uv examples - #9

Merged
wernerpe merged 69 commits into
mainfrom
pypi
Mar 19, 2026
Merged

Modernize for PyPI: package rename, CI/CD, uv examples#9
wernerpe merged 69 commits into
mainfrom
pypi

Conversation

@wernerpe

Copy link
Copy Markdown
Owner

Summary

  • Reorganize source files by function (pybind, geometry, planning, plant, utils)
  • Rename package pycsdecompcsdecomp (import name matches PyPI distribution)
  • Add CI workflow (lint + build on every push) and wheel build workflow (Python 3.10/3.11/3.12, manylinux_2_28)
  • Modernize examples: Poetry → uv, add Bazel test targets so bazel test //... covers everything
  • Fix bug in plan_DRM.py (missing plant_context argument)
  • Clean up stale files, update all documentation

Test plan

  • bazel test //... passes locally (44 tests including 3 new example tests)
  • CI green on pypi branch (lint + build)
  • Trigger build-wheels.yml after merge to verify wheel builds for all Python versions
  • Test wheel install + import csdecomp from built artifacts

🤖 Generated with Claude Code

wernerpe and others added 29 commits August 6, 2025 16:40
Restores numpy requirement and tools attribute that were removed in
commit 96a5e2f. These are needed for mypy stubgen to successfully
import and introspect the pybind11 module during stub generation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…d of list

Modified IntersectCompositeBezierCurveWithHPolyhedra to accept and return
std::unordered_map<int, std::vector<int>> instead of std::vector<std::vector<int>>.

This provides a more efficient sparse representation where only segments with
collisions are stored in the result map. The function now:

- Accepts hpoly_to_ignore as a map from segment indices to obstacle indices
- Returns a map containing only segments that have collisions
- Validates segment indices in the input map
- Uses critical section for thread-safe map updates in parallel mode

Updated tests and pybind documentation to reflect the new dict-based API.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Moves source from csdecomp/src/cpp/ and csdecomp/src/cuda/ into four
functional folders: utils/, geometry/, plant/, and planning/. Updates
all #include paths to use folder-prefixed form (e.g. "geometry/hpolyhedron.h"),
rewrites BUILD files, redistributes tests to co-locate with their modules,
and updates pybind bindings. All 39 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Already in .gitignore, no longer needs to be in the repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename pybind directory and Python package to csdecomp
- Users now `import csdecomp as csd` (was `import pycsdecomp`)
- Update wheel: manylinux_2_28 platform tag, version 0.1.0
- Add GitHub Actions CI workflow (build + lint, no GPU needed)
- Add wheel build workflow (Python 3.10/3.11/3.12 x CUDA 12.6)
- Update README with pip install instructions
- Add VERSION file

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
rules_python refuses to run hermetic Python as root.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch wheel build to quay.io/pypa/manylinux_2_28_x86_64 for
  glibc compatibility
- Fix genrule stub generation to use $(execpath) for tools
- Add gcc-12/g++-12 symlinks for Bazel toolchain detection
- Verified end-to-end: build, auditwheel repair, import all work

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Poetry pyproject.toml with uv-compatible project config
- Rename all pycsdecomp imports to csdecomp across examples and notebooks
- Fix bug in plan_DRM.py: add missing plant_context arg to convert_drake_plant_to_csd_plant
- Add test_eizo.py and test_drake_bridge.py (extracted from notebooks)
- Add examples/BUILD with py_test targets so bazel test //... covers examples
- Add dev_install.sh helper for building and installing local wheel
- Update README with user (uv sync) and developer (dev_install.sh) workflows
- Add examples lint tests to CI workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ADME

- Fix automodule directive in index.rst (pycsdecomp -> csdecomp)
- Update mainpage.dox: PyPI install instructions, correct paths, Python 3.10-3.12
- Clean up README: consistent heading levels, streamlined examples/dev sections
- Remove stale Miscellaneous section, replace with concise Useful Commands
- Fix old paths in .claude/settings.local.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tree

Resolve merge conflicts from new features added to main in old directory
structure. Fix duplicate files (keep geometry/ versions of
distance_aabb_linesegment and linesegment_aabb_checker, remove plant/ copies).
Fix include paths in cpp_utils_bindings.h.

New features from main:
- cuda_edit_regions (planning)
- distance_aabb_linesegment, linesegment_aabb_checker (geometry)
- BezierCurve and PointsInAABBs Python bindings
- kinova_mintime_planning example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@wernerpe
wernerpe merged commit 7275513 into main Mar 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant