from sqlalchemy.orm.attributes import InstrumentedAttribute as InstrumentedAttribute
from sqlalchemy.orm.collections import InstrumentedList as InstrumentedList
from sqlalchemy.orm.query import Query as Query
from sqlalchemy.orm.session import Session
from sqlalchemy.sql.elements import BooleanClauseList as BooleanClauseList
from typing import Any, Callable, Dict, List, Optional, Union

class BaseNestedSets:
    @classmethod
    def __declare_first__(cls: Any) -> None: ...
    @classmethod
    def get_default_level(cls: Any) -> int: ...
    @classmethod
    def get_pk_name(cls: Any) -> str: ...
    @classmethod
    def get_pk_column(cls: Any) -> InstrumentedAttribute: ...
    def get_pk_value(self) -> int: ...
    def tree_id(self): ...
    def parent_id(self): ...
    def parent(self): ...
    def left(self): ...
    def right(self): ...
    def level(self): ...
    def is_ancestor_of(self, other: Any, inclusive: bool=...) -> bool: ...
    def is_descendant_of(self, other: Any, inclusive: bool=...) -> bool: ...
    mptt_move_inside: Any = ...
    def move_inside(self, parent_id: str) -> None: ...
    mptt_move_after: Any = ...
    def move_after(self, node_id: str) -> None: ...
    mptt_move_before: Any = ...
    def move_before(self, node_id: Union[int, str]) -> None: ...
    def leftsibling_in_level(self) -> Optional[Any]: ...
    @classmethod
    def get_tree(cls: Any, session: Session=..., json: bool=..., json_fields: Optional[Any]=..., query: Optional[Any]=...) -> List[Dict[str, Any]]: ...
    def drilldown_tree(self, session: Session=..., json: bool=..., json_fields: Optional[Any]=...) -> List[Dict[str, Any]]: ...
    def path_to_root(self, session: Session=..., order: Callable=...) -> Query: ...
    def get_siblings(self, include_self: bool=..., session: Optional[Session]=...) -> Query: ...
    def get_children(self, session: Optional[Session]=...) -> Query: ...
    @classmethod
    def rebuild_tree(cls: Any, session: Session, tree_id: Union[int, str]) -> None: ...
    @classmethod
    def rebuild(cls: Any, session: Session, tree_id: Optional[int]=...) -> None: ...
