from __future__ import annotations

from typing import Any, Optional

class VarStruct:
    name: Any = ...
    shape: Any = ...
    dtype: Any = ...
    type: Any = ...
    lod_level: Any = ...
    persistable: Any = ...
    def __init__(self, name: Any, shape: Any, dtype: Any, type: Any, lod_level: Any, persistable: Any) -> None: ...

class VarDistributed:
    origin: Any = ...
    slice: Any = ...
    is_slice: bool = ...
    block_id: int = ...
    offset: int = ...
    vtype: Any = ...
    endpoint: Any = ...
    def __init__(
        self,
        origin_var: Any,
        slice_var: Any,
        is_slice: Optional[Any] = ...,
        block_id: Optional[Any] = ...,
        offset: Optional[Any] = ...,
        vtype: Optional[Any] = ...,
        endpoint: Optional[Any] = ...,
    ) -> None: ...
    @staticmethod
    def equal(var1: Any, var2: Any): ...

class VarsDistributed:
    distributed_vars: Any = ...
    def __init__(self) -> None: ...
    def add_distributed_var(
        self,
        origin_var: Any,
        slice_var: Any,
        is_slice: Optional[Any] = ...,
        block_id: Optional[Any] = ...,
        offset: Optional[Any] = ...,
        vtype: Optional[Any] = ...,
        endpoint: Optional[Any] = ...,
    ) -> None: ...
    def get_distributed_var_by_slice(self, var_name: Any): ...
    @staticmethod
    def equal(var1: Any, var2: Any): ...
    def get_distributed_var_by_origin_and_ep(self, origin_var_name: Any, endpoint: Any): ...
    def get_distributed_vars_by_vtypes(self, vtypes: Any, groupby: bool = ...): ...
    def get_distributed_vars_by_ep(self, endpoint: Any, vtype: Optional[Any] = ...): ...
    def overview(self): ...
