Skip to content

Commit 3c0e463

Browse files
committed
fix #377 add setitem method to ETS class
1 parent 1fd97b6 commit 3c0e463

File tree

1 file changed

+51
-34
lines changed

1 file changed

+51
-34
lines changed

roboticstoolbox/robot/ETS.py

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
)
3838
from copy import deepcopy
3939
from roboticstoolbox.robot.ET import ET, ET2
40-
from typing import Union, overload, List, Set, Tuple
40+
from typing import Union, overload, List, Set, Tuple, TypeVar
4141
from typing_extensions import Literal as L
4242
from sys import version_info
4343
from roboticstoolbox.tools.types import ArrayLike, NDArray
@@ -51,6 +51,8 @@
5151
else: # pragma: nocover
5252
c_property = property
5353

54+
T = TypeVar("T", bound="BaseETS")
55+
5456

5557
class BaseETS(UserList):
5658
def __init__(self, *args):
@@ -435,38 +437,32 @@ def m(self) -> int:
435437
return self._m
436438

437439
@overload
438-
def data(self: "ETS") -> List[ET]:
439-
... # pragma: nocover
440+
def data(self: "ETS") -> List[ET]: ... # pragma: nocover
440441

441442
@overload
442-
def data(self: "ETS2") -> List[ET2]:
443-
... # pragma: nocover
443+
def data(self: "ETS2") -> List[ET2]: ... # pragma: nocover
444444

445445
@property
446446
def data(self):
447447
return self._data
448448

449449
@data.setter
450450
@overload
451-
def data(self: "ETS", new_data: List[ET]):
452-
... # pragma: nocover
451+
def data(self: "ETS", new_data: List[ET]): ... # pragma: nocover
453452

454453
@data.setter
455454
@overload
456-
def data(self: "ETS", new_data: List[ET2]):
457-
... # pragma: nocover
455+
def data(self: "ETS", new_data: List[ET2]): ... # pragma: nocover
458456

459457
@data.setter
460458
def data(self, new_data):
461459
self._data = new_data
462460

463461
@overload
464-
def pop(self: "ETS", i: int = -1) -> ET:
465-
... # pragma: nocover
462+
def pop(self: "ETS", i: int = -1) -> ET: ... # pragma: nocover
466463

467464
@overload
468-
def pop(self: "ETS2", i: int = -1) -> ET2:
469-
... # pragma: nocover
465+
def pop(self: "ETS2", i: int = -1) -> ET2: ... # pragma: nocover
470466

471467
def pop(self, i=-1):
472468
"""
@@ -506,12 +502,10 @@ def pop(self, i=-1):
506502
return item
507503

508504
@overload
509-
def split(self: "ETS") -> List["ETS"]:
510-
... # pragma: nocover
505+
def split(self: "ETS") -> List["ETS"]: ... # pragma: nocover
511506

512507
@overload
513-
def split(self: "ETS2") -> List["ETS2"]:
514-
... # pragma: nocover
508+
def split(self: "ETS2") -> List["ETS2"]: ... # pragma: nocover
515509

516510
def split(self):
517511
"""
@@ -547,15 +541,7 @@ def split(self):
547541

548542
return segments
549543

550-
@overload
551-
def inv(self: "ETS") -> "ETS":
552-
... # pragma: nocover
553-
554-
@overload
555-
def inv(self: "ETS2") -> "ETS2":
556-
... # pragma: nocover
557-
558-
def inv(self):
544+
def inv(self: T) -> T:
559545
r"""
560546
Inverse of ETS
561547
@@ -589,20 +575,16 @@ def inv(self):
589575
return self.__class__([et.inv() for et in reversed(self.data)])
590576

591577
@overload
592-
def __getitem__(self: "ETS", i: int) -> ET:
593-
... # pragma: nocover
578+
def __getitem__(self: "ETS", i: int) -> ET: ...
594579

595580
@overload
596-
def __getitem__(self: "ETS", i: slice) -> List[ET]:
597-
... # pragma: nocover
581+
def __getitem__(self: "ETS", i: slice) -> List[ET]: ...
598582

599583
@overload
600-
def __getitem__(self: "ETS2", i: int) -> ET2:
601-
... # pragma: nocover
584+
def __getitem__(self: "ETS2", i: int) -> ET2: ...
602585

603586
@overload
604-
def __getitem__(self: "ETS2", i: slice) -> List[ET2]:
605-
... # pragma: nocover
587+
def __getitem__(self: "ETS2", i: slice) -> List[ET2]: ...
606588

607589
def __getitem__(self, i):
608590
"""
@@ -630,6 +612,41 @@ def __getitem__(self, i):
630612
"""
631613
return self.data[i] # can be [2] or slice, eg. [3:5]
632614

615+
@overload
616+
def __setitem__(self: "ETS", i: int, value: ET): ...
617+
618+
@overload
619+
def __setitem__(self: "ETS", i: slice, value: List[ET]): ...
620+
621+
@overload
622+
def __setitem__(self: "ETS2", i: int, value: ET2): ...
623+
624+
@overload
625+
def __setitem__(self: "ETS2", i: slice, value: List[ET2]): ...
626+
627+
def __setitem__(self, i, value):
628+
"""
629+
Set an item in the ETS
630+
631+
Parameters
632+
----------
633+
i
634+
the index
635+
value
636+
the value to set
637+
638+
Examples
639+
--------
640+
.. runblock:: pycon
641+
>>> from roboticstoolbox import ET
642+
>>> e = ET.Rz() * ET.tx(1) * ET.Rz() * ET.tx(1)
643+
>>> e[1] = ET.tx(2)
644+
>>> e
645+
646+
"""
647+
self.data[i] = value
648+
self._update_internals()
649+
633650
def __deepcopy__(self, memo):
634651
new_data = []
635652

0 commit comments

Comments
 (0)