pybricks.parameters: Add typing.

This commit is contained in:
Laurens Valk
2022-06-10 10:05:13 +02:00
parent fb3446ad0d
commit 877391dea7
4 changed files with 104 additions and 164 deletions
+1 -4
View File
@@ -4,16 +4,13 @@
"""Generic cross-platform module for typical devices like lights, displays,
speakers, and batteries."""
from .parameters import Direction, Stop, Button, Port, Color, Side
from .parameters import Direction, Stop, Button, Port, Color, Side, Number
from .geometry import Matrix, Axis
from typing import Union, Iterable, overload, Optional, Tuple, Collection
Number = Union[int, float]
class System:
"""System control actions for a hub."""
+101 -49
View File
@@ -1,10 +1,17 @@
# SPDX-License-Identifier: MIT
# Copyright (c) 2018-2020 The Pybricks Authors
# Copyright (c) 2018-2022 The Pybricks Authors
"""Constant parameters/arguments for the Pybricks API."""
from __future__ import annotations
from typing import Union
from enum import Enum as _Enum
from .geometry import Matrix
Number = Union[int, float]
class _PybricksEnumMeta(type(_Enum)):
def __dir__(cls):
@@ -30,7 +37,18 @@ class _PybricksEnum(_Enum, metaclass=_PybricksEnumMeta):
class Color:
"""Light or surface color."""
def __init__(self, h, s=100, v=100):
h: int
s: int
v: int
def __init__(self, h: Number, s: Number = 100, v: Number = 100):
"""Color(h, s=100, v=100)
Arguments:
h (Number, deg): Hue (0--360)
s (Number, %): Saturation.
v (Number, %): Brightness value.
"""
self.h = h % 360
self.s = max(0, min(s, 100))
self.v = max(0, min(v, 100))
@@ -38,25 +56,20 @@ class Color:
def __repr__(self):
return "Color(h={}, s={}, v={})".format(self.h, self.s, self.v)
def __eq__(self, other):
return (
isinstance(other, Color)
and self.h == other.h
and self.s == other.s
and self.v == other.v
)
def __eq__(self, other: Color) -> bool:
...
def __mul__(self, scale):
def __mul__(self, scale: float) -> Color:
v = max(0, min(self.v * scale, 100))
return Color(self.h, self.s, int(v), self.name)
def __rmul__(self, scale):
def __rmul__(self, scale: float) -> Color:
return self.__mul__(scale)
def __truediv__(self, scale):
def __truediv__(self, scale: float) -> Color:
return self.__mul__(1 / scale)
def __floordiv__(self, scale):
def __floordiv__(self, scale: int) -> Color:
return self.__mul__(1 / scale)
@@ -79,30 +92,30 @@ class Port(_PybricksEnum):
"""Port on the programmable brick or hub."""
# Generic motor/sensor ports
A = ord("A")
B = ord("B")
C = ord("C")
D = ord("D")
E = ord("E")
F = ord("F")
A: Port = ord("A")
B: Port = ord("B")
C: Port = ord("C")
D: Port = ord("D")
E: Port = ord("E")
F: Port = ord("F")
# NXT/EV3 sensor ports
S1 = ord("1")
S2 = ord("2")
S3 = ord("3")
S4 = ord("4")
S1: Port = ord("1")
S2: Port = ord("2")
S3: Port = ord("3")
S4: Port = ord("4")
class Stop(_PybricksEnum):
"""Action after the motor stops."""
COAST = 0
COAST: Port = 0
"""Let the motor move freely."""
BRAKE = 1
BRAKE: Port = 1
"""Passively resist small external forces."""
HOLD = 2
HOLD: Port = 2
"""Keep controlling the motor to hold it at the commanded angle. This is
only available on motors with encoders."""
@@ -110,39 +123,78 @@ class Stop(_PybricksEnum):
class Direction(_PybricksEnum):
"""Rotational direction for positive speed or angle values."""
CLOCKWISE = 0
CLOCKWISE: Direction = 0
"""A positive speed value should make the motor move clockwise."""
COUNTERCLOCKWISE = 1
COUNTERCLOCKWISE: Direction = 1
"""A positive speed value should make the motor move counterclockwise."""
class Button(_PybricksEnum):
"""Buttons on a hub or remote."""
LEFT_DOWN = 1
LEFT_MINUS = 1
DOWN = 2
RIGHT_DOWN = 3
RIGHT_MINUS = 3
LEFT = 4
CENTER = 5
RIGHT = 6
LEFT_UP = 7
LEFT_PLUS = 7
UP = 8
BEACON = 8
RIGHT_UP = 9
RIGHT_PLUS = 9
BLUETOOTH = 9
LEFT_DOWN: Button = 1
LEFT_MINUS: Button = 1
DOWN: Button = 2
RIGHT_DOWN: Button = 3
RIGHT_MINUS: Button = 3
LEFT: Button = 4
CENTER: Button = 5
RIGHT: Button = 6
LEFT_UP: Button = 7
LEFT_PLUS: Button = 7
UP: Button = 8
BEACON: Button = 8
RIGHT_UP: Button = 9
RIGHT_PLUS: Button = 9
BLUETOOTH: Button = 9
class Side(_PybricksEnum):
"""Side of a hub or a sensor."""
RIGHT = 6
FRONT = 0
TOP = 8
LEFT = 4
BACK = 5
BOTTOM = 2
RIGHT: Side = 6
FRONT: Side = 0
TOP: Side = 8
LEFT: Side = 4
BACK: Side = 5
BOTTOM: Side = 2
class Icon:
UP: Matrix
DOWN: Matrix
LEFT: Matrix
RIGHT: Matrix
ARROW_RIGHT_UP: Matrix
ARROW_RIGHT_DOWN: Matrix
ARROW_LEFT_UP: Matrix
ARROW_LEFT_DOWN: Matrix
ARROW_UP: Matrix
ARROW_DOWN: Matrix
ARROW_LEFT: Matrix
ARROW_RIGHT: Matrix
HAPPY: Matrix
SAD: Matrix
EYE_LEFT: Matrix
EYE_RIGHT: Matrix
EYE_LEFT_BLINK: Matrix
EYE_RIGHT_BLINK: Matrix
EYE_RIGHT_BROW: Matrix
EYE_LEFT_BROW: Matrix
EYE_LEFT_BROW_UP: Matrix
EYE_RIGHT_BROW_UP: Matrix
HEART: Matrix
PAUSE: Matrix
EMPTY: Matrix
FULL: Matrix
SQUARE: Matrix
TRIANGLE_RIGHT: Matrix
TRIANGLE_LEFT: Matrix
TRIANGLE_UP: Matrix
TRIANGLE_DOWN: Matrix
CIRCLE: Matrix
CLOCKWISE: Matrix
COUNTERCLOCKWISE: Matrix
TRUE: Matrix
FALSE: Matrix
-109
View File
@@ -1,109 +0,0 @@
# SPDX-License-Identifier: MIT
# Copyright (c) 2020 The Pybricks Authors
from geometry import Matrix
class Color:
BLACK: Color
BLUE: Color
BROWN: Color
CYAN: Color
GRAY: Color
GREEN: Color
MAGENTA: Color
NONE: Color
ORANGE: Color
RED: Color
VIOLET: Color
WHITE: Color
YELLOW: Color
def __init__(self, h: int, s: int = 100, v: int = 100): ...
def __eq__(self, other: "Color") -> bool: ...
def __mul__(self, scale: float) -> Color: ...
def __rmul__(self, scale: float) -> Color: ...
def __truediv__(self, scale: float) -> Color: ...
def __floordiv__(self, scale: int) -> Color: ...
class Port:
A: Port
B: Port
C: Port
D: Port
E: Port
F: Port
S1: Port
S2: Port
S3: Port
S4: Port
class Stop:
COAST: Stop
BRAKE: Stop
HOLD: Stop
class Direction:
CLOCKWISE: Direction
COUNTERCLOCKWISE: Direction
class Button:
LEFT_DOWN: Button
LEFT_MINUS: Button
DOWN: Button
RIGHT_DOWN: Button
RIGHT_MINUS: Button
LEFT: Button
CENTER: Button
RIGHT: Button
LEFT_UP: Button
LEFT_PLUS: Button
UP: Button
BEACON: Button
RIGHT_UP: Button
RIGHT_PLUS: Button
BLUETOOTH: Button
class Side:
RIGHT: Side
FRONT: Side
TOP: Side
LEFT: Side
BACK: Side
BOTTOM: Side
class Icon:
UP: Matrix
DOWN: Matrix
LEFT: Matrix
RIGHT: Matrix
ARROW_RIGHT_UP: Matrix
ARROW_RIGHT_DOWN: Matrix
ARROW_LEFT_UP: Matrix
ARROW_LEFT_DOWN: Matrix
ARROW_UP: Matrix
ARROW_DOWN: Matrix
ARROW_LEFT: Matrix
ARROW_RIGHT: Matrix
HAPPY: Matrix
SAD: Matrix
EYE_LEFT: Matrix
EYE_RIGHT: Matrix
EYE_LEFT_BLINK: Matrix
EYE_RIGHT_BLINK: Matrix
EYE_RIGHT_BROW: Matrix
EYE_LEFT_BROW: Matrix
EYE_LEFT_BROW_UP: Matrix
EYE_RIGHT_BROW_UP: Matrix
HEART: Matrix
PAUSE: Matrix
EMPTY: Matrix
FULL: Matrix
SQUARE: Matrix
TRIANGLE_RIGHT: Matrix
TRIANGLE_LEFT: Matrix
TRIANGLE_UP: Matrix
TRIANGLE_DOWN: Matrix
CIRCLE: Matrix
CLOCKWISE: Matrix
COUNTERCLOCKWISE: Matrix
TRUE: Matrix
FALSE: Matrix
+2 -2
View File
@@ -3,9 +3,9 @@
"""Robotics module for the Pybricks API."""
from ._common import Control, Motor, Number
from ._common import Control, Motor
from .parameters import Stop as _Stop
from .parameters import Stop as _Stop, Number
from typing import Tuple, Optional, overload