Stricter runtime type checks
This commit is contained in:
parent
fd42e2e2b6
commit
f2a2d880f2
1 changed files with 24 additions and 13 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
|
from types import GeneratorType
|
||||||
from typing import Optional, Tuple, Union
|
from typing import Optional, Tuple, Union
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
@ -58,7 +59,7 @@ class SangaStage(BaseStage):
|
||||||
return self.board.position
|
return self.board.position
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def backlash(self):
|
def backlash(self) -> np.ndarray:
|
||||||
"""The distance used for backlash compensation.
|
"""The distance used for backlash compensation.
|
||||||
Software backlash compensation is enabled by setting this property to a value
|
Software backlash compensation is enabled by setting this property to a value
|
||||||
other than `None`. The value can either be an array-like object (list, tuple,
|
other than `None`. The value can either be an array-like object (list, tuple,
|
||||||
|
|
@ -73,16 +74,17 @@ class SangaStage(BaseStage):
|
||||||
back by ``backlash[i]``. This is computed per-axis, so if some axes are moving
|
back by ``backlash[i]``. This is computed per-axis, so if some axes are moving
|
||||||
in the same direction as ``backlash``, they won't do two moves.
|
in the same direction as ``backlash``, they won't do two moves.
|
||||||
"""
|
"""
|
||||||
if isinstance(self._backlash, (list, np.ndarray)):
|
if isinstance(self._backlash, np.ndarray):
|
||||||
return self._backlash
|
return self._backlash
|
||||||
|
elif isinstance(self._backlash, list):
|
||||||
|
return np.array(self._backlash)
|
||||||
elif isinstance(self._backlash, int):
|
elif isinstance(self._backlash, int):
|
||||||
return np.array([self._backlash] * self.n_axes)
|
return np.array([self._backlash] * self.n_axes)
|
||||||
else:
|
else:
|
||||||
return np.array([0] * self.n_axes)
|
return np.array([0] * self.n_axes)
|
||||||
|
|
||||||
|
|
||||||
@backlash.setter
|
@backlash.setter
|
||||||
def backlash(self, blsh) -> Optional[np.ndarray]:
|
def backlash(self, blsh):
|
||||||
logging.debug("Setting backlash to %s", (blsh))
|
logging.debug("Setting backlash to %s", (blsh))
|
||||||
if blsh is None:
|
if blsh is None:
|
||||||
self._backlash = None
|
self._backlash = None
|
||||||
|
|
@ -105,7 +107,10 @@ class SangaStage(BaseStage):
|
||||||
|
|
||||||
def read_settings(self) -> dict:
|
def read_settings(self) -> dict:
|
||||||
"""Return the current settings as a dictionary"""
|
"""Return the current settings as a dictionary"""
|
||||||
blsh = self.backlash.tolist()
|
if self.backlash is not None:
|
||||||
|
blsh = self.backlash.tolist()
|
||||||
|
else:
|
||||||
|
blsh = None
|
||||||
config = {
|
config = {
|
||||||
"backlash": {"x": blsh[0], "y": blsh[1], "z": blsh[2]},
|
"backlash": {"x": blsh[0], "y": blsh[1], "z": blsh[2]},
|
||||||
"settle_time": self.settle_time,
|
"settle_time": self.settle_time,
|
||||||
|
|
@ -152,15 +157,21 @@ class SangaStage(BaseStage):
|
||||||
raise ValueError("axis must be one of x, y, or z")
|
raise ValueError("axis must be one of x, y, or z")
|
||||||
|
|
||||||
# Create the displacement array
|
# Create the displacement array
|
||||||
displacement_array: np.ndarray = np.array([
|
displacement_array: np.ndarray = np.array(
|
||||||
displacement if axis == "x" else 0,
|
[
|
||||||
displacement if axis == "y" else 0,
|
displacement if axis == "x" else 0,
|
||||||
displacement if axis == "z" else 0,
|
displacement if axis == "y" else 0,
|
||||||
])
|
displacement if axis == "z" else 0,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
elif isinstance(displacement, np.ndarray):
|
||||||
|
displacement_array = displacement
|
||||||
|
elif isinstance(displacement, (list, tuple, GeneratorType)):
|
||||||
# Convert our displacement tuple/generator into a numpy array
|
# Convert our displacement tuple/generator into a numpy array
|
||||||
displacement_array = np.array(list(displacement))
|
displacement_array = np.array(list(displacement))
|
||||||
|
else:
|
||||||
|
raise TypeError(f"Unsupported displacement type {type(displacement)}")
|
||||||
|
|
||||||
# Calculate main movement
|
# Calculate main movement
|
||||||
initial_move: np.ndarray = displacement_array
|
initial_move: np.ndarray = displacement_array
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue