Skip to content

Commit f94ef67

Browse files
authored
Merge pull request #46 from tekktrik/feature/add-typing
Add type hints
2 parents 5361cb1 + 03ea48a commit f94ef67

File tree

4 files changed

+54
-30
lines changed

4 files changed

+54
-30
lines changed

adafruit_lsm6ds/__init__.py

+30-24
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,18 @@
6464
from adafruit_register.i2c_bits import RWBits
6565
from adafruit_register.i2c_bit import RWBit
6666

67+
try:
68+
from typing import Tuple, Optional
69+
from busio import I2C
70+
except ImportError:
71+
pass
72+
6773

6874
class CV:
6975
"""struct helper"""
7076

7177
@classmethod
72-
def add_values(cls, value_tuples):
78+
def add_values(cls, value_tuples: Tuple[str, int, float, Optional[float]]) -> None:
7379
"creates CV entires"
7480
cls.string = {}
7581
cls.lsb = {}
@@ -81,7 +87,7 @@ def add_values(cls, value_tuples):
8187
cls.lsb[value] = lsb
8288

8389
@classmethod
84-
def is_valid(cls, value):
90+
def is_valid(cls, value: int) -> bool:
8591
"""Returns true if the given value is a member of the CV"""
8692
return value in cls.string
8793

@@ -187,7 +193,7 @@ class LSM6DS: # pylint: disable=too-many-instance-attributes
187193
before calling. Use `pedometer_reset` to reset the number of steps"""
188194
CHIP_ID = None
189195

190-
def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
196+
def __init__(self, i2c_bus: I2C, address: int = LSM6DS_DEFAULT_ADDRESS) -> None:
191197
self._cached_accel_range = None
192198
self._cached_gyro_range = None
193199

@@ -210,14 +216,14 @@ def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
210216
self.accelerometer_range = AccelRange.RANGE_4G # pylint: disable=no-member
211217
self.gyro_range = GyroRange.RANGE_250_DPS # pylint: disable=no-member
212218

213-
def reset(self):
219+
def reset(self) -> None:
214220
"Resets the sensor's configuration into an initial state"
215221
self._sw_reset = True
216222
while self._sw_reset:
217223
sleep(0.001)
218224

219225
@staticmethod
220-
def _add_gyro_ranges():
226+
def _add_gyro_ranges() -> None:
221227
GyroRange.add_values(
222228
(
223229
("RANGE_125_DPS", 125, 125, 4.375),
@@ -229,7 +235,7 @@ def _add_gyro_ranges():
229235
)
230236

231237
@staticmethod
232-
def _add_accel_ranges():
238+
def _add_accel_ranges() -> None:
233239
AccelRange.add_values(
234240
(
235241
("RANGE_2G", 0, 2, 0.061),
@@ -240,7 +246,7 @@ def _add_accel_ranges():
240246
)
241247

242248
@property
243-
def acceleration(self):
249+
def acceleration(self) -> Tuple[float, float, float]:
244250
"""The x, y, z acceleration values returned in a 3-tuple and are in m / s ^ 2."""
245251
raw_accel_data = self._raw_accel_data
246252

@@ -251,49 +257,49 @@ def acceleration(self):
251257
return (x, y, z)
252258

253259
@property
254-
def gyro(self):
260+
def gyro(self) -> Tuple[float, float, float]:
255261
"""The x, y, z angular velocity values returned in a 3-tuple and are in radians / second"""
256262
raw_gyro_data = self._raw_gyro_data
257263
x, y, z = [radians(self._scale_gyro_data(i)) for i in raw_gyro_data]
258264
return (x, y, z)
259265

260-
def _scale_xl_data(self, raw_measurement):
266+
def _scale_xl_data(self, raw_measurement: int) -> float:
261267
return (
262268
raw_measurement
263269
* AccelRange.lsb[self._cached_accel_range]
264270
* _MILLI_G_TO_ACCEL
265271
)
266272

267-
def _scale_gyro_data(self, raw_measurement):
273+
def _scale_gyro_data(self, raw_measurement: int) -> float:
268274
return raw_measurement * GyroRange.lsb[self._cached_gyro_range] / 1000
269275

270276
@property
271-
def accelerometer_range(self):
277+
def accelerometer_range(self) -> int:
272278
"""Adjusts the range of values that the sensor can measure, from +/- 2G to +/-16G
273279
Note that larger ranges will be less accurate. Must be an ``AccelRange``"""
274280
return self._cached_accel_range
275281

276282
# pylint: disable=no-member
277283
@accelerometer_range.setter
278-
def accelerometer_range(self, value):
284+
def accelerometer_range(self, value: int) -> None:
279285
if not AccelRange.is_valid(value):
280286
raise AttributeError("range must be an `AccelRange`")
281287
self._accel_range = value
282288
self._cached_accel_range = value
283289
sleep(0.2) # needed to let new range settle
284290

285291
@property
286-
def gyro_range(self):
292+
def gyro_range(self) -> int:
287293
"""Adjusts the range of values that the sensor can measure, from 125 Degrees/s to 2000
288294
degrees/s. Note that larger ranges will be less accurate. Must be a ``GyroRange``."""
289295
return self._cached_gyro_range
290296

291297
@gyro_range.setter
292-
def gyro_range(self, value):
298+
def gyro_range(self, value: int) -> None:
293299
self._set_gyro_range(value)
294300
sleep(0.2)
295301

296-
def _set_gyro_range(self, value):
302+
def _set_gyro_range(self, value: int) -> None:
297303
if not GyroRange.is_valid(value):
298304
raise AttributeError("range must be a `GyroRange`")
299305

@@ -308,12 +314,12 @@ def _set_gyro_range(self, value):
308314
self._cached_gyro_range = value # needed to let new range settle
309315

310316
@property
311-
def accelerometer_data_rate(self):
317+
def accelerometer_data_rate(self) -> int:
312318
"""Select the rate at which the accelerometer takes measurements. Must be a ``Rate``"""
313319
return self._accel_data_rate
314320

315321
@accelerometer_data_rate.setter
316-
def accelerometer_data_rate(self, value):
322+
def accelerometer_data_rate(self, value: int) -> None:
317323

318324
if not Rate.is_valid(value):
319325
raise AttributeError("accelerometer_data_rate must be a `Rate`")
@@ -322,42 +328,42 @@ def accelerometer_data_rate(self, value):
322328
# sleep(.2) # needed to let new range settle
323329

324330
@property
325-
def gyro_data_rate(self):
331+
def gyro_data_rate(self) -> int:
326332
"""Select the rate at which the gyro takes measurements. Must be a ``Rate``"""
327333
return self._gyro_data_rate
328334

329335
@gyro_data_rate.setter
330-
def gyro_data_rate(self, value):
336+
def gyro_data_rate(self, value: int) -> None:
331337
if not Rate.is_valid(value):
332338
raise AttributeError("gyro_data_rate must be a `Rate`")
333339

334340
self._gyro_data_rate = value
335341
# sleep(.2) # needed to let new range settle
336342

337343
@property
338-
def pedometer_enable(self):
344+
def pedometer_enable(self) -> bool:
339345
""" Whether the pedometer function on the accelerometer is enabled"""
340346
return self._ped_enable and self._func_enable
341347

342348
@pedometer_enable.setter
343-
def pedometer_enable(self, enable):
349+
def pedometer_enable(self, enable: bool) -> None:
344350
self._ped_enable = enable
345351
self._func_enable = enable
346352
self._pedometer_reset = enable
347353

348354
@property
349-
def high_pass_filter(self):
355+
def high_pass_filter(self) -> int:
350356
"""The high pass filter applied to accelerometer data"""
351357
return self._high_pass_filter
352358

353359
@high_pass_filter.setter
354-
def high_pass_filter(self, value):
360+
def high_pass_filter(self, value: int) -> None:
355361
if not AccelHPF.is_valid(value):
356362
raise AttributeError("range must be an `AccelHPF`")
357363
self._high_pass_filter = value
358364

359365
@property
360-
def temperature(self):
366+
def temperature(self) -> float:
361367
"""Temperature in Celsius"""
362368
# Data from Datasheet Table 4.3
363369
# Temp range -40 to 85 Celsius

adafruit_lsm6ds/ism330dhcx.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
from time import sleep
99
from . import LSM6DS, LSM6DS_DEFAULT_ADDRESS, GyroRange, RWBit, const
1010

11+
try:
12+
import typing # pylint: disable=unused-import
13+
from busio import I2C
14+
except ImportError:
15+
pass
16+
1117
_LSM6DS_CTRL2_G = const(0x11)
1218

1319

@@ -49,7 +55,7 @@ class ISM330DHCX(LSM6DS): # pylint: disable=too-many-instance-attributes
4955
CHIP_ID = 0x6B
5056
_gyro_range_4000dps = RWBit(_LSM6DS_CTRL2_G, 0)
5157

52-
def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
58+
def __init__(self, i2c_bus: I2C, address: int = LSM6DS_DEFAULT_ADDRESS) -> None:
5359
GyroRange.add_values(
5460
(
5561
("RANGE_125_DPS", 125, 125, 4.375),
@@ -66,14 +72,14 @@ def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
6672
self._i3c_disable = True
6773

6874
@property
69-
def gyro_range(self):
75+
def gyro_range(self) -> int:
7076
"""Adjusts the range of values that the sensor can measure, from 125 Degrees/s to 4000
7177
degrees/s. Note that larger ranges will be less accurate. Must be a ``GyroRange``. 4000 DPS
7278
is only available for the ISM330DHCX"""
7379
return self._cached_gyro_range
7480

7581
@gyro_range.setter
76-
def gyro_range(self, value):
82+
def gyro_range(self, value: int) -> None:
7783
super()._set_gyro_range(value)
7884

7985
# range uses the `FS_4000` bit

adafruit_lsm6ds/lsm6dso32.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
"""
88
from . import LSM6DS, LSM6DS_CHIP_ID, LSM6DS_DEFAULT_ADDRESS, AccelRange
99

10+
try:
11+
import typing # pylint: disable=unused-import
12+
from busio import I2C
13+
except ImportError:
14+
pass
15+
1016

1117
class LSM6DSO32(LSM6DS): # pylint: disable=too-many-instance-attributes
1218

@@ -45,12 +51,12 @@ class LSM6DSO32(LSM6DS): # pylint: disable=too-many-instance-attributes
4551

4652
CHIP_ID = LSM6DS_CHIP_ID
4753

48-
def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
54+
def __init__(self, i2c_bus: I2C, address: int = LSM6DS_DEFAULT_ADDRESS) -> None:
4955
super().__init__(i2c_bus, address)
5056
self._i3c_disable = True
5157
self.accelerometer_range = AccelRange.RANGE_8G # pylint:disable=no-member
5258

53-
def _add_accel_ranges(self):
59+
def _add_accel_ranges(self) -> None:
5460
AccelRange.add_values(
5561
(
5662
("RANGE_4G", 0, 4, 0.122),

adafruit_lsm6ds/lsm6dsox.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
"""
88
from . import LSM6DS, LSM6DS_DEFAULT_ADDRESS, LSM6DS_CHIP_ID
99

10+
try:
11+
import typing # pylint: disable=unused-import
12+
from busio import I2C
13+
except ImportError:
14+
pass
15+
1016

1117
class LSM6DSOX(LSM6DS): # pylint: disable=too-many-instance-attributes
1218

@@ -44,6 +50,6 @@ class LSM6DSOX(LSM6DS): # pylint: disable=too-many-instance-attributes
4450

4551
CHIP_ID = LSM6DS_CHIP_ID
4652

47-
def __init__(self, i2c_bus, address=LSM6DS_DEFAULT_ADDRESS):
53+
def __init__(self, i2c_bus: I2C, address: int = LSM6DS_DEFAULT_ADDRESS) -> None:
4854
super().__init__(i2c_bus, address)
4955
self._i3c_disable = True

0 commit comments

Comments
 (0)