from __future__ import annotations
from abc import abstractmethod

from typing import TypeVar, NoReturn

import cohdl

T = TypeVar("T")
U = TypeVar("U")
Self = TypeVar("Self")

class AssignableType:
    @abstractmethod
    def _assign_(self, source, mode: cohdl.AssignMode) -> None: ...
    def __ilshift__(self: Self, source) -> Self: ...
    def __imatmul__(self: Self, source) -> Self: ...
    def __ixor__(self: Self, source) -> Self: ...
    @property
    def next(self) -> NoReturn: ...
    @next.setter
    def next(self, value): ...
    @property
    def push(self) -> NoReturn: ...
    @push.setter
    def push(self, value): ...
    @property
    def value(self) -> NoReturn: ...
    @value.setter
    def value(self, value): ...
