Skip to content

Commit 12022b5

Browse files
holosoma core: convert to pyproject-only + uv_build backend + README (#149)
Converting holosoma core to use `uv-build` backend and pyproject.toml for metadata, including uploading the README.md properly.
1 parent b954d94 commit 12022b5

8 files changed

Lines changed: 51 additions & 32 deletions

File tree

src/holosoma/MANIFEST.in

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/holosoma/holosoma/bridge/base/basic_sdk2py_bridge.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ def _get_base_odometry(self):
347347
yaw_speed = float(ang_vel_body[2].item())
348348
return position, quat_wxyz, lin, yaw_speed
349349

350+
@abstractmethod
350351
def publish_odom(self):
351352
"""Publish base odometry over the SDK. Default no-op.
352353
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Configuration value presets for holosoma tasks and robots."""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Whole-body-tracking configuration value presets."""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Task environments for holosoma (locomotion, whole-body tracking, base task)."""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""IsaacSim simulator backend for holosoma."""

src/holosoma/pyproject.toml

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
[build-system]
2-
requires = ["setuptools>=45", "wheel"]
3-
build-backend = "setuptools.build_meta"
2+
requires = ["uv_build>=0.9.9,<0.10"]
3+
build-backend = "uv_build"
44

55
[project]
66
name = "holosoma"
77
version = "0.0.1"
8+
description = "Holosoma: core training framework for humanoid robot reinforcement learning (locomotion + whole-body tracking)."
9+
readme = "README.md"
810
requires-python = ">=3.8"
11+
authors = [{ name = "Amazon FAR Team" }]
12+
license = { text = "Apache-2.0" }
13+
keywords = ["humanoid", "robotics", "reinforcement-learning", "locomotion", "whole-body-tracking", "sim2real"]
14+
classifiers = [
15+
"Programming Language :: Python :: 3",
16+
"License :: OSI Approved :: Apache Software License",
17+
"Operating System :: POSIX :: Linux",
18+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
19+
"Intended Audience :: Developers",
20+
"Intended Audience :: Science/Research",
21+
]
922
dependencies = [
1023
"astor",
1124
"easydict",
@@ -55,17 +68,43 @@ dependencies = [
5568
"zmq",
5669
]
5770

58-
59-
# Mark optional-dependencies as dynamic since it needs runtime computation
60-
dynamic = ["optional-dependencies"]
71+
[project.optional-dependencies]
72+
# Robot SDKs are published to PyPI (FAR forks). The import names are unchanged
73+
# (`unitree_interface`, `booster_robotics_sdk`) — only the distribution names
74+
# differ from the historical GitHub-release wheels. Previously computed
75+
# dynamically in setup.py; now static since the versions are fixed pins.
76+
unitree = ["far-unitree-sdk==0.1.6"]
77+
booster = ["far-booster-sdk==0.1.1"]
78+
# ROS2 example plugins (clock_publish, gantry_control). rclpy and the ROS message
79+
# packages ship with a ROS2 distro / RoboStack, not PyPI, so this extra is a
80+
# marker/opt-in rather than a pip-installable set — install rclpy from your ROS
81+
# environment. The plugins import rclpy lazily, so core stays ROS-free without it.
82+
ros2 = []
6183

6284
[project.entry-points."holosoma.bridge"]
6385
unitree = "holosoma.bridge.unitree.unitree_sdk2py_bridge:UnitreeSdk2Bridge"
6486
unitree_mp = "holosoma.bridge.unitree.unitree_sdk2py_bridge_mp:UnitreeMpSdk2Bridge"
6587
booster = "holosoma.bridge.booster.booster_sdk2py_bridge:BoosterSdk2Bridge"
6688

67-
[tool.setuptools.packages.find]
68-
where = ["."]
89+
# uv_build packaging. FLAT layout (the holosoma/ module lives at the project
90+
# root, not under src/), so module-root = "". Only the holosoma module ships —
91+
# the tests/ tree is intentionally excluded from the distribution (the old
92+
# setuptools find_packages(where=".") shipped it as a top-level `tests` package,
93+
# which name-squats the global import; excluding it is the correct behavior).
94+
[tool.uv.build-backend]
95+
module-name = "holosoma"
96+
module-root = ""
97+
# Ship non-.py package data bundled inside holosoma/ (asset meshes, robot
98+
# descriptions, configs, motion clips) plus the py.typed marker. Mirrors the
99+
# old MANIFEST.in recursive-includes + package_data py.typed.
100+
source-include = [
101+
"holosoma/py.typed",
102+
"holosoma/**/*.STL",
103+
"holosoma/**/*.urdf",
104+
"holosoma/**/*.yaml",
105+
"holosoma/**/*.npz",
106+
"holosoma/**/*.obj",
107+
]
69108

70109
[tool.pytest.ini_options]
71110
markers = [

src/holosoma/setup.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)