Source code for guppylang.std.list
"""EXPERIMENTAL: The `list` type"""
# ruff: noqa: E501
# mypy: disable-error-code="empty-body, misc, override, valid-type, no-untyped-def, type-arg"
from __future__ import annotations
from typing import TYPE_CHECKING, Generic
from guppylang_internals.decorator import custom_function, extend_type, hugr_op
from guppylang_internals.definition.custom import NoopCompiler
from guppylang_internals.std._internal.checker import UnsupportedChecker
from guppylang_internals.std._internal.compiler.list import (
ListGetitemCompiler,
ListLengthCompiler,
ListPopCompiler,
ListPushCompiler,
ListSetitemCompiler,
)
from guppylang_internals.std._internal.util import unsupported_op
from guppylang_internals.tys.builtin import list_type_def
from guppylang import guppy
from guppylang.std.option import Option # noqa: TCH001
if TYPE_CHECKING:
from guppylang.std.lang import owned
T = guppy.type_var("T")
L = guppy.type_var("L", copyable=False, droppable=False)
[docs]
@extend_type(list_type_def)
class list(Generic[T]):
"""Mutable sequence items with homogeneous types."""
[docs]
@custom_function(ListGetitemCompiler())
def __getitem__(self: list[L], idx: int) -> L: ...
[docs]
@custom_function(ListSetitemCompiler())
def __setitem__(self: list[L], idx: int, value: L @ owned) -> None: ...
[docs]
@custom_function(ListLengthCompiler())
def __len__(self: list[L]) -> int: ...
[docs]
@custom_function(checker=UnsupportedChecker(), higher_order_value=False)
def __new__(x): ...
[docs]
@custom_function(NoopCompiler()) # TODO: define via Guppy source instead
def __iter__(self: list[L] @ owned) -> list[L]: ...
[docs]
@hugr_op(unsupported_op("pop"))
def __next__(self: list[L] @ owned) -> Option[tuple[L, list[L]]]: ... # type: ignore[type-arg]
[docs]
@custom_function(ListPushCompiler())
def append(self: list[L], item: L @ owned) -> None: ...
[docs]
@custom_function(ListPopCompiler())
def pop(self: list[L]) -> L: ...