from typing import Tuple, List, Union, overload

class Editops:
    @classmethod
    def from_opcodes(cls, other: Opcodes) -> Editops: ...

    def as_opcodes(self) -> Opcodes: ...

    def as_list(self) -> List[Tuple[str, int, int]]: ...

    def __eq__(self, other: Editops) -> bool: ...

    def __len__(self) -> int: ...

    def copy(self) -> Editops: ...

    def inverse(self) -> Editops: ...

    @property
    def src_len(self) -> int: ...

    @src_len.setter
    def src_len(self, value: int): ...

    @property
    def dest_len(self) -> int: ...

    @dest_len.setter
    def dest_len(self, value: int): ...

    def __eq__(self, other) -> bool: ...

    def __setitem__(self, index: int, value: Tuple[str, int, int]): ...

    @overload
    def __getitem__(self, key: slice) -> Editops: ...

    @overload
    def __getitem__(self, key: int) -> Tuple[str, int, int]: ...

    def __repr__(self) -> str: ...

class Opcodes:
    @classmethod
    def from_editops(cls, other: Editops) -> Opcodes: ...

    def as_editops(self) -> Editops: ...

    def as_list(self) -> List[Tuple[str, int, int, int, int]]: ...

    def __eq__(self, other: Opcodes) -> bool: ...

    def __len__(self) -> int: ...

    def copy(self) -> Opcodes: ...

    def inverse(self) -> Opcodes: ...

    @property
    def src_len(self) -> int: ...

    @src_len.setter
    def src_len(self, value: int): ...

    @property
    def dest_len(self) -> int: ...

    @dest_len.setter
    def dest_len(self, value: int): ...

    def __setitem__(self, index: int, value: Tuple[str, int, int, int, int]): ...

    @overload
    def __getitem__(self, key: slice) -> Opcodes: ...

    @overload
    def __getitem__(self, key: int) -> Tuple[str, int, int, int, int]: ...

    def __repr__(self) -> str: ...
