diff --git a/pyproject.toml b/pyproject.toml index b355f40b..e34ec420 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ requires-python = ">=3.10" dependencies = [ "numpy>=2.2.5", "scipy>=1.15.3, <2.0.0", - "reachy_mini_motor_controller>=1.3.0", + "reachy_mini_motor_controller>=1.3.0", "eclipse-zenoh>=1.4.0", "opencv-python<=5.0", "cv2_enumerate_cameras>=1.2.1", @@ -23,7 +23,7 @@ dependencies = [ "pyserial", "huggingface-hub==0.34.4", "sounddevice==0.5.1", - "soundfile==0.13.1", + "soundfile==0.13.1", "reachy-mini-rust-kinematics>=1.0.1", "asgiref", "aiohttp", @@ -31,14 +31,15 @@ dependencies = [ "pyusb>=1.2.1", "libusb_package>=1.0.26.3", "pip>=25", + "rerun-sdk==0.27.1", ] [project.optional-dependencies] dev = [ - "pytest", + "pytest", "pytest-asyncio", - "ruff==0.12.0", + "ruff==0.12.0", "onshape-to-robot==1.7.6", "mujoco==3.3.0", "placo==0.9.14", @@ -57,11 +58,7 @@ rerun = [ # See https://github.com/rerun-io/rerun-loader-python-example-urdf/issues/12 # "rerun-loader-urdf @ git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git", ] -wireless-version = [ - "semver>=3,<4", - "nmcli>=1.5", - "pollen_BMI088_imu_library" -] +wireless-version = ["semver>=3,<4", "nmcli>=1.5", "pollen_BMI088_imu_library"] [project.scripts] reachy-mini-daemon = "reachy_mini.daemon.app.main:main" @@ -109,4 +106,3 @@ python_version = "3.10" files = ["src/"] ignore_missing_imports = true strict = true - diff --git a/src/reachy_mini/daemon/backend/mujoco/backend.py b/src/reachy_mini/daemon/backend/mujoco/backend.py index aba69eaa..e27949d9 100644 --- a/src/reachy_mini/daemon/backend/mujoco/backend.py +++ b/src/reachy_mini/daemon/backend/mujoco/backend.py @@ -182,6 +182,11 @@ def run(self) -> None: self.current_antenna_joint_positions = ( self.get_present_antenna_joint_positions() ) + # Update the Placo kinematics model to recompute passive joints + self.update_head_kinematics_model( + self.current_head_joint_positions, + self.current_antenna_joint_positions, + ) self.current_head_pose = self.get_mj_present_head_pose() # Update the target head joint positions from IK if necessary diff --git a/src/reachy_mini/kinematics/placo_kinematics.py b/src/reachy_mini/kinematics/placo_kinematics.py index 01896d90..a4dc3887 100644 --- a/src/reachy_mini/kinematics/placo_kinematics.py +++ b/src/reachy_mini/kinematics/placo_kinematics.py @@ -11,6 +11,8 @@ import pinocchio as pin import placo +from scipy.spatial.transform import Rotation as R + class PlacoKinematics: """Placo Kinematics class for Reachy Mini. @@ -269,8 +271,8 @@ def _pose_distance( float: The Euler distance between the two poses. """ - euler1 = pin.rpy.matrixToRpy(pose1[:3, :3]) - euler2 = pin.rpy.matrixToRpy(pose2[:3, :3]) + euler1 = R.from_matrix(pose1[:3, :3]).as_euler("xyz") + euler2 = R.from_matrix(pose2[:3, :3]).as_euler("xyz") p1 = pose1[:3, 3] p2 = pose2[:3, 3] return float(np.linalg.norm(euler1 - euler2)), float(np.linalg.norm(p1 - p2)) diff --git a/src/reachy_mini/utils/rerun.py b/src/reachy_mini/utils/rerun.py index 7e79e3f7..eeab8e7b 100644 --- a/src/reachy_mini/utils/rerun.py +++ b/src/reachy_mini/utils/rerun.py @@ -12,21 +12,12 @@ import tempfile import time from threading import Event, Thread -from typing import List, Optional +from typing import Dict, List, Optional -import cv2 import numpy as np import requests import rerun as rr - -try: - from rerun_loader_urdf import URDFLogger -except ImportError: - raise ImportError( - "The 'rerun-loader-urdf' package is required for this module. " - "Please install it from the GitHub repository: " - "pip install git+https://github.com/rerun-io/rerun-loader-python-example-urdf.git" - ) +from scipy.spatial.transform import Rotation as R from urdf_parser_py import urdf from reachy_mini.kinematics.placo_kinematics import PlacoKinematics @@ -66,7 +57,7 @@ def __init__( script_dir = os.path.dirname(os.path.abspath(__file__)) urdf_path = os.path.join( - script_dir, "../descriptions/reachy_mini/urdf/robot.urdf" + script_dir, "../descriptions/reachy_mini/urdf/robot_no_collision.urdf" ) asset_path = os.path.join(script_dir, "../descriptions/reachy_mini/urdf") @@ -77,8 +68,22 @@ def __init__( self.head_kinematics = PlacoKinematics(fixed_urdf) - self.urdf_logger = URDFLogger(fixed_urdf, "ReachyMini") - self.urdf_logger.log(recording=self.recording) + self.urdf_model = urdf.URDF.from_xml_file(fixed_urdf) + self._joints_by_name: Dict[str, urdf.Joint] = { + joint.name: joint for joint in self.urdf_model.joints + } + self._entity_paths = UrdfEntityPaths(self.urdf_model, "ReachyMini") + + rr.set_time("reachymini", timestamp=time.time(), recording=self.recording) + + # Use the native URDF loader in Rerun to visualize Reachy Mini's model + # Logging as non-static to allow updating joint positions + rr.log_file_from_path( + fixed_urdf, + static=False, + entity_path_prefix=self._entity_paths.prefix, + recording=self.recording, + ) self.running = Event() self.thread_log_camera: Optional[Thread] = None @@ -110,23 +115,13 @@ def stop(self) -> None: self.running.set() def _get_joint(self, joint_name: str) -> urdf.Joint: - for j in self.urdf_logger.urdf.joints: - if j.name == joint_name: - return j - raise RuntimeError("Invalid joint name") + try: + return self._joints_by_name[joint_name] + except KeyError as exc: + raise RuntimeError(f"Invalid joint name: {joint_name}") from exc - def _set_rod_rotation( - self, - joint_rot: float, - joint: urdf.Joint, - joint_path: str, - urdf_offset: List[float], - id_rotation: int, - ) -> None: - urdf_offset[id_rotation] += joint_rot - joint.origin.rotation = urdf_offset - - self.urdf_logger.log_joint(joint_path, joint=joint, recording=self.recording) + def _joint_entity_path(self, joint: urdf.Joint) -> str: + return self._entity_paths.joint_paths[joint.name] def log_camera(self) -> None: """Log the camera image to Rerun.""" @@ -146,8 +141,6 @@ def log_camera(self) -> None: ) return - cam_name = self._get_joint("camera_optical_frame") - cam_joint = self.urdf_logger.joint_entity_path(cam_name) else: return @@ -159,15 +152,10 @@ def log_camera(self) -> None: ] ) - # camera optical frame from URDF - cam_name.origin.rotation = [2.92045, 1.01151, 1.9102] - cam_name.origin.position = [-0.0321159, -0.05047, 0.00257878] - self.urdf_logger.log_joint( - cam_joint, joint=cam_name, recording=self.recording - ) - + cam_joint = self._get_joint("camera_optical_frame") + cam_path = self._joint_entity_path(cam_joint) rr.log( - f"{cam_joint}/image", + f"{cam_path}/image", rr.Pinhole( image_from_camera=rr.datatypes.Mat3x3(K), width=frame.shape[1], @@ -175,90 +163,45 @@ def log_camera(self) -> None: image_plane_distance=0.8, camera_xyz=rr.ViewCoordinates.RDF, ), + rr.Image(frame, color_model="bgr").compress(), + recording=self.recording, ) - ret, encoded_image = cv2.imencode(".jpg", frame) - if ret: - rr.log( - f"{cam_joint}/image", - rr.EncodedImage(contents=encoded_image, media_type="image/jpeg"), - ) - else: - self.logger.error("Failed to encode frame to JPEG.") + time.sleep(0.03) # ~30fps + + def _log_joint_angle( + self, + joint_name: str, + angle: float, + axis: list[float] | None = None, + ) -> None: + """Log the joint angle to Rerun.""" + joint = self._get_joint(joint_name) + joint_path = self._joint_entity_path(joint) + + base_euler = joint.origin.rotation or [0.0, 0.0, 0.0] + + # if we specify an axis override, use it; otherwise, use the joint's defined axis + effective_axis = ( + np.array(axis) + if axis is not None + else np.array(joint.axis or [1.0, 0.0, 0.0]) + ) - time.sleep(0.3) # ~30fps + target_euler = np.array(base_euler) + (effective_axis * angle) + target_translation = joint.origin.xyz or [0.0, 0.0, 0.0] + + rr.log( + joint_path, + rr.Transform3D( + translation=target_translation, + quaternion=R.from_euler("xyz", target_euler).as_quat(), + ), + recording=self.recording, + ) def log_movements(self) -> None: """Log the movement data to Rerun.""" - antenna_left = self._get_joint("left_antenna") - antenna_left_joint = self.urdf_logger.joint_entity_path(antenna_left) - antenna_right = self._get_joint("right_antenna") - antenna_right_joint = self.urdf_logger.joint_entity_path(antenna_right) - - motor_1 = self._get_joint("stewart_1") - motor_1_joint = self.urdf_logger.joint_entity_path(motor_1) - motor_2 = self._get_joint("stewart_2") - motor_2_joint = self.urdf_logger.joint_entity_path(motor_2) - motor_3 = self._get_joint("stewart_3") - motor_3_joint = self.urdf_logger.joint_entity_path(motor_3) - motor_4 = self._get_joint("stewart_4") - motor_4_joint = self.urdf_logger.joint_entity_path(motor_4) - motor_5 = self._get_joint("stewart_5") - motor_5_joint = self.urdf_logger.joint_entity_path(motor_5) - motor_6 = self._get_joint("stewart_6") - motor_6_joint = self.urdf_logger.joint_entity_path(motor_6) - motor_yaw = self._get_joint("yaw_body") - motor_yaw_joint = self.urdf_logger.joint_entity_path(motor_yaw) - - passive_1_x = self._get_joint("passive_1_x") - passive_1_x_joint = self.urdf_logger.joint_entity_path(passive_1_x) - passive_1_y = self._get_joint("passive_1_y") - passive_1_y_joint = self.urdf_logger.joint_entity_path(passive_1_y) - passive_1_z = self._get_joint("passive_1_z") - passive_1_z_joint = self.urdf_logger.joint_entity_path(passive_1_z) - - passive_2_x = self._get_joint("passive_2_x") - passive_2_x_joint = self.urdf_logger.joint_entity_path(passive_2_x) - passive_2_y = self._get_joint("passive_2_y") - passive_2_y_joint = self.urdf_logger.joint_entity_path(passive_2_y) - passive_2_z = self._get_joint("passive_2_z") - passive_2_z_joint = self.urdf_logger.joint_entity_path(passive_2_z) - - passive_3_x = self._get_joint("passive_3_x") - passive_3_x_joint = self.urdf_logger.joint_entity_path(passive_3_x) - passive_3_y = self._get_joint("passive_3_y") - passive_3_y_joint = self.urdf_logger.joint_entity_path(passive_3_y) - passive_3_z = self._get_joint("passive_3_z") - passive_3_z_joint = self.urdf_logger.joint_entity_path(passive_3_z) - - passive_4_x = self._get_joint("passive_4_x") - passive_4_x_joint = self.urdf_logger.joint_entity_path(passive_4_x) - passive_4_y = self._get_joint("passive_4_y") - passive_4_y_joint = self.urdf_logger.joint_entity_path(passive_4_y) - passive_4_z = self._get_joint("passive_4_z") - passive_4_z_joint = self.urdf_logger.joint_entity_path(passive_4_z) - - passive_5_x = self._get_joint("passive_5_x") - passive_5_x_joint = self.urdf_logger.joint_entity_path(passive_5_x) - passive_5_y = self._get_joint("passive_5_y") - passive_5_y_joint = self.urdf_logger.joint_entity_path(passive_5_y) - passive_5_z = self._get_joint("passive_5_z") - passive_5_z_joint = self.urdf_logger.joint_entity_path(passive_5_z) - - passive_6_x = self._get_joint("passive_6_x") - passive_6_x_joint = self.urdf_logger.joint_entity_path(passive_6_x) - passive_6_y = self._get_joint("passive_6_y") - passive_6_y_joint = self.urdf_logger.joint_entity_path(passive_6_y) - passive_6_z = self._get_joint("passive_6_z") - passive_6_z_joint = self.urdf_logger.joint_entity_path(passive_6_z) - - passive_7_x = self._get_joint("passive_7_x") - passive_7_x_joint = self.urdf_logger.joint_entity_path(passive_7_x) - passive_7_y = self._get_joint("passive_7_y") - passive_7_y_joint = self.urdf_logger.joint_entity_path(passive_7_y) - passive_7_z = self._get_joint("passive_7_z") - passive_7_z_joint = self.urdf_logger.joint_entity_path(passive_7_z) - url = f"http://{self._robot_ip}:8000/api/state/full" params = { @@ -292,255 +235,86 @@ def log_movements(self) -> None: rr.set_time("reachymini", timestamp=time.time(), recording=self.recording) - # hardcoded offsets are from the URDF file if "antennas_position" in data and data["antennas_position"] is not None: antennas = data["antennas_position"] if antennas is not None: - antenna_left.origin.rotation = [ - 2.93649, - 0.508471, - 2.10225 + antennas[0], - ] - self.urdf_logger.log_joint( - antenna_left_joint, - joint=antenna_left, - recording=self.recording, - ) - antenna_right.origin.rotation = [ - 1.63922, - 1.39152 + antennas[1], - 0.701924, - ] - self.urdf_logger.log_joint( - antenna_right_joint, - joint=antenna_right, - recording=self.recording, - ) + self._log_joint_angle("left_antenna", antennas[0]) + self._log_joint_angle("right_antenna", antennas[1]) + if "head_joints" in data and data["head_joints"] is not None: head_joints = data["head_joints"] - motor_1.origin.rotation = [ - 1.5708, - 5.91241e-14 - head_joints[1], - 1.0472, - ] - self.urdf_logger.log_joint( - motor_1_joint, joint=motor_1, recording=self.recording - ) - motor_2.origin.rotation = [ - -1.5708, - 1.47282e-13 + head_joints[2], - -2.0944, - ] - self.urdf_logger.log_joint( - motor_2_joint, joint=motor_2, recording=self.recording - ) - - motor_3.origin.rotation = [ - 1.5708, - 5.72146e-14 - head_joints[3], - 3.14159, - ] - self.urdf_logger.log_joint( - motor_3_joint, joint=motor_3, recording=self.recording - ) - motor_4.origin.rotation = [ - -1.5708, - -7.49452e-14 + head_joints[4], - 3.47181e-14, - ] - self.urdf_logger.log_joint( - motor_4_joint, joint=motor_4, recording=self.recording - ) - motor_5.origin.rotation = [ - 1.5708, - -1.79054e-13 - head_joints[5], - -1.0472, - ] - self.urdf_logger.log_joint( - motor_5_joint, joint=motor_5, recording=self.recording - ) - motor_6.origin.rotation = [ - -1.5708, - -5.32144e-14 + head_joints[6], - 2.0944, - ] - self.urdf_logger.log_joint( - motor_6_joint, joint=motor_6, recording=self.recording - ) - - motor_yaw.origin.rotation = [ - -3.74039e-16, - 1.77636e-15, - 1.5708 - head_joints[0], - ] - self.urdf_logger.log_joint( - motor_yaw_joint, joint=motor_yaw, recording=self.recording - ) + # The joint axis definitions in the URDF do not match the real axis of rotation + # due to URDF not supporting ball joints properly. + self._log_joint_angle("yaw_body", -head_joints[0], axis=[0, 0, 1]) + self._log_joint_angle("stewart_1", -head_joints[1], axis=[0, 1, 0]) + self._log_joint_angle("stewart_2", head_joints[2], axis=[0, 1, 0]) + self._log_joint_angle("stewart_3", -head_joints[3], axis=[0, 1, 0]) + self._log_joint_angle("stewart_4", head_joints[4], axis=[0, 1, 0]) + self._log_joint_angle("stewart_5", -head_joints[5], axis=[0, 1, 0]) + self._log_joint_angle("stewart_6", head_joints[6], axis=[0, 1, 0]) if "passive_joints" in data and data["passive_joints"] is not None: passive_joints = data["passive_joints"] - self._set_rod_rotation( - passive_joints[0], # "passive_1_x", - passive_1_x, - passive_1_x_joint, - [-0.13754, -0.0882156, 2.10349], - 0, - ) - self._set_rod_rotation( - passive_joints[1], # "passive_1_y", - passive_1_y, - passive_1_y_joint, - [-4.80812e-17, 3.69195e-17, -3.11194e-17], - 1, - ) - self._set_rod_rotation( - passive_joints[2], # "passive_1_z", - passive_1_z, - passive_1_z_joint, - [-4.80812e-17, 3.69195e-17, -3.11194e-17], - 2, - ) - - self._set_rod_rotation( - passive_joints[3], # "passive_2_x", - passive_2_x, - passive_2_x_joint, - [-3.14159, 5.37396e-16, -3.14159], - 0, - ) - self._set_rod_rotation( - passive_joints[4], # "passive_2_y", - passive_2_y, - passive_2_y_joint, - [-4.29816e-30, 7.32263e-17, -8.42229e-30], - 1, - ) - self._set_rod_rotation( - passive_joints[5], # "passive_2_z", - passive_2_z, - passive_2_z_joint, - [-4.29816e-30, 7.32263e-17, -8.42229e-30], - 2, - ) + for axis_idx, axis in enumerate(["x", "y", "z"]): + for i in range(1, 8): + joint_name = f"passive_{i}_{axis}" + value_index = (i - 1) * 3 + axis_idx - self._set_rod_rotation( - passive_joints[6], # "passive_3_x", - passive_3_x, - passive_3_x_joint, - [0.373569, 0.0882156, -1.0381], - 0, - ) - self._set_rod_rotation( - passive_joints[7], # "passive_3_y", - passive_3_y, - passive_3_y_joint, - [-4.71809e-17, -7.61919e-18, 5.54539e-17], - 1, - ) - self._set_rod_rotation( - passive_joints[8], # "passive_3_z", - passive_3_z, - passive_3_z_joint, - [-4.71809e-17, -7.61919e-18, 5.54539e-17], - 2, - ) - - self._set_rod_rotation( - passive_joints[9], # "passive_4_x", - passive_4_x, - passive_4_x_joint, - [-0.0860846, 0.0882156, 1.0381], - 0, - ) - - self._set_rod_rotation( - passive_joints[10], # "passive_4_y", - passive_4_y, - passive_4_y_joint, - [-3.54762e-18, 2.76754e-18, -1.40989e-17], - 1, - ) + override_axis = [0.0, 0.0, 0.0] + override_axis[axis_idx] = 1.0 + self._log_joint_angle( + joint_name, + passive_joints[value_index], + axis=override_axis, + ) - self._set_rod_rotation( - passive_joints[11], # "passive_4_z", - passive_4_z, - passive_4_z_joint, - [-3.54762e-18, 2.76754e-18, -1.40989e-17], - 2, - ) + time.sleep(0.1) - self._set_rod_rotation( - passive_joints[12], # "passive_5_x", - passive_5_x, - passive_5_x_joint, - [0.123977, 0.0882156, -1.0381], - 0, - ) - self._set_rod_rotation( - passive_joints[13], # "passive_5_y", - passive_5_y, - passive_5_y_joint, - [-1.10888e-16, -3.21444e-17, 3.55033e-17], - 1, - ) +class UrdfEntityPaths: + """Helper for constructing link/joint entity paths that match the native URDF logger.""" - self._set_rod_rotation( - passive_joints[14], # "passive_5_z", - passive_5_z, - passive_5_z_joint, - [-1.10888e-16, -3.21444e-17, 3.55033e-17], - 2, - ) + def __init__(self, model: urdf.URDF, entity_path_prefix: Optional[str]) -> None: + """Construct a new `UrdfEntityPaths` instance. - self._set_rod_rotation( - passive_joints[15], # "passive_6_x", - passive_6_x, - passive_6_x_joint, - [3.0613, 0.0882156, 1.0381], - 0, - ) - - self._set_rod_rotation( - passive_joints[16], # "passive_6_y", - passive_6_y, - passive_6_y_joint, - [-7.27418e-17, 2.10388e-17, 4.15523e-17], - 1, - ) + Args: + model (urdf.URDF): The URDF model. + entity_path_prefix (Optional[str]): The prefix for entity paths. - self._set_rod_rotation( - passive_joints[17], # "passive_6_z", - passive_6_z, - passive_6_z_joint, - [-7.27418e-17, 2.10388e-17, 4.15523e-17], - 2, - ) + """ + self._model = model + self.prefix = entity_path_prefix + self.link_paths: Dict[str, str] = {} + self.joint_paths: Dict[str, str] = {} - self._set_rod_rotation( - passive_joints[18], # "passive_7_x", - passive_7_x, - passive_7_x_joint, - [3.14159, 2.10388e-17, 4.15523e-17], - 0, - ) + base_parts = [part for part in (self.prefix, model.name) if part] + self._base_path = "/".join(base_parts) - self._set_rod_rotation( - passive_joints[19], # "passive_7_y", - passive_7_y, - passive_7_y_joint, - [-7.27418e-17, -2.10388e-17, -4.15523e-17], - 1, - ) + children_map: Dict[str, List[urdf.Joint]] = {} + for joint in model.joints: + children_map.setdefault(joint.parent, []).append(joint) - self._set_rod_rotation( - passive_joints[20], # "passive_7_z", - passive_7_z, - passive_7_z_joint, - [-7.27418e-17, -2.10388e-17, -4.15523e-17], - 2, - ) + root_link = model.get_root() + self._build_paths(root_link, self._base_path, children_map) - time.sleep(0.1) + def _build_paths( + self, + link_name: str, + parent_path: str, + children_map: Dict[str, List[urdf.Joint]], + ) -> None: + link_path = self._join(parent_path, link_name) + self.link_paths[link_name] = link_path + + for joint in children_map.get(link_name, []): + joint_path = self._join(link_path, joint.name) + self.joint_paths[joint.name] = joint_path + self._build_paths(joint.child, joint_path, children_map) + + @staticmethod + def _join(parent: str, child: str) -> str: + if parent: + return f"{parent}/{child}" + return child diff --git a/uv.lock b/uv.lock index 5ace589f..f0a357c5 100644 --- a/uv.lock +++ b/uv.lock @@ -2707,7 +2707,7 @@ wheels = [ [[package]] name = "reachy-mini" -version = "1.1.0rc2" +version = "1.1.0rc4" source = { editable = "." } dependencies = [ { name = "aiohttp" }, @@ -2727,6 +2727,7 @@ dependencies = [ { name = "pyusb" }, { name = "reachy-mini-motor-controller" }, { name = "reachy-mini-rust-kinematics" }, + { name = "rerun-sdk" }, { name = "scipy" }, { name = "sounddevice" }, { name = "soundfile" }, @@ -2803,8 +2804,9 @@ requires-dist = [ { name = "pytest", marker = "extra == 'dev'" }, { name = "pytest-asyncio", marker = "extra == 'dev'" }, { name = "pyusb", specifier = ">=1.2.1" }, - { name = "reachy-mini-motor-controller", specifier = ">=1.2.0" }, + { name = "reachy-mini-motor-controller", specifier = ">=1.3.0" }, { name = "reachy-mini-rust-kinematics", specifier = ">=1.0.1" }, + { name = "rerun-sdk", specifier = "==0.27.1" }, { name = "rerun-sdk", marker = "extra == 'rerun'", specifier = ">=0.23.4" }, { name = "ruff", marker = "extra == 'dev'", specifier = "==0.12.0" }, { name = "rustypot", marker = "extra == 'dev'", specifier = ">=1.3.0" }, @@ -2819,66 +2821,66 @@ provides-extras = ["dev", "examples", "mujoco", "nn-kinematics", "placo-kinemati [[package]] name = "reachy-mini-motor-controller" -version = "1.2.0" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/40/5c8a164151e4f5f65ddb3e7ab65f5132660f43dedfcf442c1e191b345991/reachy_mini_motor_controller-1.2.0.tar.gz", hash = "sha256:7de5da70bbc129df63f92eab4478f227533218c16aa12f73caad3377684cfa12", size = 26713, upload-time = "2025-10-30T02:57:47.604Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/ca/0615dab3885a8fb02612be91630e57d98dff3de90614e4a357a56db8a6fb/reachy_mini_motor_controller-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e2fd7e8de60939face3f35064bd8c5a2b9a62ba24fecdc8a65bf1930778d01dc", size = 579169, upload-time = "2025-10-30T02:57:18.273Z" }, - { url = "https://files.pythonhosted.org/packages/e5/95/ddec725e4d3805e2139681f2f893ca67b660e79b705169990f4e8327d7bf/reachy_mini_motor_controller-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81f0bccf333deb0d1f6f35c9d33a83d5716f0ea38f62438f76dce8683ecb3db7", size = 562721, upload-time = "2025-10-30T02:57:11.859Z" }, - { url = "https://files.pythonhosted.org/packages/1f/b2/a1f942f133c8ce5fdee9722c2a1cf3478c1a0d1943961ff622f2b442032f/reachy_mini_motor_controller-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de399575059f0d4f6ba7b02693708f7cc49e57f0c21e9d241f92a2862dc3a7af", size = 630432, upload-time = "2025-10-30T02:56:52.325Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e2/d737e921c188fa59e84dd49835d22f08d2e26c7600f0b479cebe1118f80c/reachy_mini_motor_controller-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:247b384d0ee33b2f0560a7cb2a0cdcfa7973cb9ee585e9dbc27fd29b1fd21745", size = 633804, upload-time = "2025-10-30T02:56:57.368Z" }, - { url = "https://files.pythonhosted.org/packages/f7/f2/302ab98dd5c2389d5a4d9eb052444f853cf5d26a669beeaeaf3f6ae55dbe/reachy_mini_motor_controller-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b15f018d1203b84a86c18e86b0c0231a5ac5280a25e45d862ca5cc0ee010ac37", size = 683713, upload-time = "2025-10-30T02:57:02.169Z" }, - { url = "https://files.pythonhosted.org/packages/ed/70/55c84fa255cb07b56feea7db7dd55b3d1c1ea302c4250cc9c6fdc44f29c0/reachy_mini_motor_controller-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97bef5d5d37b39c75305166faf14f93c06cd2844103e30cf13470d2516ec54d7", size = 645183, upload-time = "2025-10-30T02:57:07.379Z" }, - { url = "https://files.pythonhosted.org/packages/6e/b7/e0ab2cfe39dd7da954a3a1c55e97bed699d5aa3aa62fa062cd350afa1357/reachy_mini_motor_controller-1.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:979c8ea28e9d55e6792ee7adeceec7f426ab559cc1719482c4ab26b7de95056d", size = 812887, upload-time = "2025-10-30T02:57:23.444Z" }, - { url = "https://files.pythonhosted.org/packages/86/95/ae1d01d288ea42e94cf1177aa663cbe7a0846853a4d87257cd63bee4463b/reachy_mini_motor_controller-1.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:45e9a3c95399c011ffe26e321b7a0aa71b1692fa126c8dc37556c6c918997997", size = 897513, upload-time = "2025-10-30T02:57:28.911Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9f/2497fd72cdf71d2a662dd92a4c1802a88373904b292367ec9e1edf2479f7/reachy_mini_motor_controller-1.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7237a129b46a10872e4fd7ba5d4d7bd2f5f839bc704ff11620a725e079d1c2da", size = 842277, upload-time = "2025-10-30T02:57:34.788Z" }, - { url = "https://files.pythonhosted.org/packages/da/41/47720e29f0242a4fe6474354ee1cde6e79621b264b167b5f0799b71e3eb1/reachy_mini_motor_controller-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8d5a6fe86e8f898fea6dcbba09922ac49df4806f15443ff1db1c73662fb97f30", size = 804267, upload-time = "2025-10-30T02:57:41.255Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d0/59fec4de9bd6c85ba41ca795319b5dd2907df915e45bd07c7f9498411640/reachy_mini_motor_controller-1.2.0-cp310-cp310-win32.whl", hash = "sha256:40e8913b03e4982b3b3b289dd67100892c25780ef64acc156fee8e8c17632f28", size = 368951, upload-time = "2025-10-30T02:57:54.404Z" }, - { url = "https://files.pythonhosted.org/packages/a0/10/6d11916e4e3a5e5c9a97b4251e7a494ea72f45166ccb79dfad778d15e940/reachy_mini_motor_controller-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:879368da4364b288923cd96f48b7d5dee79d9584a99612b103e3558327cb939c", size = 385834, upload-time = "2025-10-30T02:57:49.43Z" }, - { url = "https://files.pythonhosted.org/packages/93/b7/658e631b4199ebe4764ee79f127bea4365df51b7e5fa1f67cb558ffd6036/reachy_mini_motor_controller-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9cc0ec97a71de6fb72e26190586b498e185158cd1fa345a294f9ff126f5eb4c3", size = 578825, upload-time = "2025-10-30T02:57:19.221Z" }, - { url = "https://files.pythonhosted.org/packages/2c/31/102c7deffb6d8be4bc552d0c8b405fbdf0003b6993a5d841ebf3ec33eea5/reachy_mini_motor_controller-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad0eeb87cc1ae339d5c1e7a28f0becf2ccc08bfd031a33d41d03997f3a8f8603", size = 562914, upload-time = "2025-10-30T02:57:13.167Z" }, - { url = "https://files.pythonhosted.org/packages/52/b0/52d5028650bb828c022cad7fedf57697d2e4f1fd472fed41cd7822a77c27/reachy_mini_motor_controller-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac6492386a6a2c5f0d7a76920596392af7d0fc60a5e1c76b6e40b977dc0eba1", size = 630672, upload-time = "2025-10-30T02:56:54.012Z" }, - { url = "https://files.pythonhosted.org/packages/74/03/b2aed2da5ae01efab5dccff6002a8bfc9462990159829bbae3aa63d803d6/reachy_mini_motor_controller-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa92705b13cab16d8c22dbc4eaf7eec4740519471ba8646959b23d100149f971", size = 634947, upload-time = "2025-10-30T02:56:58.538Z" }, - { url = "https://files.pythonhosted.org/packages/97/ab/bfe6c036a8e2ae7a0955ebddeb6d32b479effee7bde80252fcbcaf1dcd41/reachy_mini_motor_controller-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00da1fe5d0f4b5eb5c10c016539dc12c31cb7fdc020b903a19bce78c05bf3846", size = 684055, upload-time = "2025-10-30T02:57:03.239Z" }, - { url = "https://files.pythonhosted.org/packages/3f/29/19c2acb3fde5ca6da7c81f0821b9e9e9c5a35a398738cb360fea2663030e/reachy_mini_motor_controller-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c49f80c964f4be59d96dfbd6199b7ebe2e2f7d825f29d4cf0b2bea36e89a7294", size = 645958, upload-time = "2025-10-30T02:57:08.516Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ae/f085e348fb24679e3ae7cb0ecbfca959a5f0ff0c607706d45234b7905fe8/reachy_mini_motor_controller-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0bf2c56c2b997d43e5b845d7f7d1e8e87d16cec04b92bfea24961000e77b3f61", size = 812776, upload-time = "2025-10-30T02:57:24.572Z" }, - { url = "https://files.pythonhosted.org/packages/37/96/19581499c051332c97aa288f7b53a5509f3c39579155ba8fe8a8a8fcf0b4/reachy_mini_motor_controller-1.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9e3e975de9bc470ea739e2f51c19584d4d18a9f042b236335bb6835d61ae9dc9", size = 898225, upload-time = "2025-10-30T02:57:29.913Z" }, - { url = "https://files.pythonhosted.org/packages/5b/54/691f1d49c519d035d3d3b08e508f3629d9954b7bb796f87a9b39e22aa4b7/reachy_mini_motor_controller-1.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a98154d49aa3dbb73b3b9b2415fe74dd433904cd8cd10f9d4ebc7b7446d71ea7", size = 842063, upload-time = "2025-10-30T02:57:35.987Z" }, - { url = "https://files.pythonhosted.org/packages/b3/06/cde07c5d727e07f3259707a5486129def5c08eeaa415720273ee7d810926/reachy_mini_motor_controller-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:622796c09b4d4dabf236b23609657ca3fd2041373ec6d485c3ab7b036a08c02a", size = 805044, upload-time = "2025-10-30T02:57:42.672Z" }, - { url = "https://files.pythonhosted.org/packages/2e/c8/9817f6cbc4cb1f08ddfcdc19178517ed35e4e35b5f30f835c7d1ca0b1770/reachy_mini_motor_controller-1.2.0-cp311-cp311-win32.whl", hash = "sha256:cff9e454fe7018d2c1a32506746f6a8542575fe2150faa8bb0d194d38946f5da", size = 367948, upload-time = "2025-10-30T02:57:55.559Z" }, - { url = "https://files.pythonhosted.org/packages/63/a1/7fb991b7b50bfc6c546dca2c2d1413094e965eb690b713bb3f20dbdb420c/reachy_mini_motor_controller-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:80a258e800909450bad1a4e65b6c587e56171ed405d3f93f81baf3e25af1844c", size = 386088, upload-time = "2025-10-30T02:57:50.489Z" }, - { url = "https://files.pythonhosted.org/packages/03/b4/d7630b4961b67f958ac7c21cd81d39524b4e272b5f40c4d9d2291ab196c0/reachy_mini_motor_controller-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:73fe444c921d959b38d4258aa414d780214384e72c30204c0792122a23524491", size = 574634, upload-time = "2025-10-30T02:57:20.294Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c0/8e400c90cb9ca34d6700bca17e186d3df5315d71347e9fc35e4701c698df/reachy_mini_motor_controller-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7551702c0d4dcb32cc44c0bff50c3fed515184cecc88779d7f99357898e2d19", size = 555920, upload-time = "2025-10-30T02:57:14.777Z" }, - { url = "https://files.pythonhosted.org/packages/8f/ff/6ee82ad7696413681130c3908960d0478777ab3f9723c53a35d14297017a/reachy_mini_motor_controller-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f19c017df87c932bda146e20ed6319282c952dfcaa6acf493fd36214ee3e7377", size = 631298, upload-time = "2025-10-30T02:56:55.071Z" }, - { url = "https://files.pythonhosted.org/packages/44/72/5fde26f5265bc0a19759f3754635376b632c94b761ada16d6b3922799848/reachy_mini_motor_controller-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ac196d6e9b6915b3e12178b5be40f8dc309a1518f5c0e8495af47dbe31cdefa", size = 633071, upload-time = "2025-10-30T02:56:59.741Z" }, - { url = "https://files.pythonhosted.org/packages/e1/48/2fc6a1f5fdbe7c0dd43ab661b85e865d30c3909e433d01590b3c7f33c54d/reachy_mini_motor_controller-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8f1e42a71f37e44bc07d8a46ad96c695b472898fd88355f018990d8a02afb7", size = 682369, upload-time = "2025-10-30T02:57:04.986Z" }, - { url = "https://files.pythonhosted.org/packages/20/1a/b83b313a4ea03666aa09b200285b06ca2cbdc00f433e5f20b8243efd4864/reachy_mini_motor_controller-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c87fb13bf7801d7557a699608c56c70737411daab53d97e27e0a42ca1f3071e3", size = 647955, upload-time = "2025-10-30T02:57:09.571Z" }, - { url = "https://files.pythonhosted.org/packages/81/a1/40dd40a55149da9c81f09ffc1c6925a290126e11d013e8ff6ef23f57e90f/reachy_mini_motor_controller-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0985f34f0e4b07d6c69e9cdd4efc0ff49bffc12fba581a4007d3455fd42625e8", size = 813224, upload-time = "2025-10-30T02:57:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/a0/aa/92685cb843aa34f46e9326e59b975200b78d3ad5898887b24a56d0dc02f5/reachy_mini_motor_controller-1.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b2b25fc88f037cc1621e6592878a910abbe72b2d1eeb0a806b6a18146d4df42d", size = 897013, upload-time = "2025-10-30T02:57:31.01Z" }, - { url = "https://files.pythonhosted.org/packages/df/81/2428d562bb8ddc6c3c3dd08877ead26806105eda240bba8317709d209cba/reachy_mini_motor_controller-1.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde0e2804a61ee803b8583f08d304c56226efa687ffa4249e207d7203e8b725f", size = 841726, upload-time = "2025-10-30T02:57:37.442Z" }, - { url = "https://files.pythonhosted.org/packages/a6/83/9599785e4a59e1b315ce58e6824150cf23553ea991b7b9430c266e47a06c/reachy_mini_motor_controller-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1b2e78db88468271fb764fecea782fc042c4d4f9dba0b2e2c7e982b561341379", size = 805955, upload-time = "2025-10-30T02:57:43.776Z" }, - { url = "https://files.pythonhosted.org/packages/14/ff/656a4d82e1e18681810c1579c085ed453aad9a50645ed8dcfa4189b23e8b/reachy_mini_motor_controller-1.2.0-cp312-cp312-win32.whl", hash = "sha256:3aab10d69163c85d35adf24ab43d48b958fc98b5db02f85d76532a72794ef39a", size = 366565, upload-time = "2025-10-30T02:57:56.834Z" }, - { url = "https://files.pythonhosted.org/packages/59/9c/2f11d0e235bc901c1efaa32d7910a075b014c324d2a1da29a4dfcb3c639d/reachy_mini_motor_controller-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:51f1d468df8bf7f759b115e1ece01eda9c071e0f563849644df923711a5ec2ff", size = 387773, upload-time = "2025-10-30T02:57:51.487Z" }, - { url = "https://files.pythonhosted.org/packages/a8/7a/20ef5c6936c4fe97e722de381665a32ffe1d0bb8619025b24ce93a14eca9/reachy_mini_motor_controller-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7bbef03a97b7165e02cb26663176653727b552c63f3d9b74e4d9e53754370e29", size = 574795, upload-time = "2025-10-30T02:57:21.327Z" }, - { url = "https://files.pythonhosted.org/packages/5a/b5/4fd623e4e10679ace97653f181ef1e88d50082a8b937d0d4975521aaa522/reachy_mini_motor_controller-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d9438b6005a97dc1458bc16b9c768634b488e9eaa4b58d3181d6d4a99ad1ce94", size = 555405, upload-time = "2025-10-30T02:57:16.016Z" }, - { url = "https://files.pythonhosted.org/packages/04/34/094c2429bfbf43fa138d9a8e3dc6e05c822675c8558e726631d7e7e95e34/reachy_mini_motor_controller-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0b4b023784fbbfb6bddba780a3cf867c8671eba51159b77ee6c540323052205", size = 629977, upload-time = "2025-10-30T02:56:56.317Z" }, - { url = "https://files.pythonhosted.org/packages/d2/09/b80d36c83739bcda082eb2b9ccbaa0051913f8d038cb46728941b5c8819d/reachy_mini_motor_controller-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e79c2eee8a7e0cbde1885e33d2d273b3a82c74966dfedaa1e4e7d829b8d6349", size = 632025, upload-time = "2025-10-30T02:57:01.083Z" }, - { url = "https://files.pythonhosted.org/packages/b8/16/abbf82a1770f447fc3004fe99b7a54f031309d7f87a460c35ef64368b30d/reachy_mini_motor_controller-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:092c35dcbd0740aec1bfa004cbd292f1b6f921e5b2dee75ef160c2567152299d", size = 682720, upload-time = "2025-10-30T02:57:06.003Z" }, - { url = "https://files.pythonhosted.org/packages/48/6f/1a229ff633e32b5c93f3f7757a8cc8e043a2807885c34e0cc2a9d630a9b9/reachy_mini_motor_controller-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c0b6bdf3e85ac37235586d4702355c90a70b22629a506639e68e3eabc37ed64", size = 646751, upload-time = "2025-10-30T02:57:10.566Z" }, - { url = "https://files.pythonhosted.org/packages/ac/26/d9cf852efa1030fcea79a0d861921311bdc54aedda78ff679584717ed87b/reachy_mini_motor_controller-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c1a993adc116a2915c97d84b47b0cabc0dc12a09eebff9e8769ccb3f24ba797e", size = 812064, upload-time = "2025-10-30T02:57:26.788Z" }, - { url = "https://files.pythonhosted.org/packages/39/4c/854025bce2631a8bb2eec51b1c6b32286151229a0f21af4db0bf8b62f359/reachy_mini_motor_controller-1.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:263ef0cbfb1add63c3fb4ea2e957c2b0b3286e77e0caedd5d966433ec2b65bfd", size = 896390, upload-time = "2025-10-30T02:57:32.081Z" }, - { url = "https://files.pythonhosted.org/packages/5d/34/18a9d62ebc848b775d359104a60ec4fcce11f9dc36e8ecb5e9165a638611/reachy_mini_motor_controller-1.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b16645f8ca0f12a140eeedec237a84897993f0388f78aebc766139e281a791bd", size = 842176, upload-time = "2025-10-30T02:57:38.499Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c6/5e113cb0858cdff4d4ad87a0e64848ba30bb6d3fec7a0c78f0378a026f92/reachy_mini_motor_controller-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fda5d2879a419d051a91cbce5075b4342b3b407f15dfa625def15559a0527397", size = 805515, upload-time = "2025-10-30T02:57:45.098Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f7/7217072a3e689900c810cf4b12368e9728bfa07d1e4cb0981c122aae589d/reachy_mini_motor_controller-1.2.0-cp313-cp313-win32.whl", hash = "sha256:cd6546ac64b81034a00279f1b344fd86339f1c222fbb9fe30d86f8006d7f7015", size = 366409, upload-time = "2025-10-30T02:57:58.069Z" }, - { url = "https://files.pythonhosted.org/packages/df/fe/b9f5d43035a6da82a90acfb66c0dc534fb72db89c5b1aee2eaa4510ccb94/reachy_mini_motor_controller-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:daff35de941f1ee70976daa9b0d472a70a37c15ea289716017e439e7b70a4088", size = 387601, upload-time = "2025-10-30T02:57:52.397Z" }, - { url = "https://files.pythonhosted.org/packages/7a/9d/81706a80c7da81315938a753085922e0393ae4924432424e4abde296e7fc/reachy_mini_motor_controller-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:17b0d314caa440a238f3c7115b8a503e6ee22e827f3c7468a6c49b7f9dd0ce92", size = 573181, upload-time = "2025-10-30T02:57:22.383Z" }, - { url = "https://files.pythonhosted.org/packages/f5/09/dec4a96263a40448c04f010ddae6578699e4c36e001ba0fdab1dccbad892/reachy_mini_motor_controller-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3fd316dad22a9e5bfcb928a4b3636e2c9f78a69cbde8e6318c9a1f92dc4459a3", size = 556518, upload-time = "2025-10-30T02:57:17.003Z" }, - { url = "https://files.pythonhosted.org/packages/33/2a/4e945affaa72129024fff369d5d3a2bb9a5fbf7629adc738e18ca4c14971/reachy_mini_motor_controller-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:951b51c32ef9f63d3a52d1b527e96643e68d64993ba6eaac4121c052cba08d01", size = 815067, upload-time = "2025-10-30T02:57:27.852Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d4/75b45fe19a7faea38edf1bdcbf680e910ea63736ec64f6bc1844091695ff/reachy_mini_motor_controller-1.2.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:189633eaada6beca9882c862c5da54bc43b463c844fdbf16b0699d1672667a4e", size = 896735, upload-time = "2025-10-30T02:57:33.471Z" }, - { url = "https://files.pythonhosted.org/packages/1b/b6/06b84ef3548c67c8c9c5a2e0680aaa21290f80b365ffbcc61bf3c952727b/reachy_mini_motor_controller-1.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:808dbe46104464b1abcc8d7ad18c55fdfc6b3f51b5eea427f4e4e49da97057eb", size = 841475, upload-time = "2025-10-30T02:57:39.808Z" }, - { url = "https://files.pythonhosted.org/packages/3c/43/72da46c9bd5716dc0e18f825745f1681d90de2b214456ef849405d9f27ae/reachy_mini_motor_controller-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:47d1e8e1d2bfb707329c856300728300c178358b188c3c20b4b145d82bb29d7e", size = 804342, upload-time = "2025-10-30T02:57:46.446Z" }, - { url = "https://files.pythonhosted.org/packages/37/e3/a15c401e8259989e400e19b6bfdffb839a42a67254fcd57a5f6faaa82039/reachy_mini_motor_controller-1.2.0-cp314-cp314-win32.whl", hash = "sha256:2029b888f7a70980b220da078f34953ce51f72ab8ed3dd75f855ffdea98fb535", size = 365911, upload-time = "2025-10-30T02:57:58.994Z" }, - { url = "https://files.pythonhosted.org/packages/34/29/1ef9145a14c5878d79a670b5dd66a000363f69741e276a8f0796f709d290/reachy_mini_motor_controller-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:7e651abaab4bda4b61b7e4f1d555ba582e29e739ab2c644d4a7e17bce5cd0af3", size = 386799, upload-time = "2025-10-30T02:57:53.34Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/89/24/161e686a3048520a207c529d76f258f71fecb104e060ab01fa2b66945bdb/reachy_mini_motor_controller-1.3.0.tar.gz", hash = "sha256:2c3560bbfb0a90f6dee52c74ae40171bdea203f40a22070d3439088bc1041fd0", size = 26930, upload-time = "2025-11-12T15:33:28.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/52/12dce6635762ab2414fcfc9f54417327cba2d21a13616a8836f71efc4e7c/reachy_mini_motor_controller-1.3.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:87009873b2dca0bd685a7c000992deacf6605e8c7c4a500a8230e31a3c0acae2", size = 582356, upload-time = "2025-11-12T15:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/ab/e2/59fe83dbabf0f79f2bddf2cea2c92e6228212bde16a682cc42128188a987/reachy_mini_motor_controller-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ef5f9899eda8278285e47715807e254958536f2a2b90d9f84cbfd9cbc1ab4e5", size = 561751, upload-time = "2025-11-12T15:32:53.848Z" }, + { url = "https://files.pythonhosted.org/packages/aa/25/c24f1fd2abb5c0e592ded9c4a49f1ede50ade03c01188a7fe138a4ecc8be/reachy_mini_motor_controller-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461dc0141fd09762cfac9e8b93df1203ed1eb5e8e9af4b4b4eff3e7952a896d5", size = 631399, upload-time = "2025-11-12T15:32:33.111Z" }, + { url = "https://files.pythonhosted.org/packages/09/81/a5da9d7dfb12df1251ba96211884e823d1a85afaf6bf4ed23ad14c480f73/reachy_mini_motor_controller-1.3.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d232eb582612db17675270fdd7f59b5639a30284bcaf4faf4ffbbb163b43681d", size = 635043, upload-time = "2025-11-12T15:32:39.895Z" }, + { url = "https://files.pythonhosted.org/packages/30/d2/1395ef9ff4262bc7ed07dad24268adca72f1bab8dd16a4fb38f8e303aa25/reachy_mini_motor_controller-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1862e84c96bfeca2ae4f3ccd5e6b5982f054418cd3ec5e931496eb646bdde663", size = 682993, upload-time = "2025-11-12T15:32:44.569Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/d38cda507d3c080efce73b6dfe8e6586d3cdb16cbbd4c6f0e851912c2680/reachy_mini_motor_controller-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100619d903dcd557836ebc5479f1cd4408a5f65a787bad9ce94e8723e82dc96", size = 646533, upload-time = "2025-11-12T15:32:49.123Z" }, + { url = "https://files.pythonhosted.org/packages/88/4c/acf35b85b6cdf936639b48300f4048c1c287c00375f9afdf4c38e6f98c6d/reachy_mini_motor_controller-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f49f4d03e9e6fafb97b5a184126320cb6fc5b61f72c2fbe8f890273313c04f13", size = 815196, upload-time = "2025-11-12T15:33:04.67Z" }, + { url = "https://files.pythonhosted.org/packages/45/cc/93667f6c968c81464519428132156af70b3371452ebf9504955d53a9b761/reachy_mini_motor_controller-1.3.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:06188ecf45579ededebc4312eacda2e8db6a4f1ab499b195d5a45d880587e7fa", size = 898006, upload-time = "2025-11-12T15:33:10.534Z" }, + { url = "https://files.pythonhosted.org/packages/3b/01/5b1dea376a1e32bf098e35312fa1b4e613d58ead9db340847f15658f54aa/reachy_mini_motor_controller-1.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:04ae1f8f19e7f65d274b8d893275249e754b9ed6a2089cfe51f3e5ae76e878fc", size = 840847, upload-time = "2025-11-12T15:33:16.532Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ad/25ed40de88743c652e1bbd37f90802b48a23f900467cd5734f24894ae3ad/reachy_mini_motor_controller-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2ea24cea55024d32d1b4b8b27bd20ddcd3a39357a539a0231f44ab5921e0e0a0", size = 804965, upload-time = "2025-11-12T15:33:22.597Z" }, + { url = "https://files.pythonhosted.org/packages/05/f1/f576149761f36a03dd79b09b81e94cc8d61fc6d57c48589724839cb09a88/reachy_mini_motor_controller-1.3.0-cp310-cp310-win32.whl", hash = "sha256:4295a2a855a0cf084503815a8c3db9c38e46f78142c92da236def111bf913c0e", size = 370318, upload-time = "2025-11-12T15:33:36.679Z" }, + { url = "https://files.pythonhosted.org/packages/59/46/51deeba88bc6c13e294a4fc2ba24af6602e8446204d6e36db09d348c98b7/reachy_mini_motor_controller-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:145db6ea146cceabd2da489eab442de725938e4d6edf40d3a66952d68cb7433c", size = 391919, upload-time = "2025-11-12T15:33:29.945Z" }, + { url = "https://files.pythonhosted.org/packages/71/81/7b9ac25a5a0dc29ac4f1d3886834ac0514ecb98c1c24bac9bc90a33833f6/reachy_mini_motor_controller-1.3.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:49d1db41bde58326211cc8d6d60eab74c27d5197b81495fb1c04cf87ee3f26c3", size = 581898, upload-time = "2025-11-12T15:33:00.31Z" }, + { url = "https://files.pythonhosted.org/packages/e1/57/45b70649aa98919b9bd40d88a0e386dd68319b66fa9a6e1d883db8f7eb1e/reachy_mini_motor_controller-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3da625470004fd4773a356d7dcfa4a1bfaec84a92348ae266b4c9902af8e65c5", size = 561546, upload-time = "2025-11-12T15:32:54.842Z" }, + { url = "https://files.pythonhosted.org/packages/2c/78/9a186cca3637a69c8fe85c1ebb90b22277c8dd4fed658b11724328457161/reachy_mini_motor_controller-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e21fdf453fecf6d4b992f7375a8a64b742d18991735dc843cb7d5d0394eac0c", size = 631171, upload-time = "2025-11-12T15:32:34.738Z" }, + { url = "https://files.pythonhosted.org/packages/6d/c7/3f292e367a9b2381e9133d51aad2a9766c202c3fb2fd998088084a297d5a/reachy_mini_motor_controller-1.3.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51b4b597484f5d9ec7c7a6d83c0eeeb53d17647cd080fe0df0a8eb4c90bd39ca", size = 634732, upload-time = "2025-11-12T15:32:41.279Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7c/de2632d7919ec66515b678c6b8688315128251affd58466265468909d3f4/reachy_mini_motor_controller-1.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b9e102b84b65ee128b3d56303b0f36271d94a6e20e62be6e71647f920b42d32", size = 682909, upload-time = "2025-11-12T15:32:45.735Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/948f45b54688db6f8e30c40d696170765367f12cef69b90c2a6aaaa8ac50/reachy_mini_motor_controller-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4a3d63baae95c6574ee834b52a388edd5266d579265276ec8ac973833f5712", size = 647110, upload-time = "2025-11-12T15:32:50.246Z" }, + { url = "https://files.pythonhosted.org/packages/55/1b/7e0f2ea360e4959d71d31415eba3b2d4713544e549bd75c2cffa59bf89fa/reachy_mini_motor_controller-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d05e95f35b3a35a50efee8c85635ccdf03e92ea0b75ca78361d7d2a6631c8d9", size = 815202, upload-time = "2025-11-12T15:33:05.765Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d0/3ee2916b44be90e3258111cf4da12a87fa906cb36cbdd39fd4f7d6f42fa6/reachy_mini_motor_controller-1.3.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:82fb1467c11657562da23b0709828dfc1ac0dbf5a9861af6852de055e09cd6d4", size = 897719, upload-time = "2025-11-12T15:33:11.627Z" }, + { url = "https://files.pythonhosted.org/packages/da/81/06ae473c3a63023317b5de1e662c20c77ce9084895180e898d1bcd9ed105/reachy_mini_motor_controller-1.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:537aa9dd039facf0405b692d3c14bfc4786df448d8dce8c497e9d653a32db012", size = 841080, upload-time = "2025-11-12T15:33:17.659Z" }, + { url = "https://files.pythonhosted.org/packages/92/28/5901bd378d7c97bad7500bad265298ade132f14ab8f461c7b0ea749e2ecb/reachy_mini_motor_controller-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9b04673b488c45aebf0e43ab90a1555aaa2165ee6da7a841683310d0f85d58f0", size = 804921, upload-time = "2025-11-12T15:33:23.884Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cd/63605cddebeec8f9fe7b0ca9a1cd7f1232b173f05ab34fa307c5d7ed8f2d/reachy_mini_motor_controller-1.3.0-cp311-cp311-win32.whl", hash = "sha256:a27d55acea2f1b3e23752d12b117e58bc069cd41e4466ba18ce7450777a254cb", size = 370038, upload-time = "2025-11-12T15:33:37.77Z" }, + { url = "https://files.pythonhosted.org/packages/29/01/aa5a45c42734fff180cb4d1f4b6ff97afda7bd4a9cbe6d01289361310d4f/reachy_mini_motor_controller-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d7372b410eba661927939b47bb4fe815db551fd855bbdff0481a80491b17bddb", size = 391943, upload-time = "2025-11-12T15:33:31.258Z" }, + { url = "https://files.pythonhosted.org/packages/93/5d/ce5e52520f9aee23499324f16de41d9cf9fe316a1a88ea54428131930840/reachy_mini_motor_controller-1.3.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0435414338219f4c8803183a0510427d953819023fefdfc4d2bb7c311cfc67bb", size = 579075, upload-time = "2025-11-12T15:33:01.366Z" }, + { url = "https://files.pythonhosted.org/packages/01/b1/e858323032461fbfaf39ecadf92a4d68e2492dddaa96e9ff64d6cfab1520/reachy_mini_motor_controller-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9dc8f50770fae86fedd0c2e545c9674007a4ffbf5c0084eb4a78f710143c53d6", size = 557119, upload-time = "2025-11-12T15:32:55.851Z" }, + { url = "https://files.pythonhosted.org/packages/96/2f/eeb09324a476bc1059515b40f6b7ae557957c47e2fa3287f6331334cf2dd/reachy_mini_motor_controller-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1139d1b0d967995d818a6dc46de36c32e903f071ee86a5fa15a7607b518b68c5", size = 630790, upload-time = "2025-11-12T15:32:36.305Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e4/ca06a2390dfc112b6a348f339fcde05e94eeee19bde3760301e7e99396cc/reachy_mini_motor_controller-1.3.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cca410560eb9bfbebf59c162f572a4615fdd11550e67343c3280ca2f947228de", size = 634044, upload-time = "2025-11-12T15:32:42.482Z" }, + { url = "https://files.pythonhosted.org/packages/3a/e1/93301c4865a1f285f1f7f9e8d48acb1dea18e4e23ddd3f3b20c99651bd1c/reachy_mini_motor_controller-1.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36268f840b025b97032be716327d86f6dc5ebf425314dfea395cb18396e0a36a", size = 682042, upload-time = "2025-11-12T15:32:47.046Z" }, + { url = "https://files.pythonhosted.org/packages/18/62/07968c7ee0af0d0c2fd9fe0726c2600f10fcd6e0c92c4ebd1b60c8daf245/reachy_mini_motor_controller-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86191b1613b721e2a9b0f6c858b3178fa4cadf7af09d10db8b9a0e7ade33e0bc", size = 647841, upload-time = "2025-11-12T15:32:51.279Z" }, + { url = "https://files.pythonhosted.org/packages/df/4b/4a3f7689c09b7e36e9b8be05b9f29ee2c26c3aa729161f7d2aa7b42b3844/reachy_mini_motor_controller-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c04536a64722cfc261b103e5822a13f0382e4e1ac90424f7fd8600290bb63d6", size = 814464, upload-time = "2025-11-12T15:33:06.83Z" }, + { url = "https://files.pythonhosted.org/packages/87/64/21f9ce33f5001247adb8acb9d8f0d4864ab36742bf238cf52eccd2297fbe/reachy_mini_motor_controller-1.3.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:225c1c4e4cb1e300d876e5f398583078b1980c8d72531f37a391dddf6036a792", size = 897793, upload-time = "2025-11-12T15:33:12.717Z" }, + { url = "https://files.pythonhosted.org/packages/af/c1/09faf905b04358b921e5a9b20a429b1ac19b5444da3ae8c351f6cf4e1e58/reachy_mini_motor_controller-1.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:46a15e355f3d3384b2f2d3c1e70676cd6c565c8def61236b6cd0a25e1aec676d", size = 840358, upload-time = "2025-11-12T15:33:18.973Z" }, + { url = "https://files.pythonhosted.org/packages/2e/15/b2f521cfd9d4c6258b68302f6959b6c2070bf22dfdc4e7a55286621a683c/reachy_mini_motor_controller-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5c7bc69b7dd38f3c6c82584742a12c99cf62fe4b8a0f232d873dcfc5f3325e85", size = 805614, upload-time = "2025-11-12T15:33:25.183Z" }, + { url = "https://files.pythonhosted.org/packages/90/34/29ca7ba88829bcde79284585687a4f1885096127bf44020efdb7ad112c8d/reachy_mini_motor_controller-1.3.0-cp312-cp312-win32.whl", hash = "sha256:14b9df93df4291906126cf3be080ff8e2c6f667409034bdb06df29f171895ee7", size = 368940, upload-time = "2025-11-12T15:33:38.813Z" }, + { url = "https://files.pythonhosted.org/packages/0e/68/18ecf6c471f5b19fe8ac46d991e733293a8e0049732af781bafdc70c824a/reachy_mini_motor_controller-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c8002cc4f69f970d28fe2b39df48ea80ae9c2d0a6810ecddf691b048193448f6", size = 392078, upload-time = "2025-11-12T15:33:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f3/92b1d22e73a2a1dd26b1c81dad88981035da06f7584cf281be70997ca8f3/reachy_mini_motor_controller-1.3.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2ae05b359811f43cc2d4da0ad86e00a16030a94e5b692067406a1d632e305a4b", size = 579283, upload-time = "2025-11-12T15:33:02.637Z" }, + { url = "https://files.pythonhosted.org/packages/0c/36/732cc5b2b514bff73323971e49a069e63cf971424fe123606259b0d5d717/reachy_mini_motor_controller-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a62ac6a4d2fcaa65a11313513164ad882b2fc72ea26d19f258d96ba3626eca35", size = 557276, upload-time = "2025-11-12T15:32:57.141Z" }, + { url = "https://files.pythonhosted.org/packages/39/35/4f9d41d6afc970a01c14da5b02dbefadef81dcf48dca61b6cec3f90057aa/reachy_mini_motor_controller-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db7a740b38906596ac7da088cfd2c3e28ce7efabd00c8067c7da65d99979afbb", size = 630877, upload-time = "2025-11-12T15:32:37.428Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ad/1073019b2d974c0ef8779c2407faaf18c4fe7140963ffc84cb2ca1b49239/reachy_mini_motor_controller-1.3.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f266feca4faf55e6cafdea9eeb651253450be0add5596e5a8ae1e738f6f3730f", size = 634449, upload-time = "2025-11-12T15:32:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/e1/c3/72ef593952a615a623a3b6328b8ba406262a83c9420be13e7d0984fd2217/reachy_mini_motor_controller-1.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01b1fb67d2bb0131e4321c6a3114236dc4d2be50234bad1994f833e91aaf864e", size = 682407, upload-time = "2025-11-12T15:32:48.082Z" }, + { url = "https://files.pythonhosted.org/packages/c2/2d/20ceea275db94a87c2b5c72e0a569de4e48ca99d887233d4f71901ab75ae/reachy_mini_motor_controller-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86e945e3172d046e0361cd054e35919f52074e3beeffb58d1bd23dd724ab3bb8", size = 647302, upload-time = "2025-11-12T15:32:52.287Z" }, + { url = "https://files.pythonhosted.org/packages/81/b0/9df033525b2112b74a6a7bfabdcd572215b11b7e7c22a7bb3c68d260c06c/reachy_mini_motor_controller-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bee08a170236b4560934a450ada6659da3f4cc3a7999ce53a725d081652ed99b", size = 814631, upload-time = "2025-11-12T15:33:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d3/e666bf062cab4f041d6e0967167116e03c809716bbd6547c442ed0d10b36/reachy_mini_motor_controller-1.3.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cb5d6caf26f30b11d06424eb98ee8f9ca886ca019407cda42e26b1d621ff5005", size = 898463, upload-time = "2025-11-12T15:33:13.791Z" }, + { url = "https://files.pythonhosted.org/packages/47/02/3d8b98ff70651f25ac2cd18b3e8ffbcfc4e592c3ab37a99ad8c62bfcddbe/reachy_mini_motor_controller-1.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2131f4b5ff393d869e20b99629182fbbeb5b8a6dcc9bb2a588a97f461a4e3e4e", size = 840897, upload-time = "2025-11-12T15:33:20.193Z" }, + { url = "https://files.pythonhosted.org/packages/87/6d/ef2324a39be04ac6c5dc15731c33e4177dc9c7c5ef72e17669df8882af70/reachy_mini_motor_controller-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a302f6698da5650711f70102d6340b3cb768263288176c8d687943289f57221f", size = 805264, upload-time = "2025-11-12T15:33:26.23Z" }, + { url = "https://files.pythonhosted.org/packages/28/0d/fe375622efaf6f6401ab60c23a1caf734e8f761e9e34b4717ffe33a98cd4/reachy_mini_motor_controller-1.3.0-cp313-cp313-win32.whl", hash = "sha256:30909e0bc4650cd643ec116bf1bd048486a79ef101834fa4e6392ab82eacf4cc", size = 369366, upload-time = "2025-11-12T15:33:39.948Z" }, + { url = "https://files.pythonhosted.org/packages/42/28/093ecdd6956340c04c9e2d2deb3be22374277d14cd77d3e78b847ab8a1b6/reachy_mini_motor_controller-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:cd648afa9ecdc2dd27c0134917bb1ffea4fa9e0a1708600022b199d3d12832da", size = 391988, upload-time = "2025-11-12T15:33:33.437Z" }, + { url = "https://files.pythonhosted.org/packages/61/8d/b94a541c7c45fbd31c0c2a40491921d2d4ecd6769f3a9452f2d9684fd6af/reachy_mini_motor_controller-1.3.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9f31e2840cd0af48670622e9ff2fb999b3cbb42e8214540a584cccbc77f4a251", size = 577389, upload-time = "2025-11-12T15:33:03.627Z" }, + { url = "https://files.pythonhosted.org/packages/94/82/4ddb19952ada440948fb058806a357efdcee8e17ce77302bf9d8615534f1/reachy_mini_motor_controller-1.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2e9d867e7527f7d8020ca785e7d52a51fe8acd10babc46f4e691819c217ca1ee", size = 556290, upload-time = "2025-11-12T15:32:58.107Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a7/b512e20e2ac5a754e9f2a341ea163d77cc5a88358689cbd701c16896c97c/reachy_mini_motor_controller-1.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:55f33f410acfa7acf9efbd8f8a52eba1b48d9f54480d0cdbc9e38abe15290335", size = 812840, upload-time = "2025-11-12T15:33:09.203Z" }, + { url = "https://files.pythonhosted.org/packages/e6/4d/38f3c17aed9918b09e3c68a7d47622384cda580419fc488c79c1b99d5985/reachy_mini_motor_controller-1.3.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:12a3f31cbc7df7488de1da81192e06c2c3d56390ea2d31d7090eda974553fbd5", size = 897624, upload-time = "2025-11-12T15:33:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/75/c9/8084939d923a83cd323dffbe347306e376dbea10bc33b9f40cf0e49002a5/reachy_mini_motor_controller-1.3.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:cb6a81d90f228b1c8d6cf30183e02051959ac89b58701409161243dd4290050b", size = 841602, upload-time = "2025-11-12T15:33:21.563Z" }, + { url = "https://files.pythonhosted.org/packages/f9/83/25c2bf1a65dce80581e10c92bef3dbddfc57a7dfa264fdbce71fac1322e1/reachy_mini_motor_controller-1.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:06ac23ac2cdb1c2d5c3254b8c0a8eca76a25afa21da6b99e0108ec12e5d87cb3", size = 804303, upload-time = "2025-11-12T15:33:27.686Z" }, + { url = "https://files.pythonhosted.org/packages/83/97/174ba7b4660b24398b3748e7a5a86309201c40a6d1c78d5bd577af331c0a/reachy_mini_motor_controller-1.3.0-cp314-cp314-win32.whl", hash = "sha256:b629020f99d92ab46c0f5894990d86a6817b012360e31dfa6a01c3226b341b27", size = 368990, upload-time = "2025-11-12T15:33:41.17Z" }, + { url = "https://files.pythonhosted.org/packages/0f/28/0e05d6d7f7362f7b5c3aee7fd13760585757c2df32627fa9f9556aa55240/reachy_mini_motor_controller-1.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:1c84987a1a75f8b42dc8de5fbd05f78167d2da56f89391b22e66503526c0881e", size = 389797, upload-time = "2025-11-12T15:33:34.434Z" }, ] [[package]] @@ -2976,7 +2978,7 @@ wheels = [ [[package]] name = "rerun-sdk" -version = "0.26.0" +version = "0.27.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -2986,11 +2988,10 @@ dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/29/fa/1e08ff460ce1d35bf4805a9ad0a3b2611cf475d1ae013e0fbafcad59845e/rerun_sdk-0.26.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:ae7ed38fcf6c78a4e348d3fe7ef7b8340d801cb2d9cb17572a834b5fe1fecaab", size = 93335678, upload-time = "2025-10-16T14:23:35.306Z" }, - { url = "https://files.pythonhosted.org/packages/9a/37/f552c9f64361e95a8857c6c6952be7006f39775e4d5f5aea495ca48cfd5b/rerun_sdk-0.26.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:4fba13c72c973bbae8891224df2d91dac3db2bc153c64f35c5cbcb7b2138c7d1", size = 86314314, upload-time = "2025-10-16T14:23:40.24Z" }, - { url = "https://files.pythonhosted.org/packages/3a/f1/35932308d7729c03a7f2a9f9a2d38989eb70d6122f4e59de3e56c4606b13/rerun_sdk-0.26.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a814fd7469c6804abbc9bc908a6e2e95155884fd7719bbd395b68fdee9fe90c6", size = 92675550, upload-time = "2025-10-16T14:23:44.486Z" }, - { url = "https://files.pythonhosted.org/packages/53/c2/a9429d484330555d93ef61e38278ab2c9a7940b2f07a3dd315f222a5f37e/rerun_sdk-0.26.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:52a07d0ba9319e9a7bc62bab99f2ba2634a0fc8c9c1ba26457df50c973325d44", size = 98761618, upload-time = "2025-10-16T14:23:48.497Z" }, - { url = "https://files.pythonhosted.org/packages/58/b0/afea49ac66f8d8150de1c168dc374be97bd001a205678944288f9a5a4de2/rerun_sdk-0.26.0-cp39-abi3-win_amd64.whl", hash = "sha256:37ac2dd27f87150d1e0637c6996ce062e8dee59fbd5c38f87f69f53411cb1f82", size = 84254240, upload-time = "2025-10-16T14:23:52.845Z" }, + { url = "https://files.pythonhosted.org/packages/e1/a9/f3d11f5e8b1065d3f3973182fd59f43f2c8a518c9f5268c2e01d1f5cd12f/rerun_sdk-0.27.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:042dfc008273e2f8f7c06ea5097ae810cdd32d4a06d630a55192059d51cdf8c7", size = 99972290, upload-time = "2025-11-13T15:09:40.72Z" }, + { url = "https://files.pythonhosted.org/packages/1b/7f/10fbf55d4d7872ca8f84062e9348f0a89392bf6acf39c9fbbfb9d6f47223/rerun_sdk-0.27.1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:26e0456cae0a9cf1b87fdc4d0d54491b523293f09cecdc3d9450e48008a50d59", size = 107366425, upload-time = "2025-11-13T15:09:45.738Z" }, + { url = "https://files.pythonhosted.org/packages/16/e1/9161ecce62afb62668ce4577bdea53c593351f7474a6aaa270a465fb113f/rerun_sdk-0.27.1-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8aa5e685d58929d89673ebf4eb6cc03c1d3f48879e9867c22bc83e11c6754ab", size = 114622366, upload-time = "2025-11-13T15:09:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/3d/16/9b81e8b864120664963cf7e4524e99f1062462096482838dec6106f834ce/rerun_sdk-0.27.1-cp310-abi3-win_amd64.whl", hash = "sha256:a665cefedfd5c39e88dc10fceaefb46abf83748db8e4c29a293cdf68f4e63f2e", size = 97852363, upload-time = "2025-11-13T15:09:58.575Z" }, ] [[package]]