mirror of
https://github.com/pybricks/pybricks-api.git
synced 2026-09-11 09:05:07 +00:00
pybricks: Clean up typing.
This commit is contained in:
@@ -1,7 +1,4 @@
|
||||
from typing import Tuple
|
||||
|
||||
|
||||
version: Tuple[str, str, str] = (
|
||||
version: tuple[str, str, str] = (
|
||||
"hub",
|
||||
"3.X.YbZ",
|
||||
"v3.X.YbZ-GIT_HASH on DATE",
|
||||
|
||||
+54
-66
@@ -6,24 +6,16 @@ speakers, and batteries."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import (
|
||||
Union,
|
||||
Iterable,
|
||||
overload,
|
||||
Optional,
|
||||
Tuple,
|
||||
Collection,
|
||||
Set,
|
||||
TYPE_CHECKING,
|
||||
)
|
||||
from typing import TYPE_CHECKING, overload
|
||||
|
||||
from .tools import Matrix
|
||||
from .parameters import Axis, Direction, Stop, Button, Port, Color, Side
|
||||
from .parameters import Direction, Stop
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Awaitable, TypeVar
|
||||
from collections.abc import Awaitable, Collection, Iterable
|
||||
from typing import Any, TypeVar
|
||||
|
||||
from .parameters import Number
|
||||
from .parameters import Axis, Button, Color, Number, Port, Side
|
||||
from .tools import Matrix
|
||||
|
||||
_T_co = TypeVar("_T_co", covariant=True)
|
||||
|
||||
@@ -36,9 +28,9 @@ if TYPE_CHECKING:
|
||||
|
||||
class MaybeAwaitableInt(int, Awaitable[int]): ...
|
||||
|
||||
class MaybeAwaitableTuple(Tuple[_T_co], Awaitable[Tuple[_T_co]]): ...
|
||||
class MaybeAwaitableTuple(tuple[_T_co], Awaitable[tuple[_T_co]]): ...
|
||||
|
||||
class MaybeAwaitableSet(Set[_T_co], Awaitable[Set[_T_co]]): ...
|
||||
class MaybeAwaitableSet(set[_T_co], Awaitable[set[_T_co]]): ...
|
||||
|
||||
class MaybeAwaitableColor(Color, Awaitable[Color]): ...
|
||||
|
||||
@@ -48,9 +40,7 @@ if TYPE_CHECKING:
|
||||
class System:
|
||||
"""System control actions for a hub."""
|
||||
|
||||
def set_stop_button(
|
||||
self, button: Optional[Union[Button, Iterable[Button]]]
|
||||
) -> None:
|
||||
def set_stop_button(self, button: Button | Iterable[Button] | None) -> None:
|
||||
"""
|
||||
set_stop_button(button)
|
||||
|
||||
@@ -188,12 +178,12 @@ class DCMotor:
|
||||
def settings(self, max_voltage: Number) -> None: ...
|
||||
|
||||
@overload
|
||||
def settings(self) -> Tuple[int]: ...
|
||||
def settings(self) -> tuple[int]: ...
|
||||
|
||||
def settings(self, *args):
|
||||
"""
|
||||
settings(max_voltage)
|
||||
settings() -> Tuple[int]
|
||||
settings() -> tuple[int]
|
||||
|
||||
Configures motor settings. If no arguments are given,
|
||||
this returns the current values.
|
||||
@@ -218,18 +208,18 @@ class Control:
|
||||
@overload
|
||||
def limits(
|
||||
self,
|
||||
speed: Optional[Number] = None,
|
||||
acceleration: Optional[Number] = None,
|
||||
torque: Optional[Number] = None,
|
||||
speed: Number | None = None,
|
||||
acceleration: Number | None = None,
|
||||
torque: Number | None = None,
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def limits(self) -> Tuple[int, int, int]: ...
|
||||
def limits(self) -> tuple[int, int, int]: ...
|
||||
|
||||
def limits(self, *args):
|
||||
"""
|
||||
limits(speed, acceleration, torque)
|
||||
limits() -> Tuple[int, int, int]
|
||||
limits() -> tuple[int, int, int]
|
||||
|
||||
Configures the maximum speed, acceleration, and torque.
|
||||
|
||||
@@ -252,19 +242,19 @@ class Control:
|
||||
@overload
|
||||
def pid(
|
||||
self,
|
||||
kp: Optional[Number] = None,
|
||||
ki: Optional[Number] = None,
|
||||
kd: Optional[Number] = None,
|
||||
integral_deadzone: Optional[Number] = None,
|
||||
integral_rate: Optional[Number] = None,
|
||||
kp: Number | None = None,
|
||||
ki: Number | None = None,
|
||||
kd: Number | None = None,
|
||||
integral_deadzone: Number | None = None,
|
||||
integral_rate: Number | None = None,
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def pid(self) -> Tuple[int, int, int, int, int]: ...
|
||||
def pid(self) -> tuple[int, int, int, int, int]: ...
|
||||
|
||||
def pid(self, *args):
|
||||
"""pid(kp, ki, kd, integral_deadzone, integral_rate)
|
||||
pid() -> Tuple[int, int, int, int, int]
|
||||
pid() -> tuple[int, int, int, int, int]
|
||||
|
||||
Gets or sets the PID values for position and speed control.
|
||||
|
||||
@@ -287,15 +277,15 @@ class Control:
|
||||
|
||||
@overload
|
||||
def target_tolerances(
|
||||
self, speed: Optional[Number] = None, position: Optional[Number] = None
|
||||
self, speed: Number | None = None, position: Number | None = None
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def target_tolerances(self) -> Tuple[int, int]: ...
|
||||
def target_tolerances(self) -> tuple[int, int]: ...
|
||||
|
||||
def target_tolerances(self, *args):
|
||||
"""target_tolerances(speed, position)
|
||||
target_tolerances() -> Tuple[int, int]
|
||||
target_tolerances() -> tuple[int, int]
|
||||
|
||||
Gets or sets the tolerances that say when a maneuver is done.
|
||||
|
||||
@@ -311,15 +301,15 @@ class Control:
|
||||
|
||||
@overload
|
||||
def stall_tolerances(
|
||||
self, speed: Optional[Number] = None, time: Optional[Number] = None
|
||||
self, speed: Number | None = None, time: Number | None = None
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def stall_tolerances(self) -> Tuple[int, int]: ...
|
||||
def stall_tolerances(self) -> tuple[int, int]: ...
|
||||
|
||||
def stall_tolerances(self, speed, time):
|
||||
"""stall_tolerances(speed, time)
|
||||
stall_tolerances() -> Tuple[int, int]
|
||||
stall_tolerances() -> tuple[int, int]
|
||||
|
||||
Gets or sets stalling tolerances.
|
||||
|
||||
@@ -337,8 +327,8 @@ class Control:
|
||||
class Model:
|
||||
"""Class to interact with motor state observer and settings."""
|
||||
|
||||
def state(self) -> Tuple[float, float, float, bool]:
|
||||
"""state() -> Tuple[float, float, float, bool]
|
||||
def state(self) -> tuple[float, float, float, bool]:
|
||||
"""state() -> tuple[float, float, float, bool]
|
||||
|
||||
Gets the estimated angle, speed, current, and stall state of the motor,
|
||||
using a simulation model that mimics the real motor.
|
||||
@@ -364,7 +354,7 @@ class Model:
|
||||
|
||||
def settings(self, speed, time):
|
||||
"""settings(values)
|
||||
settings() -> Tuple
|
||||
settings() -> tuple
|
||||
|
||||
Gets or sets model settings as a tuple of integers. If no arguments are
|
||||
given, this will return the current values. This method is mainly used
|
||||
@@ -374,7 +364,7 @@ class Model:
|
||||
.. _model settings: https://docs.pybricks.com/projects/pbio/en/latest/struct__pbio__observer__settings__t.html
|
||||
|
||||
Arguments:
|
||||
values (Tuple): Tuple with `model settings`_.
|
||||
values (tuple): Tuple with `model settings`_.
|
||||
"""
|
||||
|
||||
|
||||
@@ -394,7 +384,7 @@ class Motor(DCMotor):
|
||||
self,
|
||||
port: Port,
|
||||
positive_direction: Direction = Direction.CLOCKWISE,
|
||||
gears: Optional[Union[Collection[int], Collection[Collection[int]]]] = None,
|
||||
gears: Collection[int] | Collection[Collection[int]] | None = None,
|
||||
reset_angle: bool = True,
|
||||
profile: Number = None,
|
||||
):
|
||||
@@ -480,7 +470,7 @@ class Motor(DCMotor):
|
||||
The load torque.
|
||||
"""
|
||||
|
||||
def reset_angle(self, angle: Optional[Number]) -> None:
|
||||
def reset_angle(self, angle: Number | None) -> None:
|
||||
"""
|
||||
reset_angle(angle)
|
||||
|
||||
@@ -577,7 +567,7 @@ class Motor(DCMotor):
|
||||
self,
|
||||
speed: Number,
|
||||
then: Stop = Stop.COAST,
|
||||
duty_limit: Optional[Number] = None,
|
||||
duty_limit: Number | None = None,
|
||||
) -> MaybeAwaitableInt:
|
||||
"""
|
||||
run_until_stalled(speed, then=Stop.COAST, duty_limit=None) -> int: deg
|
||||
@@ -773,9 +763,7 @@ class ExternalColorLight:
|
||||
class LightArray3:
|
||||
"""Control an array of three single-color lights."""
|
||||
|
||||
def on(
|
||||
self, brightness: Union[Number, Tuple[Number, Number, Number]]
|
||||
) -> MaybeAwaitable:
|
||||
def on(self, brightness: Number | tuple[Number, Number, Number]) -> MaybeAwaitable:
|
||||
"""on(brightness)
|
||||
|
||||
Turns on the lights at the specified brightness.
|
||||
@@ -798,7 +786,7 @@ class LightArray4(LightArray3):
|
||||
"""Control an array of four single-color lights."""
|
||||
|
||||
def on(
|
||||
self, brightness: Union[Number, Tuple[Number, Number, Number, Number]]
|
||||
self, brightness: Number | tuple[Number, Number, Number, Number]
|
||||
) -> MaybeAwaitable:
|
||||
"""on(brightness)
|
||||
|
||||
@@ -926,8 +914,8 @@ class Keypad:
|
||||
|
||||
def __init__(self, active_buttons): ...
|
||||
|
||||
def pressed(self) -> Set[Button]:
|
||||
"""pressed() -> Set[Button]
|
||||
def pressed(self) -> set[Button]:
|
||||
"""pressed() -> set[Button]
|
||||
|
||||
Checks which buttons are currently pressed.
|
||||
|
||||
@@ -999,8 +987,8 @@ class Charger:
|
||||
class SimpleAccelerometer:
|
||||
"""Get measurements from an accelerometer."""
|
||||
|
||||
def acceleration(self) -> Tuple[int, int, int]:
|
||||
"""acceleration() -> Tuple[int, int, int]: mm/s²
|
||||
def acceleration(self) -> tuple[int, int, int]:
|
||||
"""acceleration() -> tuple[int, int, int]: mm/s²
|
||||
|
||||
Gets the acceleration of the device.
|
||||
|
||||
@@ -1018,8 +1006,8 @@ class SimpleAccelerometer:
|
||||
``Side.FRONT`` or ``Side.BACK``.
|
||||
"""
|
||||
|
||||
def tilt(self) -> Tuple[int, int]:
|
||||
"""tilt() -> Tuple[int, int]
|
||||
def tilt(self) -> tuple[int, int]:
|
||||
"""tilt() -> tuple[int, int]
|
||||
|
||||
Gets the pitch and roll angles. This is relative to the
|
||||
:ref:`user-specified neutral orientation <robotframe>`.
|
||||
@@ -1049,8 +1037,8 @@ class IMU:
|
||||
``Side.FRONT`` or ``Side.BACK``.
|
||||
"""
|
||||
|
||||
def tilt(self, calibrated: bool = True) -> Tuple[int, int]:
|
||||
"""tilt(calibrated=True) -> Tuple[int, int]
|
||||
def tilt(self, calibrated: bool = True) -> tuple[int, int]:
|
||||
"""tilt(calibrated=True) -> tuple[int, int]
|
||||
|
||||
Gets the pitch and roll angles. This is relative to the
|
||||
:ref:`user-specified neutral orientation <robotframe>`.
|
||||
@@ -1124,27 +1112,27 @@ class IMU:
|
||||
angular_velocity_threshold: float = None,
|
||||
acceleration_threshold: float = None,
|
||||
heading_correction: float = None,
|
||||
angular_velocity_bias: Tuple[float, float, float] = None,
|
||||
angular_velocity_scale: Tuple[float, float, float] = None,
|
||||
acceleration_correction: Tuple[float, float, float, float, float, float] = None,
|
||||
angular_velocity_bias: tuple[float, float, float] = None,
|
||||
angular_velocity_scale: tuple[float, float, float] = None,
|
||||
acceleration_correction: tuple[float, float, float, float, float, float] = None,
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def settings(
|
||||
self,
|
||||
) -> Tuple[
|
||||
) -> tuple[
|
||||
float,
|
||||
float,
|
||||
float,
|
||||
Tuple[float, float, float],
|
||||
Tuple[float, float, float],
|
||||
Tuple[float, float, float, float, float, float],
|
||||
tuple[float, float, float],
|
||||
tuple[float, float, float],
|
||||
tuple[float, float, float, float, float, float],
|
||||
]: ...
|
||||
|
||||
def settings(self, *args):
|
||||
"""
|
||||
settings(*, angular_velocity_threshold, acceleration_threshold, heading_correction, angular_velocity_bias, angular_velocity_scale, acceleration_correction)
|
||||
settings() -> Tuple
|
||||
settings() -> tuple
|
||||
|
||||
Configures the IMU settings. If no arguments are given,
|
||||
this returns the current values. Use keyword arguments for each value
|
||||
|
||||
+29
-26
@@ -5,29 +5,20 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Optional, Tuple, List
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import _common
|
||||
from .parameters import (
|
||||
Button as _Button,
|
||||
Color as _Color,
|
||||
Direction as _Direction,
|
||||
Port as _Port,
|
||||
)
|
||||
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
)
|
||||
from .parameters import Direction
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._common import (
|
||||
MaybeAwaitableColor,
|
||||
MaybeAwaitableBool,
|
||||
MaybeAwaitableColor,
|
||||
MaybeAwaitableInt,
|
||||
MaybeAwaitableSet,
|
||||
MaybeAwaitableTuple,
|
||||
)
|
||||
from .parameters import Number, Port
|
||||
from .parameters import Button, Port
|
||||
|
||||
|
||||
class Motor(_common.Motor):
|
||||
@@ -37,7 +28,7 @@ class Motor(_common.Motor):
|
||||
class TouchSensor:
|
||||
"""LEGO® MINDSTORMS® EV3 Touch Sensor."""
|
||||
|
||||
def __init__(self, port: _Port):
|
||||
def __init__(self, port: Port):
|
||||
"""TouchSensor(port)
|
||||
|
||||
Arguments:
|
||||
@@ -58,7 +49,7 @@ class TouchSensor:
|
||||
class ColorSensor:
|
||||
"""LEGO® MINDSTORMS® EV3 Color Sensor."""
|
||||
|
||||
def __init__(self, port: _Port):
|
||||
def __init__(self, port: Port):
|
||||
"""ColorSensor(port)
|
||||
|
||||
Arguments:
|
||||
@@ -99,7 +90,7 @@ class ColorSensor:
|
||||
"""
|
||||
|
||||
def rgb(self) -> MaybeAwaitableTuple[int, int, int]:
|
||||
"""rgb() -> Tuple[int, int, int]
|
||||
"""rgb() -> tuple[int, int, int]
|
||||
|
||||
Measures the reflection of a surface using a red, green, and then a
|
||||
blue light.
|
||||
@@ -113,7 +104,7 @@ class ColorSensor:
|
||||
class InfraredSensor:
|
||||
"""LEGO® MINDSTORMS® EV3 Infrared Sensor and Beacon."""
|
||||
|
||||
def __init__(self, port: _Port):
|
||||
def __init__(self, port: Port):
|
||||
"""InfraredSensor(port)
|
||||
|
||||
Arguments:
|
||||
@@ -133,10 +124,10 @@ class InfraredSensor:
|
||||
|
||||
"""
|
||||
|
||||
def beacon(self, channel: int) -> MaybeAwaitableTuple[Optional[int], Optional[int]]:
|
||||
def beacon(self, channel: int) -> MaybeAwaitableTuple[int | None, int | None]:
|
||||
"""
|
||||
beacon(channel) -> Tuple[int, int]
|
||||
beacon(channel) -> Tuple[None, None]
|
||||
beacon(channel) -> tuple[int, int]
|
||||
beacon(channel) -> tuple[None, None]
|
||||
|
||||
Measures the relative distance and angle between the remote and the
|
||||
infrared sensor.
|
||||
@@ -150,8 +141,8 @@ class InfraredSensor:
|
||||
a tuple of (``None``, ``None``) if no remote is detected.
|
||||
"""
|
||||
|
||||
def buttons(self, channel: int) -> MaybeAwaitableSet[_Button]:
|
||||
"""buttons(channel) -> Set[Button]
|
||||
def buttons(self, channel: int) -> MaybeAwaitableSet[Button]:
|
||||
"""buttons(channel) -> set[Button]
|
||||
|
||||
Checks which buttons on the infrared remote are pressed.
|
||||
|
||||
@@ -166,8 +157,8 @@ class InfraredSensor:
|
||||
|
||||
"""
|
||||
|
||||
def keypad(self) -> MaybeAwaitableSet[_Button]:
|
||||
"""keypad() -> Set[Button]
|
||||
def keypad(self) -> MaybeAwaitableSet[Button]:
|
||||
"""keypad() -> set[Button]
|
||||
|
||||
Checks which buttons on the infrared remote are pressed.
|
||||
|
||||
@@ -184,7 +175,7 @@ class InfraredSensor:
|
||||
class GyroSensor:
|
||||
"""LEGO® MINDSTORMS® EV3 Gyro Sensor."""
|
||||
|
||||
def __init__(self, port: _Port, direction: _Direction = _Direction.CLOCKWISE):
|
||||
def __init__(self, port: Port, direction: Direction = Direction.CLOCKWISE):
|
||||
"""GyroSensor(port)
|
||||
|
||||
Arguments:
|
||||
@@ -228,7 +219,7 @@ class GyroSensor:
|
||||
class UltrasonicSensor:
|
||||
"""LEGO® MINDSTORMS® EV3 Ultrasonic Sensor."""
|
||||
|
||||
def __init__(self, port: _Port):
|
||||
def __init__(self, port: Port):
|
||||
"""UltrasonicSensor(port)
|
||||
|
||||
Arguments:
|
||||
@@ -268,3 +259,15 @@ class UltrasonicSensor:
|
||||
``True`` if ultrasonic sounds are detected,
|
||||
``False`` if not.
|
||||
"""
|
||||
|
||||
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del Button
|
||||
del Direction
|
||||
del MaybeAwaitableBool
|
||||
del MaybeAwaitableColor
|
||||
del MaybeAwaitableInt
|
||||
del MaybeAwaitableSet
|
||||
del MaybeAwaitableTuple
|
||||
del Port
|
||||
|
||||
@@ -3,10 +3,14 @@
|
||||
|
||||
"""LEGO® Programmable Hubs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import _common
|
||||
from .ev3dev import _speaker
|
||||
from .media.ev3dev import Image as _Image
|
||||
from .parameters import Button as _Button, Axis
|
||||
from .parameters import Axis, Button as _Button
|
||||
|
||||
|
||||
class EV3Brick:
|
||||
@@ -178,5 +182,6 @@ class InventorHub(PrimeHub):
|
||||
"""LEGO® MINDSTORMS Inventor Hub."""
|
||||
|
||||
|
||||
# HACK: hide from jedi
|
||||
del Axis
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del Axis
|
||||
|
||||
+26
-28
@@ -5,20 +5,19 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Tuple, Optional, overload, TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, overload
|
||||
|
||||
from . import _common
|
||||
from .parameters import Port as _Port
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._common import MaybeAwaitable, MaybeAwaitableBytes, MaybeAwaitableTuple
|
||||
from .parameters import Number
|
||||
from .parameters import Number, Port
|
||||
|
||||
|
||||
class PUPDevice:
|
||||
"""Powered Up motor or sensor."""
|
||||
|
||||
def __init__(self, port: _Port):
|
||||
def __init__(self, port: Port):
|
||||
"""PUPDevice(port)
|
||||
|
||||
Arguments:
|
||||
@@ -26,7 +25,7 @@ class PUPDevice:
|
||||
"""
|
||||
|
||||
def info(self) -> dict:
|
||||
"""info() -> Dict
|
||||
"""info() -> dict
|
||||
|
||||
Gets information about the device.
|
||||
|
||||
@@ -43,7 +42,7 @@ class PUPDevice:
|
||||
"""
|
||||
|
||||
def read(self, mode: int) -> MaybeAwaitableTuple:
|
||||
"""read(mode) -> Tuple
|
||||
"""read(mode) -> tuple
|
||||
|
||||
Reads values from a given mode.
|
||||
|
||||
@@ -65,7 +64,7 @@ class PUPDevice:
|
||||
support reading (e.g. a DC motor or light).
|
||||
"""
|
||||
|
||||
def write(self, mode: int, data: Tuple) -> MaybeAwaitable:
|
||||
def write(self, mode: int, data: tuple) -> MaybeAwaitable:
|
||||
"""write(mode, data)
|
||||
|
||||
Writes values to the device. Only selected UART devices and modes
|
||||
@@ -116,7 +115,7 @@ class DCMotor(_common.DCMotor):
|
||||
class AnalogSensor:
|
||||
"""Generic or custom analog sensor."""
|
||||
|
||||
def __init__(self, port: _Port, custom: bool = False):
|
||||
def __init__(self, port: Port, custom: bool = False):
|
||||
"""AnalogSensor(port, custom=False)
|
||||
|
||||
Arguments:
|
||||
@@ -190,7 +189,7 @@ class I2CDevice:
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
port: _Port,
|
||||
port: Port,
|
||||
address: int,
|
||||
custom: bool = False,
|
||||
power_pin: int = 0,
|
||||
@@ -212,17 +211,15 @@ class I2CDevice:
|
||||
"""
|
||||
|
||||
@overload
|
||||
def read(
|
||||
self, reg: Optional[int] = None, length: int = 1
|
||||
) -> MaybeAwaitableBytes: ...
|
||||
def read(self, reg: int | None = None, length: int = 1) -> MaybeAwaitableBytes: ...
|
||||
|
||||
@overload
|
||||
def read(
|
||||
self, reg: Optional[int] = None, length: int = 1, map: callable = ...
|
||||
self, reg: int | None = None, length: int = 1, map: callable = ...
|
||||
) -> MaybeAwaitable: ...
|
||||
|
||||
def read(
|
||||
self, reg: Optional[int] = None, length: int = 1, map=None
|
||||
self, reg: int | None = None, length: int = 1, map=None
|
||||
) -> MaybeAwaitableBytes:
|
||||
"""read(reg=None, length=1) -> bytes
|
||||
read(reg=None, length=1, map=callable) -> Any
|
||||
@@ -244,7 +241,7 @@ class I2CDevice:
|
||||
"""
|
||||
|
||||
def write(
|
||||
self, reg: Optional[int] = None, data: Optional[bytes] = None
|
||||
self, reg: int | None = None, data: bytes | None = None
|
||||
) -> MaybeAwaitable:
|
||||
"""write(reg=None, data=None)
|
||||
|
||||
@@ -273,9 +270,9 @@ class UARTDevice:
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
port: _Port,
|
||||
port: Port,
|
||||
baudrate: int = 115200,
|
||||
timeout: Optional[int] = None,
|
||||
timeout: int | None = None,
|
||||
power_pin: int = 0,
|
||||
):
|
||||
"""UARTDevice(port, baudrate=115200, timeout=None, power_pin=0)
|
||||
@@ -516,7 +513,7 @@ class XboxController:
|
||||
def __init__(
|
||||
self,
|
||||
joystick_deadzone: int = 10,
|
||||
name: Optional[str] = None,
|
||||
name: str | None = None,
|
||||
timeout: int = 10000,
|
||||
connect: bool = True,
|
||||
):
|
||||
@@ -559,8 +556,8 @@ class XboxController:
|
||||
OSError: If the controller is not connected.
|
||||
"""
|
||||
|
||||
def state(self) -> Tuple:
|
||||
"""state() -> Tuple
|
||||
def state(self) -> tuple:
|
||||
"""state() -> tuple
|
||||
|
||||
Gets all raw controller input values as a single tuple. This gives
|
||||
access to values not exposed by the other methods.
|
||||
@@ -576,8 +573,8 @@ class XboxController:
|
||||
OSError: If the controller is not connected.
|
||||
"""
|
||||
|
||||
def joystick_left(self) -> Tuple[int, int]:
|
||||
"""joystick_left() -> Tuple
|
||||
def joystick_left(self) -> tuple[int, int]:
|
||||
"""joystick_left() -> tuple
|
||||
|
||||
Gets the left joystick position as percentages between -100%
|
||||
and 100%. The center position is (0, 0). A square deadzone is applied:
|
||||
@@ -590,8 +587,8 @@ class XboxController:
|
||||
OSError: If the controller is not connected.
|
||||
"""
|
||||
|
||||
def joystick_right(self) -> Tuple[int, int]:
|
||||
"""joystick_right() -> Tuple
|
||||
def joystick_right(self) -> tuple[int, int]:
|
||||
"""joystick_right() -> tuple
|
||||
|
||||
Gets the right joystick position as percentages between -100%
|
||||
and 100%. The center position is (0, 0). A square deadzone is applied:
|
||||
@@ -604,8 +601,8 @@ class XboxController:
|
||||
OSError: If the controller is not connected.
|
||||
"""
|
||||
|
||||
def triggers(self) -> Tuple[int, int]:
|
||||
"""triggers() -> Tuple
|
||||
def triggers(self) -> tuple[int, int]:
|
||||
"""triggers() -> tuple
|
||||
|
||||
Gets the left and right trigger positions as percentages between 0%
|
||||
and 100%.
|
||||
@@ -651,7 +648,7 @@ class XboxController:
|
||||
|
||||
def rumble(
|
||||
self,
|
||||
power: Number | Tuple[Number, Number, Number, Number] = 100,
|
||||
power: Number | tuple[Number, Number, Number, Number] = 100,
|
||||
duration: int = 200,
|
||||
count: int = 1,
|
||||
delay: int = 100,
|
||||
@@ -686,9 +683,10 @@ class XboxController:
|
||||
"""
|
||||
|
||||
|
||||
# hide from jedi
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del MaybeAwaitable
|
||||
del MaybeAwaitableBytes
|
||||
del MaybeAwaitableTuple
|
||||
del Number
|
||||
del Port
|
||||
|
||||
+26
-34
@@ -7,26 +7,13 @@ Classes to send and receive messages from another device.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
from typing import (
|
||||
abstractmethod,
|
||||
Callable,
|
||||
Generic,
|
||||
Iterable,
|
||||
List,
|
||||
Optional,
|
||||
overload,
|
||||
Sequence,
|
||||
Tuple,
|
||||
TYPE_CHECKING,
|
||||
TypeVar,
|
||||
Union,
|
||||
)
|
||||
from abc import abstractmethod
|
||||
from typing import TYPE_CHECKING, Generic, TypeVar, overload
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._common import (
|
||||
MaybeAwaitable,
|
||||
)
|
||||
from collections.abc import Callable, Iterable, Sequence
|
||||
|
||||
from ._common import MaybeAwaitable
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
@@ -42,7 +29,7 @@ class BLERadio:
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
broadcast_channel: Optional[int] = None,
|
||||
broadcast_channel: int | None = None,
|
||||
observe_channels: Sequence[int] = [],
|
||||
):
|
||||
"""BLERadio(broadcast_channel=None, observe_channels=[])
|
||||
@@ -62,13 +49,11 @@ class BLERadio:
|
||||
|
||||
@overload
|
||||
def broadcast(
|
||||
self, data: Iterable[Union[bool, int, float, str, bytes]]
|
||||
self, data: Iterable[bool | int | float | str | bytes]
|
||||
) -> MaybeAwaitable: ...
|
||||
|
||||
@overload
|
||||
def broadcast(
|
||||
self, data: Union[bool, int, float, str, bytes]
|
||||
) -> MaybeAwaitable: ...
|
||||
def broadcast(self, data: bool | int | float | str | bytes) -> MaybeAwaitable: ...
|
||||
|
||||
def broadcast(self, data: object) -> MaybeAwaitable:
|
||||
"""broadcast(data)
|
||||
@@ -105,12 +90,15 @@ class BLERadio:
|
||||
|
||||
def observe(
|
||||
self, channel: int
|
||||
) -> Optional[
|
||||
Union[
|
||||
Tuple[Union[bool, int, float, str, bytes], ...],
|
||||
Union[bool, int, float, str, bytes],
|
||||
]
|
||||
]:
|
||||
) -> (
|
||||
tuple[bool | int | float | str | bytes, ...]
|
||||
| bool
|
||||
| int
|
||||
| float
|
||||
| str
|
||||
| bytes
|
||||
| None
|
||||
):
|
||||
"""observe(channel) -> bool | int | float | str | bytes | tuple | None
|
||||
|
||||
Retrieves the last observed data for a given channel.
|
||||
@@ -174,8 +162,8 @@ class Mailbox(Generic[T]):
|
||||
self,
|
||||
name: str,
|
||||
connection: Connection,
|
||||
encode: Optional[Callable[[T], bytes]] = None,
|
||||
decode: Optional[Callable[[bytes], T]] = None,
|
||||
encode: Callable[[T], bytes] | None = None,
|
||||
decode: Callable[[bytes], T] | None = None,
|
||||
):
|
||||
"""Mailbox(name, connection, encode=None, decode=None)
|
||||
|
||||
@@ -210,7 +198,7 @@ class Mailbox(Generic[T]):
|
||||
"""
|
||||
return ""
|
||||
|
||||
def send(self, value: T, brick: Optional[str] = None) -> None:
|
||||
def send(self, value: T, brick: str | None = None) -> None:
|
||||
"""send(value, brick=None)
|
||||
|
||||
Sends a value to this mailbox on connected devices.
|
||||
@@ -393,7 +381,7 @@ class AppData:
|
||||
initialization. After that, all methods may be used while multi-tasking.
|
||||
"""
|
||||
|
||||
def __init__(self, modes: List[Tuple[int, int]]):
|
||||
def __init__(self, modes: list[tuple[int, int]]):
|
||||
"""AppData(modes)
|
||||
|
||||
Arguments:
|
||||
@@ -410,7 +398,7 @@ class AppData:
|
||||
ValueError: If any mode number appears more than once.
|
||||
"""
|
||||
|
||||
def get_bytes(self, mode: int, index: Optional[int] = None) -> Union[bytes, int]:
|
||||
def get_bytes(self, mode: int, index: int | None = None) -> bytes | int:
|
||||
"""get_bytes(mode, index=None) -> bytes | int
|
||||
|
||||
Gets data received from the host for the given mode.
|
||||
@@ -462,6 +450,10 @@ class AppData:
|
||||
"""
|
||||
|
||||
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del Callable
|
||||
del Iterable
|
||||
del MaybeAwaitable
|
||||
del Sequence
|
||||
del T
|
||||
|
||||
+26
-23
@@ -5,31 +5,21 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Optional, Tuple, List
|
||||
|
||||
from . import _common
|
||||
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._common import (
|
||||
MaybeAwaitableInt,
|
||||
MaybeAwaitableFloat,
|
||||
MaybeAwaitableTuple,
|
||||
)
|
||||
from .parameters import Number, Port
|
||||
|
||||
from .parameters import Port, Color
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import _common
|
||||
from ._common import ColorLight, CommonColorSensor
|
||||
from .iodevices import AnalogSensor
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable
|
||||
|
||||
from typing import Callable, Optional, Tuple
|
||||
from ._common import (
|
||||
MaybeAwaitableFloat,
|
||||
MaybeAwaitableInt,
|
||||
MaybeAwaitableTuple,
|
||||
)
|
||||
from .parameters import Color, Port
|
||||
|
||||
|
||||
class Motor(_common.Motor):
|
||||
@@ -92,7 +82,7 @@ class ColorSensor(CommonColorSensor):
|
||||
|
||||
light = ColorLight()
|
||||
|
||||
def rgb(self) -> Tuple[int, int, int]:
|
||||
def rgb(self) -> tuple[int, int, int]:
|
||||
"""Measures the reflection of a surface using a red, green, and then a
|
||||
blue light.
|
||||
|
||||
@@ -237,7 +227,7 @@ class EnergyMeter:
|
||||
"""
|
||||
|
||||
def input(self) -> MaybeAwaitableTuple[int, int, int]:
|
||||
"""input() -> Tuple[int, int, int]
|
||||
"""input() -> tuple[int, int, int]
|
||||
|
||||
Measures the electrical signals at the input (bottom) side
|
||||
of the energy meter. It measures the voltage applied to it and the
|
||||
@@ -252,7 +242,7 @@ class EnergyMeter:
|
||||
"""
|
||||
|
||||
def output(self) -> MaybeAwaitableTuple[int, int, int]:
|
||||
"""output() -> Tuple[int, int, int]
|
||||
"""output() -> tuple[int, int, int]
|
||||
|
||||
Measures the electrical signals at the output (top) side
|
||||
of the energy meter. It measures the voltage applied to the external
|
||||
@@ -270,7 +260,7 @@ class EnergyMeter:
|
||||
class VernierAdapter(AnalogSensor):
|
||||
"""LEGO® MINDSTORMS® Education NXT/EV3 Adapter for Vernier Sensors."""
|
||||
|
||||
def __init__(self, port: Port, conversion: Optional[Callable[[int], float]] = None):
|
||||
def __init__(self, port: Port, conversion: Callable[[int], float] | None = None):
|
||||
"""VernierAdapter(port, conversion=None)
|
||||
|
||||
Arguments:
|
||||
@@ -315,3 +305,16 @@ class VernierAdapter(AnalogSensor):
|
||||
Returns:
|
||||
Converted sensor value.
|
||||
"""
|
||||
|
||||
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del AnalogSensor
|
||||
del Callable
|
||||
del Color
|
||||
del ColorLight
|
||||
del CommonColorSensor
|
||||
del MaybeAwaitableFloat
|
||||
del MaybeAwaitableInt
|
||||
del MaybeAwaitableTuple
|
||||
del Port
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import Enum
|
||||
from typing import Union, TYPE_CHECKING
|
||||
import os
|
||||
from enum import Enum
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from .tools import Matrix as _Matrix, vector as _vector
|
||||
|
||||
if TYPE_CHECKING or os.environ.get("SPHINX_BUILD") == "True":
|
||||
Number = Union[int, float]
|
||||
Number = int | float
|
||||
"""
|
||||
Numbers can be represented as integers or floating point values:
|
||||
|
||||
|
||||
+16
-13
@@ -5,13 +5,15 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Collection, Optional, Union
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import _common
|
||||
from .iodevices import LWP3Device
|
||||
from .parameters import Button, Color, Direction
|
||||
from .parameters import Button, Direction
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Collection
|
||||
|
||||
from ._common import (
|
||||
MaybeAwaitable,
|
||||
MaybeAwaitableBool,
|
||||
@@ -19,7 +21,7 @@ if TYPE_CHECKING:
|
||||
MaybeAwaitableInt,
|
||||
MaybeAwaitableTuple,
|
||||
)
|
||||
from .parameters import Number, Port
|
||||
from .parameters import Color, Number, Port
|
||||
|
||||
|
||||
class DCMotor(_common.DCMotor):
|
||||
@@ -44,7 +46,7 @@ class Motor(_common.Motor):
|
||||
self,
|
||||
port: Port,
|
||||
positive_direction: Direction = Direction.CLOCKWISE,
|
||||
gears: Optional[Union[Collection[int], Collection[Collection[int]]]] = None,
|
||||
gears: Collection[int] | Collection[Collection[int]] | None = None,
|
||||
reset_angle: bool = True,
|
||||
profile: Number = None,
|
||||
):
|
||||
@@ -82,7 +84,7 @@ class Motor(_common.Motor):
|
||||
motor type will be selected automatically (about 11 degrees).
|
||||
"""
|
||||
|
||||
def reset_angle(self, angle: Optional[Number] = None) -> None:
|
||||
def reset_angle(self, angle: Number | None = None) -> None:
|
||||
"""reset_angle(angle=None)
|
||||
|
||||
Sets the accumulated rotation angle of the motor to a desired value.
|
||||
@@ -114,11 +116,11 @@ class Remote(LWP3Device):
|
||||
Button.RIGHT_PLUS,
|
||||
)
|
||||
)
|
||||
address: Union[str, None]
|
||||
address: str | None
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = None,
|
||||
name: str | None = None,
|
||||
timeout: int = 10000,
|
||||
connect: bool = True,
|
||||
):
|
||||
@@ -148,7 +150,7 @@ class TechnicMoveHub(LWP3Device):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = None,
|
||||
name: str | None = None,
|
||||
timeout: int = 10000,
|
||||
connect: bool = True,
|
||||
):
|
||||
@@ -191,7 +193,7 @@ class MarioHub(LWP3Device):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = None,
|
||||
name: str | None = None,
|
||||
timeout: int = 10000,
|
||||
connect: bool = True,
|
||||
):
|
||||
@@ -263,7 +265,7 @@ class DuploTrain(LWP3Device):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: Optional[str] = None,
|
||||
name: str | None = None,
|
||||
timeout: int = 10000,
|
||||
connect: bool = True,
|
||||
):
|
||||
@@ -362,7 +364,7 @@ class TiltSensor:
|
||||
"""
|
||||
|
||||
def tilt(self) -> MaybeAwaitableTuple[int, int]:
|
||||
"""tilt() -> Tuple[int, int]: deg
|
||||
"""tilt() -> tuple[int, int]: deg
|
||||
|
||||
Measures the tilt relative to the horizontal plane.
|
||||
|
||||
@@ -566,7 +568,7 @@ class ColorLightMatrix:
|
||||
"""
|
||||
...
|
||||
|
||||
def on(self, color: Union[Color, Collection[Color]]) -> MaybeAwaitable:
|
||||
def on(self, color: Color | Collection[Color]) -> MaybeAwaitable:
|
||||
"""on(colors)
|
||||
|
||||
Turns the lights on.
|
||||
@@ -653,9 +655,10 @@ class Light:
|
||||
Turns off the light."""
|
||||
|
||||
|
||||
# HACK: exclude from jedi
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del Button
|
||||
del Collection
|
||||
del Color
|
||||
del Direction
|
||||
del LWP3Device
|
||||
|
||||
+16
-16
@@ -5,13 +5,13 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Tuple, Union, Optional, overload, TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, overload
|
||||
|
||||
from . import _common
|
||||
from .parameters import Stop
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._common import Motor, MaybeAwaitable
|
||||
from ._common import MaybeAwaitable, Motor
|
||||
from .parameters import Number
|
||||
|
||||
|
||||
@@ -120,8 +120,8 @@ class DriveBase:
|
||||
Accumulated angle since last reset.
|
||||
"""
|
||||
|
||||
def state(self) -> Tuple[int, int, int, int]:
|
||||
"""state() -> Tuple[int, int, int, int]
|
||||
def state(self) -> tuple[int, int, int, int]:
|
||||
"""state() -> tuple[int, int, int, int]
|
||||
|
||||
Gets the state of the robot.
|
||||
|
||||
@@ -150,22 +150,22 @@ class DriveBase:
|
||||
@overload
|
||||
def settings(
|
||||
self,
|
||||
straight_speed: Optional[Number] = None,
|
||||
straight_acceleration: Optional[Union[Number, Tuple[Number, Number]]] = None,
|
||||
turn_rate: Optional[Number] = None,
|
||||
turn_acceleration: Optional[Union[Number, Tuple[Number, Number]]] = None,
|
||||
straight_speed: Number | None = None,
|
||||
straight_acceleration: Number | tuple[Number, Number] | None = None,
|
||||
turn_rate: Number | None = None,
|
||||
turn_acceleration: Number | tuple[Number, Number] | None = None,
|
||||
) -> None: ...
|
||||
|
||||
@overload
|
||||
def settings(
|
||||
self,
|
||||
) -> Tuple[int, Union[int, Tuple[int, int]], int, Union[int, Tuple[int, int]]]: ...
|
||||
) -> tuple[int, int | tuple[int, int], int, int | tuple[int, int]]: ...
|
||||
|
||||
def settings(self, *args):
|
||||
"""
|
||||
settings(straight_speed, straight_acceleration, turn_rate, turn_acceleration)
|
||||
settings() -> Tuple[int, int, int, int]
|
||||
settings() -> Tuple[int, Tuple[int, int], int, Tuple[int, int]]
|
||||
settings() -> tuple[int, int, int, int]
|
||||
settings() -> tuple[int, tuple[int, int], int, tuple[int, int]]
|
||||
|
||||
Configures the drive base speed and acceleration.
|
||||
|
||||
@@ -183,13 +183,13 @@ class DriveBase:
|
||||
|
||||
Arguments:
|
||||
straight_speed (Number, mm/s): Straight-line speed of the robot.
|
||||
straight_acceleration (Number or Tuple[Number, Number], mm/s²):
|
||||
straight_acceleration (Number or tuple[Number, Number], mm/s²):
|
||||
Straight-line acceleration and deceleration of the robot.
|
||||
Provide a single value to use the same acceleration and
|
||||
deceleration. Provide a tuple with two values to set them
|
||||
separately.
|
||||
turn_rate (Number, deg/s): Turn rate of the robot.
|
||||
turn_acceleration (Number or Tuple[Number, Number], deg/s²):
|
||||
turn_acceleration (Number or tuple[Number, Number], deg/s²):
|
||||
Angular acceleration and deceleration of the robot.
|
||||
Provide a single value to use the same acceleration and
|
||||
deceleration. Provide a tuple with two values to set them
|
||||
@@ -332,7 +332,7 @@ class Car:
|
||||
def __init__(
|
||||
self,
|
||||
steer_motor: Motor,
|
||||
drive_motors: Motor | Tuple[Motor, ...],
|
||||
drive_motors: Motor | tuple[Motor, ...],
|
||||
torque_limit: Number = 100,
|
||||
):
|
||||
"""Car(steer_motor, drive_motors, torque_limit=100)
|
||||
@@ -390,9 +390,9 @@ class Car:
|
||||
"""
|
||||
|
||||
|
||||
# HACK: hide from jedi
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del MaybeAwaitable
|
||||
del Motor
|
||||
del Number
|
||||
del MaybeAwaitable
|
||||
del Stop
|
||||
|
||||
+13
-7
@@ -5,9 +5,12 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any, Optional, Sequence, Tuple, overload, Coroutine
|
||||
from typing import TYPE_CHECKING, overload
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Coroutine, Sequence
|
||||
from typing import Any
|
||||
|
||||
from ._common import MaybeAwaitable, MaybeAwaitableTuple
|
||||
from .parameters import Number
|
||||
|
||||
@@ -143,7 +146,7 @@ class Matrix:
|
||||
original."""
|
||||
|
||||
@property
|
||||
def shape(self) -> Tuple[int, int]:
|
||||
def shape(self) -> tuple[int, int]:
|
||||
"""Returns a tuple (``m``, ``n``),
|
||||
where ``m`` is the number of rows and ``n`` is the number of columns.
|
||||
"""
|
||||
@@ -211,7 +214,7 @@ def cross(a: Matrix, b: Matrix) -> Matrix:
|
||||
"""
|
||||
|
||||
|
||||
def read_input_byte(last: bool = False, chr: bool = False) -> Optional[int | str]:
|
||||
def read_input_byte(last: bool = False, chr: bool = False) -> int | str | None:
|
||||
"""
|
||||
read_input_byte() -> int | str | None
|
||||
|
||||
@@ -254,7 +257,7 @@ def hub_menu(*symbols: int | str) -> int | str:
|
||||
|
||||
def multitask(*coroutines: Coroutine, race=False) -> MaybeAwaitableTuple:
|
||||
"""
|
||||
multitask(coroutine1, coroutine2, ...) -> Tuple
|
||||
multitask(coroutine1, coroutine2, ...) -> tuple
|
||||
|
||||
Runs multiple coroutines concurrently. This creates a new coroutine that
|
||||
can be used like any other, including in another ``multitask`` statement.
|
||||
@@ -272,7 +275,7 @@ def multitask(*coroutines: Coroutine, race=False) -> MaybeAwaitableTuple:
|
||||
"""
|
||||
|
||||
|
||||
def run_task(coroutine: Coroutine) -> Optional[bool]:
|
||||
def run_task(coroutine: Coroutine) -> bool | None:
|
||||
"""
|
||||
run_task(coroutine) -> bool | None
|
||||
|
||||
@@ -290,8 +293,11 @@ def run_task(coroutine: Coroutine) -> Optional[bool]:
|
||||
"""
|
||||
|
||||
|
||||
# HACK: hide from jedi
|
||||
# Hide type-only names from jedi completions in the module namespace.
|
||||
if TYPE_CHECKING:
|
||||
del Number
|
||||
del Any
|
||||
del Coroutine
|
||||
del MaybeAwaitable
|
||||
del MaybeAwaitableTuple
|
||||
del Number
|
||||
del Sequence
|
||||
|
||||
Reference in New Issue
Block a user