diff --git a/.github/workflows/publish-ide-docs.yml b/.github/workflows/publish-ide-docs.yml index 15a4db00..3c6a08b8 100644 --- a/.github/workflows/publish-ide-docs.yml +++ b/.github/workflows/publish-ide-docs.yml @@ -2,7 +2,7 @@ name: Release @pybricks/ide-docs on: push: - tags: + tags: - '@pybricks/ide-docs/**' jobs: @@ -16,10 +16,10 @@ jobs: - uses: actions/checkout@v3 with: submodules: recursive - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: 3.11 - name: Install dependencies run: | pip install poetry diff --git a/.vscode/settings.json b/.vscode/settings.json index 04b39b75..a10b467e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,6 @@ { + "editor.rulers": [88], + "files.exclude": { "**/__pycache__": true, }, diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..5b4fb3a5 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +install-editable: + @ install/install-editable diff --git a/install/install-editable b/install/install-editable new file mode 100755 index 00000000..c2d91030 --- /dev/null +++ b/install/install-editable @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + + +python3 -m pip install PEP517 PIP SetUpTools Wheel --upgrade + +python3 -m pip install -e . --upgrade --user diff --git a/install/install-editable.bat b/install/install-editable.bat new file mode 100644 index 00000000..6f4bd96d --- /dev/null +++ b/install/install-editable.bat @@ -0,0 +1,3 @@ +python -m pip install PEP517 PIP SetUpTools Wheel --upgrade + +python -m pip install -e . --upgrade --user diff --git a/pyproject.toml b/pyproject.toml index 96cdc6e6..c8dcbe23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,9 @@ packages = [ ] [tool.poetry.dependencies] -python = "^3.8" +python = ">= 3.11" + +Agent-Behavior-Model = {url = "https://github.com/IoT-Robotics/Agent-Behavior-Model/archive/main.zip"} [tool.poetry.group.lint.dependencies] black = "^22.3.0" diff --git a/src/pybricks/__init__.py b/src/pybricks/__init__.py index ffceb7bc..f728a7b3 100644 --- a/src/pybricks/__init__.py +++ b/src/pybricks/__init__.py @@ -1,5 +1,7 @@ from typing import Tuple +from abm import interactive # noqa: F401 + version: Tuple[str, str, str] = ( "hub", diff --git a/src/pybricks/abm/__init__.py b/src/pybricks/abm/__init__.py new file mode 100755 index 00000000..39205758 --- /dev/null +++ b/src/pybricks/abm/__init__.py @@ -0,0 +1,4 @@ +"""ABM-decorating Pybricks actuating & sensing functions & class methods.""" + + +from . import _common, ev3, nxt, pup, io, msg, robotics, tools # noqa: F401 diff --git a/src/pybricks/abm/_common/__init__.py b/src/pybricks/abm/_common/__init__.py new file mode 100755 index 00000000..7f8d4eab --- /dev/null +++ b/src/pybricks/abm/_common/__init__.py @@ -0,0 +1,13 @@ +"""ABM-decorating pybricks._common.""" + + +# _common +# ======= +from . import (accelerometer, # noqa: F401 + battery, + color_light, + color_sensor, + motor, + key_pad, + speaker, + system) diff --git a/src/pybricks/abm/_common/accelerometer/__init__.py b/src/pybricks/abm/_common/accelerometer/__init__.py new file mode 100755 index 00000000..bc0b0fca --- /dev/null +++ b/src/pybricks/abm/_common/accelerometer/__init__.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks._common.Accelerometer.""" + + +from ...._common import Accelerometer +from ...util import sense_decor +from . import simple, imu # noqa: F401 + + +# Accelerometer +# ------------- +for s in ( + 'acceleration', + 'tilt', +): + sense_decor(Accelerometer, s) diff --git a/src/pybricks/abm/_common/accelerometer/imu.py b/src/pybricks/abm/_common/accelerometer/imu.py new file mode 100755 index 00000000..98774700 --- /dev/null +++ b/src/pybricks/abm/_common/accelerometer/imu.py @@ -0,0 +1,19 @@ +"""ABM-decorating pybricks._common.IMU.""" + + +from ...._common import IMU +from ...util import act_decor, sense_decor + + +# IMU +# --- +for a in ( + 'reset_heading', +): + act_decor(IMU, a) + +for s in ( + 'heading', + 'angular_velocity', +): + sense_decor(IMU, s) diff --git a/src/pybricks/abm/_common/accelerometer/simple.py b/src/pybricks/abm/_common/accelerometer/simple.py new file mode 100755 index 00000000..be521a96 --- /dev/null +++ b/src/pybricks/abm/_common/accelerometer/simple.py @@ -0,0 +1,14 @@ +"""ABM-decorating pybricks._common.SimpleAccelerometer.""" + + +from ...._common import SimpleAccelerometer +from ...util import sense_decor + + +# SimpleAccelerometer +# ------------------- +for s in ( + 'acceleration', + 'up', +): + sense_decor(SimpleAccelerometer, s) diff --git a/src/pybricks/abm/_common/battery/__init__.py b/src/pybricks/abm/_common/battery/__init__.py new file mode 100755 index 00000000..6938bca7 --- /dev/null +++ b/src/pybricks/abm/_common/battery/__init__.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks._common.Battery.""" + + +from ...._common import Battery +from ...util import sense_decor +from . import charger # noqa: F401 + + +# Battery +# ------- +for s in ( + 'voltage', + 'current', +): + sense_decor(Battery, s) diff --git a/src/pybricks/abm/_common/battery/charger.py b/src/pybricks/abm/_common/battery/charger.py new file mode 100755 index 00000000..d83a520b --- /dev/null +++ b/src/pybricks/abm/_common/battery/charger.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks._common.Charger.""" + + +from ...._common import Charger +from ...util import sense_decor + + +# Charger +# ------- +for s in ( + 'connected', + 'status', + 'current', +): + sense_decor(Charger, s) diff --git a/src/pybricks/abm/_common/color_light/__init__.py b/src/pybricks/abm/_common/color_light/__init__.py new file mode 100755 index 00000000..19b9f339 --- /dev/null +++ b/src/pybricks/abm/_common/color_light/__init__.py @@ -0,0 +1,17 @@ +"""ABM-decorating pybricks._common.ColorLight.""" + + +from ...._common import ColorLight +from ...util import act_decor +from . import light_array, light_matrix # noqa: F401 + + +# ColorLight +# ---------- +for a in ( + 'on', + 'off', + 'blink', + 'animate', +): + act_decor(ColorLight, a) diff --git a/src/pybricks/abm/_common/color_light/light_array.py b/src/pybricks/abm/_common/color_light/light_array.py new file mode 100755 index 00000000..4d93f3d8 --- /dev/null +++ b/src/pybricks/abm/_common/color_light/light_array.py @@ -0,0 +1,14 @@ +"""ABM-decorating pybricks._common.LightArray.""" + + +from ...._common import LightArray +from ...util import act_decor + + +# LightArray +# ---------- +for a in ( + 'on', + 'off', +): + act_decor(LightArray, a) diff --git a/src/pybricks/abm/_common/color_light/light_matrix.py b/src/pybricks/abm/_common/color_light/light_matrix.py new file mode 100755 index 00000000..032f20ba --- /dev/null +++ b/src/pybricks/abm/_common/color_light/light_matrix.py @@ -0,0 +1,20 @@ +"""ABM-decorating pybricks._common.LightMatrix.""" + + +from ...._common import LightMatrix +from ...util import act_decor + + +# LightMatrix +# ----------- +for a in ( + 'orientation', + 'image', + 'animate', + 'pixel', + 'off', + 'number', + 'char', + 'text', +): + act_decor(LightMatrix, a) diff --git a/src/pybricks/abm/_common/color_sensor/__init__.py b/src/pybricks/abm/_common/color_sensor/__init__.py new file mode 100755 index 00000000..cb22a942 --- /dev/null +++ b/src/pybricks/abm/_common/color_sensor/__init__.py @@ -0,0 +1,4 @@ +"""ABM-decorating pybricks._common.ColorSensor.""" + + +from . import ambient, common # noqa: F401 diff --git a/src/pybricks/abm/_common/color_sensor/ambient.py b/src/pybricks/abm/_common/color_sensor/ambient.py new file mode 100755 index 00000000..fda6f591 --- /dev/null +++ b/src/pybricks/abm/_common/color_sensor/ambient.py @@ -0,0 +1,14 @@ +"""ABM-decorating pybricks._common.AmbientColorSensor.""" + + +from ...._common import AmbientColorSensor +from ...util import sense_decor + + +# AmbientColorSensor +# ------------------ +for s in ( + 'color', + 'hsv', +): + sense_decor(AmbientColorSensor, s) diff --git a/src/pybricks/abm/_common/color_sensor/common.py b/src/pybricks/abm/_common/color_sensor/common.py new file mode 100755 index 00000000..6c962b26 --- /dev/null +++ b/src/pybricks/abm/_common/color_sensor/common.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks._common.CommonColorSensor.""" + + +from ...._common import CommonColorSensor +from ...util import act_decor, sense_decor + + +# CommonColorSensor +# ----------------- +for a in ( + # 'detectable_colors', # *** NOTE: OVERLOADED METHOD *** +): + act_decor(CommonColorSensor, a) + +for s in ( + 'color', + 'hsv', + 'ambient', + 'reflection', +): + sense_decor(CommonColorSensor, s) diff --git a/src/pybricks/abm/_common/key_pad.py b/src/pybricks/abm/_common/key_pad.py new file mode 100755 index 00000000..a912d726 --- /dev/null +++ b/src/pybricks/abm/_common/key_pad.py @@ -0,0 +1,13 @@ +"""ABM-decorating pybricks._common.Keypad.""" + + +from ..._common import Keypad +from ..util import sense_decor + + +# Keypad +# ------ +for s in ( + 'pressed', +): + sense_decor(Keypad, s) diff --git a/src/pybricks/abm/_common/motor/__init__.py b/src/pybricks/abm/_common/motor/__init__.py new file mode 100755 index 00000000..0f20ceb1 --- /dev/null +++ b/src/pybricks/abm/_common/motor/__init__.py @@ -0,0 +1,27 @@ +"""ABM-decorating pybricks._common.Motor.""" + + +from ...._common import Motor +from ...util import act_decor, sense_decor +from . import control, dc # noqa: F401 + + +# Motor +# ----- +for a in ( + 'reset_angle', + 'hold', + 'run', + 'run_time', + 'run_angle', + 'run_target', + 'run_until_stalled', + 'track_target', +): + act_decor(Motor, a) + +for s in ( + 'angle', + 'speed', +): + sense_decor(Motor, s) diff --git a/src/pybricks/abm/_common/motor/control.py b/src/pybricks/abm/_common/motor/control.py new file mode 100755 index 00000000..5d8c83c7 --- /dev/null +++ b/src/pybricks/abm/_common/motor/control.py @@ -0,0 +1,35 @@ +"""ABM-decorating pybricks._common.Control.""" + + +from ...._common import Control +from ...util import act_decor, sense_decor + + +# Control +# ------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.limits + # 'limits', # *** NOTE: OVERLOADED METHOD *** + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.pid + # 'pid', # *** NOTE: OVERLOADED METHOD *** + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.target_tolerances + # 'target_tolerances', # *** NOTE: OVERLOADED METHOD *** + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.stall_tolerances + # 'stall_tolerances', # *** NOTE: OVERLOADED METHOD *** +): + act_decor(Control, a) + +for s in ( + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.stalled + 'stalled', + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.done + 'done', + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.Motor.control.load + 'load', +): + sense_decor(Control, s) diff --git a/src/pybricks/abm/_common/motor/dc.py b/src/pybricks/abm/_common/motor/dc.py new file mode 100755 index 00000000..354aa1f1 --- /dev/null +++ b/src/pybricks/abm/_common/motor/dc.py @@ -0,0 +1,16 @@ +"""ABM-decorating pybricks._common.DCMotor""" + + +from ...._common import DCMotor +from ...util import act_decor + + +# DCMotor +# ------- +for a in ( + 'dc', + 'stop', + 'brake', + # 'settings', # *** NOTE: OVERLOADED METHOD *** +): + act_decor(DCMotor, a) diff --git a/src/pybricks/abm/_common/speaker.py b/src/pybricks/abm/_common/speaker.py new file mode 100755 index 00000000..8056d706 --- /dev/null +++ b/src/pybricks/abm/_common/speaker.py @@ -0,0 +1,16 @@ +"""ABM-decorating pybricks._common.Speaker.""" + + +from ..._common import Speaker +from ..util import act_decor + + +# Speaker +# ------- +for a in ( + 'volume', + 'beep', + 'play_notes', + +): + act_decor(Speaker, a) diff --git a/src/pybricks/abm/_common/system.py b/src/pybricks/abm/_common/system.py new file mode 100755 index 00000000..73c63e0e --- /dev/null +++ b/src/pybricks/abm/_common/system.py @@ -0,0 +1,20 @@ +"""ABM-decorating pybricks._common.System.""" + + +from ..._common import System +from ..util import act_decor, sense_decor + + +# System +# ------ +for a in ( + 'set_stop_button', + 'shutdown', +): + act_decor(System, a) + +for s in ( + 'reset_reason', + 'name', +): + sense_decor(System, s) diff --git a/src/pybricks/abm/ev3/__init__.py b/src/pybricks/abm/ev3/__init__.py new file mode 100755 index 00000000..fe952bc2 --- /dev/null +++ b/src/pybricks/abm/ev3/__init__.py @@ -0,0 +1,19 @@ +"""ABM-decorating pybricks.hubs.EV3Brick & pybricks.ev3devices.""" + + +from . import ( # noqa: F401 + # EV3Brick + # pybricks.com/ev3-micropython/hubs + # --------------------------------- + hub, + speaker, + + # ev3devices + # (pybricks.com/ev3-micropython/ev3devices) + # ========================================= + motor, + color_sensor, + gyro_sensor, + infrared_sensor, + touch_sensor, + ultrasonic_sensor) diff --git a/src/pybricks/abm/ev3/color_sensor.py b/src/pybricks/abm/ev3/color_sensor.py new file mode 100755 index 00000000..f82fb9e4 --- /dev/null +++ b/src/pybricks/abm/ev3/color_sensor.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.ev3devices.ColorSensor.""" + + +from ...ev3devices import ColorSensor +from ..util import sense_decor + + +# ColorSensor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.ColorSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.ColorSensor.color + 'color', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.ColorSensor.ambient + 'ambient', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.ColorSensor.reflection + 'reflection', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.ColorSensor.rgb + 'rgb', +): + sense_decor(ColorSensor, s) diff --git a/src/pybricks/abm/ev3/gyro_sensor.py b/src/pybricks/abm/ev3/gyro_sensor.py new file mode 100755 index 00000000..6a86eaca --- /dev/null +++ b/src/pybricks/abm/ev3/gyro_sensor.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.ev3devices.GyroSensor.""" + + +from ...ev3devices import GyroSensor +from ..util import act_decor, sense_decor + + +# GyroSensor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.GyroSensor) +# ------------------------------------------------------------------------ +for a in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.GyroSensor.reset_angle + 'reset_angle', +): + act_decor(GyroSensor, a) + +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.GyroSensor.speed + 'speed', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.GyroSensor.angle + 'angle', +): + sense_decor(GyroSensor, s) diff --git a/src/pybricks/abm/ev3/hub.py b/src/pybricks/abm/ev3/hub.py new file mode 100755 index 00000000..3f1320ec --- /dev/null +++ b/src/pybricks/abm/ev3/hub.py @@ -0,0 +1,7 @@ +"""ABM-decorating pybricks.hubs.EV3Brick.""" + + +# EV3Brick +# (pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick) +# ---------------------------------------------------------- +# TODO diff --git a/src/pybricks/abm/ev3/infrared_sensor.py b/src/pybricks/abm/ev3/infrared_sensor.py new file mode 100755 index 00000000..89af9aa9 --- /dev/null +++ b/src/pybricks/abm/ev3/infrared_sensor.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.ev3devices.InfraredSensor.""" + + +from ...ev3devices import InfraredSensor +from ..util import sense_decor + + +# InfraredSensor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.InfraredSensor) +# ---------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.InfraredSensor.distance + 'distance', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.InfraredSensor.beacon + 'beacon', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.InfraredSensor.buttons + 'buttons', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.InfraredSensor.keypad + 'keypad', +): + sense_decor(InfraredSensor, s) diff --git a/src/pybricks/abm/ev3/motor.py b/src/pybricks/abm/ev3/motor.py new file mode 100755 index 00000000..fe90cfa7 --- /dev/null +++ b/src/pybricks/abm/ev3/motor.py @@ -0,0 +1,51 @@ +"""ABM-decorating pybricks.ev3devices.Motor.""" + + +from ...ev3devices import Motor +from ..util import act_decor, sense_decor + + +# Motor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor) +# ------------------------------------------------------------------- +for a in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.reset_angle + # 'reset_angle', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.stop + # 'stop', # already decorated in _common.DCMotor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.brake + # 'brake', # already decorated in _common.DCMotor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.hold + # 'hold', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.run + # 'run', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.run_time + # 'run_time', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.run_angle + # 'run_angle', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.run_target + # 'run_target', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.run_until_stalled + # 'run_until_stalled', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.dc + # 'dc', # already decorated in _common.DCMotor +): + act_decor(Motor, a) + +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.speed + # 'speed', # already decorated in _common.Motor + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.Motor.angle + # 'angle', # already decorated in _common.Motor +): + sense_decor(Motor, s) diff --git a/src/pybricks/abm/ev3/speaker.py b/src/pybricks/abm/ev3/speaker.py new file mode 100755 index 00000000..5c2d2095 --- /dev/null +++ b/src/pybricks/abm/ev3/speaker.py @@ -0,0 +1,29 @@ +"""ABM-decorating EV3 Speaker.""" + + +from ...ev3dev._speaker import Speaker +from ..util import act_decor + + +# Speaker +# ------- +for a in ( + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.beep + 'beep', + + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.play_notes + 'play_notes', + + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.play_file + 'play_file', + + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.say + 'say', + + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.set_speech_options + 'set_speech_options', + + # pybricks.com/ev3-micropython/hubs#pybricks.hubs.EV3Brick.speaker.set_volume + 'set_volume', +): + act_decor(Speaker, a) diff --git a/src/pybricks/abm/ev3/touch_sensor.py b/src/pybricks/abm/ev3/touch_sensor.py new file mode 100755 index 00000000..4e738a16 --- /dev/null +++ b/src/pybricks/abm/ev3/touch_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.ev3devices.TouchSensor.""" + + +from ...ev3devices import TouchSensor +from ..util import sense_decor + + +# TouchSensor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.TouchSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.TouchSensor.pressed + 'pressed', +): + sense_decor(TouchSensor, s) diff --git a/src/pybricks/abm/ev3/ultrasonic_sensor.py b/src/pybricks/abm/ev3/ultrasonic_sensor.py new file mode 100755 index 00000000..910466fc --- /dev/null +++ b/src/pybricks/abm/ev3/ultrasonic_sensor.py @@ -0,0 +1,18 @@ +"""ABM-decorating pybricks.ev3devices.UltrasonicSensor.""" + + +from ...ev3devices import UltrasonicSensor +from ..util import sense_decor + + +# UltrasonicSensor +# (pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.UltrasonicSensor) +# ------------------------------------------------------------------------------ +for s in ( + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.UltrasonicSensor.distance + 'distance', + + # pybricks.com/ev3-micropython/ev3devices#pybricks.ev3devices.UltrasonicSensor.presence + 'presence', +): + sense_decor(UltrasonicSensor, s) diff --git a/src/pybricks/abm/io/__init__.py b/src/pybricks/abm/io/__init__.py new file mode 100755 index 00000000..93e2cfc6 --- /dev/null +++ b/src/pybricks/abm/io/__init__.py @@ -0,0 +1,8 @@ +"""ABM-decorating pybricks.iodevices.""" + + +# iodevices +# (docs.pybricks.com/en/latest/iodevices) +# ======================================= +from . import (analog_sensor, dc_motor, # noqa: F401 + ev3dev_sensor, i2c, lump, lwp3, pup, uart) diff --git a/src/pybricks/abm/io/analog_sensor.py b/src/pybricks/abm/io/analog_sensor.py new file mode 100755 index 00000000..d5051580 --- /dev/null +++ b/src/pybricks/abm/io/analog_sensor.py @@ -0,0 +1,27 @@ +"""ABM-decorating pybricks.iodevices.AnalogSensor.""" + + +from ...iodevices import AnalogSensor +from ..util import act_decor, sense_decor + + +# AnalogSensor +# (pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.AnalogSensor) +# ------------------------------------------------------------------------ +for a in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.AnalogSensor.active + 'active', + + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.AnalogSensor.passive + 'passive', +): + act_decor(AnalogSensor, a) + +for s in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.AnalogSensor.voltage + 'voltage', + + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.AnalogSensor.resistance + 'resistance', +): + sense_decor(AnalogSensor, s) diff --git a/src/pybricks/abm/io/dc_motor.py b/src/pybricks/abm/io/dc_motor.py new file mode 100755 index 00000000..f964e34a --- /dev/null +++ b/src/pybricks/abm/io/dc_motor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.iodevices.DCMotor.""" + + +from ...iodevices import DCMotor +from ..util import act_decor + + +# DCMotor +# (pybricks.com/ev3-micropython/iodevices#dc-motor) +# ------------------------------------------------- +for a in ( + # 'dc', # already decorated in _common.DCMotor + # 'stop', # already decorated in _common.DCMotor +): + act_decor(DCMotor, a) diff --git a/src/pybricks/abm/io/ev3dev_sensor.py b/src/pybricks/abm/io/ev3dev_sensor.py new file mode 100755 index 00000000..a07cf5a7 --- /dev/null +++ b/src/pybricks/abm/io/ev3dev_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.iodevices.Ev3devSensor.""" + + +from ...iodevices import Ev3devSensor +from ..util import sense_decor + + +# Ev3devSensor +# (pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.Ev3devSensor) +# ------------------------------------------------------------------------ +for s in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.Ev3devSensor.read + 'read', +): + sense_decor(Ev3devSensor, s) diff --git a/src/pybricks/abm/io/i2c.py b/src/pybricks/abm/io/i2c.py new file mode 100644 index 00000000..67339dbc --- /dev/null +++ b/src/pybricks/abm/io/i2c.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks.iodevices.I2CDevice.""" + + +from ...iodevices import I2CDevice +from ..util import act_decor, sense_decor + + +# I2CDevice +# (pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.I2CDevice) +# --------------------------------------------------------------------- +for a in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.I2CDevice.write + 'write', +): + act_decor(I2CDevice, a) + +for s in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.I2CDevice.read + 'read', +): + sense_decor(I2CDevice, s) diff --git a/src/pybricks/abm/io/lump.py b/src/pybricks/abm/io/lump.py new file mode 100755 index 00000000..6829fef6 --- /dev/null +++ b/src/pybricks/abm/io/lump.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks.iodevices.LUMPDevice.""" + + +from ...iodevices import LUMPDevice +from ..util import act_decor, sense_decor + + +# LUMPDevice +# (pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.LUMPDevice) +# ---------------------------------------------------------------------- +for a in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.LUMPDevice.write + # 'write', # AttributeError: type object 'LUMPDevice' has no attribute 'write' +): + act_decor(LUMPDevice, a) + +for s in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.LUMPDevice.read + 'read', +): + sense_decor(LUMPDevice, s) diff --git a/src/pybricks/abm/io/lwp3.py b/src/pybricks/abm/io/lwp3.py new file mode 100755 index 00000000..ea653143 --- /dev/null +++ b/src/pybricks/abm/io/lwp3.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.iodevices.LWP3Device.""" + + +from ...iodevices import LWP3Device +from ..util import act_decor, sense_decor + + +# LWP3Device +# (docs.pybricks.com/en/latest/iodevices/lwp3device.html#pybricks.iodevices.LWP3Device) +# ------------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/iodevices/lwp3device.html#pybricks.iodevices.LWP3Device.name + # 'name', # *** NOTE: OVERLOADED METHOD *** + + # docs.pybricks.com/en/latest/iodevices/lwp3device.html#pybricks.iodevices.LWP3Device.write + 'write', +): + act_decor(LWP3Device, a) + +for s in ( + # docs.pybricks.com/en/latest/iodevices/lwp3device.html#pybricks.iodevices.LWP3Device.read + 'read', +): + sense_decor(LWP3Device, s) diff --git a/src/pybricks/abm/io/pup.py b/src/pybricks/abm/io/pup.py new file mode 100755 index 00000000..6369a4df --- /dev/null +++ b/src/pybricks/abm/io/pup.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.iodevices.PUPDevice.""" + + +from ...iodevices import PUPDevice +from ..util import act_decor, sense_decor + + +# PUPDevice +# (docs.pybricks.com/en/latest/iodevices/pupdevice.html#pybricks.iodevices.PUPDevice) +# ----------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/iodevices/pupdevice.html#pybricks.iodevices.PUPDevice.write + 'write', +): + act_decor(PUPDevice, a) + +for s in ( + # docs.pybricks.com/en/latest/iodevices/pupdevice.html#pybricks.iodevices.PUPDevice.info + 'info', + + # docs.pybricks.com/en/latest/iodevices/pupdevice.html#pybricks.iodevices.PUPDevice.read + 'read', +): + sense_decor(PUPDevice, s) diff --git a/src/pybricks/abm/io/uart.py b/src/pybricks/abm/io/uart.py new file mode 100755 index 00000000..570bb520 --- /dev/null +++ b/src/pybricks/abm/io/uart.py @@ -0,0 +1,30 @@ +"""ABM-decorating pybricks.iodevices.UARTDevice.""" + + +from ...iodevices import UARTDevice +from ..util import act_decor, sense_decor + + +# UARTDevice +# (pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice) +# ---------------------------------------------------------------------- +for a in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice.write + 'write', + + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice.clear + 'clear', +): + act_decor(UARTDevice, a) + +for s in ( + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice.read + 'read', + + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice.read_all + 'read_all', + + # pybricks.com/ev3-micropython/iodevices#pybricks.iodevices.UARTDevice.waiting + 'waiting', +): + sense_decor(UARTDevice, s) diff --git a/src/pybricks/abm/msg/__init__.py b/src/pybricks/abm/msg/__init__.py new file mode 100755 index 00000000..ac277765 --- /dev/null +++ b/src/pybricks/abm/msg/__init__.py @@ -0,0 +1,6 @@ +"""ABM-decorating pybricks.messaging.""" + + +from ...messaging import (Connection, # noqa: F401 + Mailbox, LogicMailbox, NumericMailbox, TextMailbox, + BluetoothMailboxServer, BluetoothMailboxClient) diff --git a/src/pybricks/abm/nxt/__init__.py b/src/pybricks/abm/nxt/__init__.py new file mode 100755 index 00000000..36d6b3c4 --- /dev/null +++ b/src/pybricks/abm/nxt/__init__.py @@ -0,0 +1,14 @@ +"""ABM-decorating pybricks.nxtdevices.""" + + +# nxtdevices +# (pybricks.com/ev3-micropython/nxtdevices) +# ========================================= +from . import (color_sensor, # noqa: F401 + energy_meter, + light_sensor, + sound_sensor, + temp_sensor, + touch_sensor, + ultrasonic_sensor, + vernier_adapter) diff --git a/src/pybricks/abm/nxt/color_sensor.py b/src/pybricks/abm/nxt/color_sensor.py new file mode 100755 index 00000000..f1a24b94 --- /dev/null +++ b/src/pybricks/abm/nxt/color_sensor.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.nxtdevices.ColorSensor.""" + + +from ...nxtdevices import ColorSensor +from ..util import sense_decor + + +# ColorSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.ColorSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.ColorSensor.color + # 'color', # already decorated in _common.CommonColorSensor + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.ColorSensor.ambient + # 'ambient', # already decorated in _common.CommonColorSensor + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.ColorSensor.reflection + # 'reflection', # already decorated in _common.CommonColorSensor + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.ColorSensor.rgb + 'rgb', +): + sense_decor(ColorSensor, s) diff --git a/src/pybricks/abm/nxt/energy_meter.py b/src/pybricks/abm/nxt/energy_meter.py new file mode 100755 index 00000000..86c403a4 --- /dev/null +++ b/src/pybricks/abm/nxt/energy_meter.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks.nxtdevices.EnergyMeter.""" + + +from ...nxtdevices import EnergyMeter +from ..util import sense_decor + + +# EnergyMeter +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.EnergyMeter) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.EnergyMeter.storage + 'storage', + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.EnergyMeter.input + 'input', + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.EnergyMeter.output + 'output', +): + sense_decor(EnergyMeter, s) diff --git a/src/pybricks/abm/nxt/light_sensor.py b/src/pybricks/abm/nxt/light_sensor.py new file mode 100755 index 00000000..b2b7a711 --- /dev/null +++ b/src/pybricks/abm/nxt/light_sensor.py @@ -0,0 +1,18 @@ +"""ABM-decorating pybricks.nxtdevices.LightSensor.""" + + +from ...nxtdevices import LightSensor +from ..util import sense_decor + + +# LightSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.LightSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.LightSensor.ambient + 'ambient', + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.LightSensor.reflection + 'reflection', +): + sense_decor(LightSensor, s) diff --git a/src/pybricks/abm/nxt/sound_sensor.py b/src/pybricks/abm/nxt/sound_sensor.py new file mode 100755 index 00000000..bc022783 --- /dev/null +++ b/src/pybricks/abm/nxt/sound_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.nxtdevices.SoundSensor.""" + + +from ...nxtdevices import SoundSensor +from ..util import sense_decor + + +# SoundSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.SoundSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.SoundSensor.intensity + 'intensity', +): + sense_decor(SoundSensor, s) diff --git a/src/pybricks/abm/nxt/temp_sensor.py b/src/pybricks/abm/nxt/temp_sensor.py new file mode 100755 index 00000000..65882699 --- /dev/null +++ b/src/pybricks/abm/nxt/temp_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.nxtdevices.TemperatureSensor.""" + + +from ...nxtdevices import TemperatureSensor +from ..util import sense_decor + + +# LightSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.TemperatureSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.TemperatureSensor.temperature + 'temperature', +): + sense_decor(TemperatureSensor, s) diff --git a/src/pybricks/abm/nxt/touch_sensor.py b/src/pybricks/abm/nxt/touch_sensor.py new file mode 100755 index 00000000..7a122389 --- /dev/null +++ b/src/pybricks/abm/nxt/touch_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.nxtdevices.TouchSensor.""" + + +from ...nxtdevices import TouchSensor +from ..util import sense_decor + + +# TouchSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.TouchSensor) +# ------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.TouchSensor.pressed + 'pressed', +): + sense_decor(TouchSensor, s) diff --git a/src/pybricks/abm/nxt/ultrasonic_sensor.py b/src/pybricks/abm/nxt/ultrasonic_sensor.py new file mode 100755 index 00000000..be5d2261 --- /dev/null +++ b/src/pybricks/abm/nxt/ultrasonic_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.nxtdevices.UltrasonicSensor.""" + + +from ...nxtdevices import UltrasonicSensor +from ..util import sense_decor + + +# UltrasonicSensor +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.UltrasonicSensor) +# ------------------------------------------------------------------------------ +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.UltrasonicSensor.distance + 'distance', +): + sense_decor(UltrasonicSensor, s) diff --git a/src/pybricks/abm/nxt/vernier_adapter.py b/src/pybricks/abm/nxt/vernier_adapter.py new file mode 100755 index 00000000..7a248d55 --- /dev/null +++ b/src/pybricks/abm/nxt/vernier_adapter.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks.nxtdevices.VernierAdapter.""" + + +from ...nxtdevices import VernierAdapter +from ..util import sense_decor + + +# VernierAdapter +# (pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.VernierAdapter) +# ---------------------------------------------------------------------------- +for s in ( + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.VernierAdapter.voltage + 'voltage', + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.VernierAdapter.conversion + 'conversion', + + # pybricks.com/ev3-micropython/nxtdevices#pybricks.nxtdevices.VernierAdapter.value + 'value', +): + sense_decor(VernierAdapter, s) diff --git a/src/pybricks/abm/pup/__init__.py b/src/pybricks/abm/pup/__init__.py new file mode 100755 index 00000000..c70dd054 --- /dev/null +++ b/src/pybricks/abm/pup/__init__.py @@ -0,0 +1,16 @@ +"""ABM-decorating pybricks.iodevices.""" + + +# iodevices +# (docs.pybricks.com/en/latest/pupdevices) +# ======================================== +from . import (hubs, # noqa: F401 + motor, + color_light_matrix, + color_sensor, + force_sensor, + infrared_sensor, + light, + remote, + tilt_sensor, + ultrasonic_sensor) diff --git a/src/pybricks/abm/pup/color_light_matrix.py b/src/pybricks/abm/pup/color_light_matrix.py new file mode 100755 index 00000000..f13731cd --- /dev/null +++ b/src/pybricks/abm/pup/color_light_matrix.py @@ -0,0 +1,18 @@ +"""ABM-decorating pybricks.pupdevices.ColorLightMatrix.""" + + +from ...pupdevices import ColorLightMatrix +from ..util import act_decor + + +# ColorLightMatrix +# (docs.pybricks.com/en/latest/pupdevices/colorlightmatrix.html#pybricks.pupdevices.ColorLightMatrix) +# --------------------------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/colorlightmatrix.html#pybricks.pupdevices.ColorLightMatrix.on + 'on', + + # docs.pybricks.com/en/latest/pupdevices/colorlightmatrix.html#pybricks.pupdevices.ColorLightMatrix.off + 'off', +): + act_decor(ColorLightMatrix, a) diff --git a/src/pybricks/abm/pup/color_sensor/__init__.py b/src/pybricks/abm/pup/color_sensor/__init__.py new file mode 100755 index 00000000..44e24355 --- /dev/null +++ b/src/pybricks/abm/pup/color_sensor/__init__.py @@ -0,0 +1,31 @@ +"""ABM-decorating pybricks.pupdevices.ColorSensor.""" + + +from ....pupdevices import ColorSensor +from ...util import act_decor, sense_decor +from . import distance # noqa: F401 + + +# ColorSensor +# (docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor) +# ----------------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor.detectable_colors + # 'detectable_colors', # already decorated in _common.CommonColorSensor +): + act_decor(ColorSensor, a) + +for s in ( + # docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor.color + # 'color', # already decorated in _common.AmbientColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor.reflection + # 'reflection', # already decorated in _common.CommonColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor.ambient + # 'ambient', # already decorated in _common.CommonColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colorsensor.html#pybricks.pupdevices.ColorSensor.hsv + # 'hsv', # already decorated in _common.AmbientColorSensor +): + sense_decor(ColorSensor, s) diff --git a/src/pybricks/abm/pup/color_sensor/distance.py b/src/pybricks/abm/pup/color_sensor/distance.py new file mode 100755 index 00000000..173362d9 --- /dev/null +++ b/src/pybricks/abm/pup/color_sensor/distance.py @@ -0,0 +1,33 @@ +"""ABM-decorating pybricks.pupdevices.ColorDistanceSensor.""" + + +from ....pupdevices import ColorDistanceSensor +from ...util import act_decor, sense_decor + + +# ColorDistanceSensor +# (docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor) +# --------------------------------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.detectable_colors + # 'detectable_colors', # already decorated in _common.CommonColorSensor +): + act_decor(ColorDistanceSensor, a) + +for s in ( + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.color + # 'color', # already decorated in _common.CommonColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.reflection + # 'reflection', # already decorated in _common.CommonColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.ambient + # 'ambient', # already decorated in _common.CommonColorSensor + + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.distance + 'distance', + + # docs.pybricks.com/en/latest/pupdevices/colordistancesensor.html#pybricks.pupdevices.ColorDistanceSensor.hsv + # 'hsv', # already decorated in _common.CommonColorSensor +): + sense_decor(ColorDistanceSensor, s) diff --git a/src/pybricks/abm/pup/force_sensor.py b/src/pybricks/abm/pup/force_sensor.py new file mode 100755 index 00000000..91c7867a --- /dev/null +++ b/src/pybricks/abm/pup/force_sensor.py @@ -0,0 +1,24 @@ +"""ABM-decorating pybricks.pupdevices.ForceSensor.""" + + +from ...pupdevices import ForceSensor +from ..util import sense_decor + + +# ForceSensor +# (docs.pybricks.com/en/latest/pupdevices/forcesensor.html#pybricks.pupdevices.ForceSensor) +# ----------------------------------------------------------------------------------------- +for s in ( + # docs.pybricks.com/en/latest/pupdevices/forcesensor.html#pybricks.pupdevices.ForceSensor.force + 'force', + + # docs.pybricks.com/en/latest/pupdevices/forcesensor.html#pybricks.pupdevices.ForceSensor.distance + 'distance', + + # docs.pybricks.com/en/latest/pupdevices/forcesensor.html#pybricks.pupdevices.ForceSensor.pressed + 'pressed', + + # docs.pybricks.com/en/latest/pupdevices/forcesensor.html#pybricks.pupdevices.ForceSensor.touched + 'touched', +): + sense_decor(ForceSensor, s) diff --git a/src/pybricks/abm/pup/hubs.py b/src/pybricks/abm/pup/hubs.py new file mode 100755 index 00000000..b070903e --- /dev/null +++ b/src/pybricks/abm/pup/hubs.py @@ -0,0 +1,34 @@ +"""ABM-decorating Powered-Up Hubs.""" + + +from ...hubs import InventorHub, PrimeHub, CityHub, MoveHub, TechnicHub # noqa: F401 + + +# hubs +# (docs.pybricks.com/en/latest/hubs) +# ================================== + +# InventorHub +# (docs.pybricks.com/en/latest/hubs/primehub.html#InventorHub) +# ------------------------------------------------------------ +# TODO + +# PrimeHub +# (docs.pybricks.com/en/latest/hubs/primehub.html#pybricks.hubs.PrimeHub) +# ----------------------------------------------------------------------- +# TODO + +# CityHub +# (docs.pybricks.com/en/latest/hubs/cityhub.html#pybricks.hubs.CityHub) +# --------------------------------------------------------------------- +# TODO + +# MoveHub +# (docs.pybricks.com/en/latest/hubs/movehub.html#pybricks.hubs.MoveHub) +# --------------------------------------------------------------------- +# TODO + +# TechnicHub +# (docs.pybricks.com/en/latest/hubs/technichub.html#pybricks.hubs.TechnicHub) +# --------------------------------------------------------------------------- +# TODO diff --git a/src/pybricks/abm/pup/infrared_sensor.py b/src/pybricks/abm/pup/infrared_sensor.py new file mode 100755 index 00000000..1284b8a6 --- /dev/null +++ b/src/pybricks/abm/pup/infrared_sensor.py @@ -0,0 +1,21 @@ +"""ABM-decorating pybricks.pupdevices.InfraredSensor.""" + + +from ...pupdevices import InfraredSensor +from ..util import sense_decor + + +# InfraredSensor +# (docs.pybricks.com/en/latest/pupdevices/infraredsensor.html#pybricks.pupdevices.InfraredSensor) +# ----------------------------------------------------------------------------------------------- +for s in ( + # docs.pybricks.com/en/latest/pupdevices/infraredsensor.html#pybricks.pupdevices.InfraredSensor.distance + 'distance', + + # docs.pybricks.com/en/latest/pupdevices/infraredsensor.html#pybricks.pupdevices.InfraredSensor.reflection + 'reflection', + + # docs.pybricks.com/en/latest/pupdevices/infraredsensor.html#pybricks.pupdevices.InfraredSensor.count + 'count', +): + sense_decor(InfraredSensor, s) diff --git a/src/pybricks/abm/pup/light.py b/src/pybricks/abm/pup/light.py new file mode 100755 index 00000000..6469e35b --- /dev/null +++ b/src/pybricks/abm/pup/light.py @@ -0,0 +1,18 @@ +"""ABM-decorating pybricks.pupdevices.Light.""" + + +from ...pupdevices import Light +from ..util import act_decor + + +# Light +# (docs.pybricks.com/en/latest/pupdevices/light.html#pybricks.pupdevices.Light) +# ----------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/light.html#pybricks.pupdevices.Light.on + 'on', + + # docs.pybricks.com/en/latest/pupdevices/light.html#pybricks.pupdevices.Light.off + 'off', +): + act_decor(Light, a) diff --git a/src/pybricks/abm/pup/motor/__init__.py b/src/pybricks/abm/pup/motor/__init__.py new file mode 100755 index 00000000..527b35c5 --- /dev/null +++ b/src/pybricks/abm/pup/motor/__init__.py @@ -0,0 +1,58 @@ +"""ABM-decorating pybricks.pupdevices.Motor.""" + + +from ....pupdevices import Motor +from ...util import act_decor, sense_decor +from . import dc, pf # noqa: F401 + + +# Motor +# (docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor) +# ----------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.reset_angle + # 'reset_angle', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.stop + # 'stop', # already decorated in _common.DCMotor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.brake + # 'brake', # already decorated in _common.DCMotor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.hold + # 'hold', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.run + # 'run', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.run_time + # 'run_time', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.run_angle + # 'run_angle', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.run_target + # 'run_target', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.track_target + # 'track_target', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.run_until_stalled + # 'run_until_stalled', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.dc + # 'dc', # already decorated in _common.DCMotor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.settings + # 'settings', # already decorated in _common.DCMotor +): + act_decor(Motor, a) + +for s in ( + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.speed + # 'speed', # already decorated in _common.Motor + + # docs.pybricks.com/en/latest/pupdevices/motor.html#pybricks.pupdevices.Motor.angle + # 'angle', # already decorated in _common.Motor +): + sense_decor(Motor, s) diff --git a/src/pybricks/abm/pup/motor/dc.py b/src/pybricks/abm/pup/motor/dc.py new file mode 100755 index 00000000..a457b858 --- /dev/null +++ b/src/pybricks/abm/pup/motor/dc.py @@ -0,0 +1,17 @@ +"""ABM-decorating pybricks.pupdevices.DCMotor.""" + + +from ....pupdevices import DCMotor +from ...util import act_decor + + +# DCMotor +# (docs.pybricks.com/en/latest/pupdevices/dcmotor.html#pybricks.pupdevices.DCMotor) +# --------------------------------------------------------------------------------- +for a in ( + # 'dc', # already decorated in _common.DCMotor + # 'stop', # already decorated in _common.DCMotor + # 'brake', # already decorated in _common.DCMotor + # 'settings', # already decorated in _common.DCMotor +): + act_decor(DCMotor, a) diff --git a/src/pybricks/abm/pup/motor/pf.py b/src/pybricks/abm/pup/motor/pf.py new file mode 100755 index 00000000..d7a3ffc8 --- /dev/null +++ b/src/pybricks/abm/pup/motor/pf.py @@ -0,0 +1,16 @@ +"""ABM-decorating pybricks.pupdevices.PFMotor.""" + + +from ....pupdevices import PFMotor +from ...util import act_decor + + +# PFMotor +# (docs.pybricks.com/en/latest/pupdevices/pfmotor.html) +# ----------------------------------------------------- +for a in ( + # 'dc', # already decorated in _common.DCMotor + # 'stop', # already decorated in _common.DCMotor + # 'brake', # already decorated in _common.DCMotor +): + act_decor(PFMotor, a) diff --git a/src/pybricks/abm/pup/remote.py b/src/pybricks/abm/pup/remote.py new file mode 100755 index 00000000..96d24352 --- /dev/null +++ b/src/pybricks/abm/pup/remote.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.pupdevices.Remote.""" + + +from ...pupdevices import Remote +from ..util import act_decor + + +# Remote +# (docs.pybricks.com/en/latest/pupdevices/remote.html#pybricks.pupdevices.Remote) +# ------------------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/pupdevices/remote.html#pybricks.pupdevices.Remote.name + # 'name', # *** NOTE: OVERLOADED METHOD *** +): + act_decor(Remote, a) diff --git a/src/pybricks/abm/pup/tilt_sensor.py b/src/pybricks/abm/pup/tilt_sensor.py new file mode 100755 index 00000000..b3f4bcec --- /dev/null +++ b/src/pybricks/abm/pup/tilt_sensor.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.pupdevices.TiltSensor.""" + + +from ...pupdevices import TiltSensor +from ..util import sense_decor + + +# TiltSensor +# (docs.pybricks.com/en/latest/pupdevices/tiltsensor.html#pybricks.pupdevices.TiltSensor) +# --------------------------------------------------------------------------------------- +for s in ( + # docs.pybricks.com/en/latest/pupdevices/tiltsensor.html#pybricks.pupdevices.TiltSensor.tilt + 'tilt', +): + sense_decor(TiltSensor, s) diff --git a/src/pybricks/abm/pup/ultrasonic_sensor.py b/src/pybricks/abm/pup/ultrasonic_sensor.py new file mode 100755 index 00000000..e84095a9 --- /dev/null +++ b/src/pybricks/abm/pup/ultrasonic_sensor.py @@ -0,0 +1,18 @@ +"""ABM-decorating pybricks.pupdevices.UltrasonicSensor.""" + + +from ...pupdevices import UltrasonicSensor +from ..util import sense_decor + + +# UltrasonicSensor +# (docs.pybricks.com/en/latest/pupdevices/ultrasonicsensor.html#pybricks.pupdevices.UltrasonicSensor) +# --------------------------------------------------------------------------------------------------- +for s in ( + # docs.pybricks.com/en/latest/pupdevices/ultrasonicsensor.html#pybricks.pupdevices.UltrasonicSensor.distance + 'distance', + + # docs.pybricks.com/en/latest/pupdevices/ultrasonicsensor.html#pybricks.pupdevices.UltrasonicSensor.presence + 'presence', +): + sense_decor(UltrasonicSensor, s) diff --git a/src/pybricks/abm/robotics/__init__.py b/src/pybricks/abm/robotics/__init__.py new file mode 100755 index 00000000..9bd14eb5 --- /dev/null +++ b/src/pybricks/abm/robotics/__init__.py @@ -0,0 +1,7 @@ +"""ABM-decorating pybricks.robotics.""" + + +# robotics +# (docs.pybricks.com/en/latest/robotics.html) +# =========================================== +from . import drive_base # noqa: F401 diff --git a/src/pybricks/abm/robotics/drive_base.py b/src/pybricks/abm/robotics/drive_base.py new file mode 100755 index 00000000..fe4c1419 --- /dev/null +++ b/src/pybricks/abm/robotics/drive_base.py @@ -0,0 +1,45 @@ +"""ABM-decorating pybricks.robotics.DriveBase.""" + + +from ...robotics import DriveBase +from ..util import act_decor, sense_decor + + +# DriveBase +# (docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase) +# ----------------------------------------------------------------------- +for a in ( + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.straight + 'straight', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.turn + 'turn', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.curve + 'curve', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.settings + # 'settings', # *** NOTE: OVERLOADED METHOD *** + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.drive + 'drive', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.stop + 'stop', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.reset + 'reset', +): + act_decor(DriveBase, a) + +for s in ( + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.distance + 'distance', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.angle + 'angle', + + # docs.pybricks.com/en/latest/robotics.html#pybricks.robotics.DriveBase.state + 'state', +): + sense_decor(DriveBase, s) diff --git a/src/pybricks/abm/tools/__init__.py b/src/pybricks/abm/tools/__init__.py new file mode 100755 index 00000000..74dfdd2c --- /dev/null +++ b/src/pybricks/abm/tools/__init__.py @@ -0,0 +1,7 @@ +"""ABM-decorating pybricks.tools.""" + + +# tools +# (docs.pybricks.com/en/latest/tools) +# =================================== +from . import data_log, stop_watch, wait # noqa: F401 diff --git a/src/pybricks/abm/tools/data_log.py b/src/pybricks/abm/tools/data_log.py new file mode 100755 index 00000000..91b8d0c4 --- /dev/null +++ b/src/pybricks/abm/tools/data_log.py @@ -0,0 +1,15 @@ +"""ABM-decorating pybricks.tools.DataLog.""" + + +from ...tools import DataLog +from ..util import act_decor + + +# DataLog +# (pybricks.com/ev3-micropython/tools#pybricks.tools.DataLog) +# ----------------------------------------------------------- +for a in ( + # pybricks.com/ev3-micropython/tools#pybricks.tools.DataLog.log + 'log', +): + act_decor(DataLog, a) diff --git a/src/pybricks/abm/tools/stop_watch.py b/src/pybricks/abm/tools/stop_watch.py new file mode 100755 index 00000000..e6551cb9 --- /dev/null +++ b/src/pybricks/abm/tools/stop_watch.py @@ -0,0 +1,27 @@ +"""ABM-decorating pybricks.tools.StopWatch.""" + + +from ...tools import StopWatch +from ..util import act_decor, sense_decor + + +# StopWatch +# (docs.pybricks.com/en/latest/tools#pybricks.tools.StopWatch) +# ------------------------------------------------------------ +for a in ( + # docs.pybricks.com/en/latest/tools#pybricks.tools.StopWatch.pause + 'pause', + + # docs.pybricks.com/en/latest/tools#pybricks.tools.StopWatch.resume + 'resume', + + # docs.pybricks.com/en/latest/tools#pybricks.tools.StopWatch.reset + 'reset', +): + act_decor(StopWatch, a) + +for s in ( + # docs.pybricks.com/en/latest/tools#pybricks.tools.StopWatch.time + 'time', +): + sense_decor(StopWatch, s) diff --git a/src/pybricks/abm/tools/wait.py b/src/pybricks/abm/tools/wait.py new file mode 100644 index 00000000..93f267bc --- /dev/null +++ b/src/pybricks/abm/tools/wait.py @@ -0,0 +1,12 @@ +"""ABM-decorating pybricks.tools.wait(...).""" + + +from abm.decor import act + +from ... import tools + + +# wait +# (docs.pybricks.com/en/latest/tools#pybricks.tools.wait) +# ------------------------------------------------------- +tools.wait: callable = act(tools.wait) diff --git a/src/pybricks/abm/util.py b/src/pybricks/abm/util.py new file mode 100644 index 00000000..cdd0a54f --- /dev/null +++ b/src/pybricks/abm/util.py @@ -0,0 +1,24 @@ +"""ABM-decorating utilities.""" + + +from collections.abc import Sequence + +from abm.decor import act, sense + + +__all__: Sequence[str] = 'act_decor', 'sense_decor' + + +def _decor(cls: type, method_name: str, decorator: callable, /): + """Decorate class method.""" + setattr(cls, method_name, decorator(getattr(cls, method_name))) + + +def act_decor(cls: type, method_name: str, /): + """Decorate class method with `act`.""" + _decor(cls, method_name, act) + + +def sense_decor(cls: type, method_name: str, /): + """Decorate class method with `sense`.""" + _decor(cls, method_name, sense) diff --git a/src/pybricks/media/ev3dev.py b/src/pybricks/media/ev3dev.py index 70f33fc3..3ffe7e35 100644 --- a/src/pybricks/media/ev3dev.py +++ b/src/pybricks/media/ev3dev.py @@ -331,7 +331,7 @@ def __init__( use the default language. [#font_lang]_ script (str): A unicode script identifier such as ``'Runr'`` or ``None``. - """ + """ # noqa: E501 @property def family(self) -> str: