__all__: Final[tuple[str]] = ("Graph",)

from typing import Final

from nrw.datastructures._edge import Edge
from nrw.datastructures._list import List
from nrw.datastructures._vertex import Vertex

class Graph:
    __slots__: Final[tuple[str, str]] = ("_vertices", "_edges")
    __hash__ = None  # type: ignore[assignment]

    def __init__(self) -> None: ...
    @property
    def vertices(self) -> List[Vertex]: ...
    @property
    def edges(self) -> List[Edge]: ...
    def get_vertex(self, id_: str) -> Vertex | None: ...
    def add_vertex(self, vertex: Vertex | None) -> None: ...
    def remove_vertex(self, vertex: Vertex) -> None: ...
    def get_edge(self, vertex: Vertex, another_vertex: Vertex) -> Edge | None: ...
    def add_edge(self, edge: Edge | None) -> None: ...
    def remove_edge(self, edge: Edge) -> None: ...
    def set_all_vertex_marks(self, mark: bool) -> None: ...
    def all_vertices_marked(self) -> bool: ...
    def set_all_edge_marks(self, mark: bool) -> None: ...
    def all_edges_marked(self) -> bool: ...
    def get_neighbours(self, vertex: Vertex) -> List[Vertex]: ...
    def get_edges(self, vertex: Vertex) -> List[Edge]: ...
    @property
    def is_empty(self) -> bool: ...
