# SPDX-FileCopyrightText: 2021 The eminus developers
# SPDX-License-Identifier: Apache-2.0
from numpy import float64, int64
from numpy.typing import NDArray

from .typing import Array1D, Array2D, IntArray
from .utils import BaseObject

class KPoints(BaseObject):
    lattice: str
    a: float | Array2D | None
    is_built: bool
    def __init__(
        self,
        lattice: str,
        a: float | Array2D | None = ...,
    ) -> None: ...
    @property
    def kmesh(self) -> NDArray[int64]: ...
    @kmesh.setter
    def kmesh(self, value: IntArray) -> None: ...
    @property
    def wk(self) -> NDArray[float64]: ...
    @wk.setter
    def wk(self, value: Array1D) -> None: ...
    @property
    def k(self) -> NDArray[float64]: ...
    @k.setter
    def k(self, value: Array2D) -> None: ...
    @property
    def Nk(self) -> int: ...
    @Nk.setter
    def Nk(self, value: int) -> None: ...
    @property
    def kshift(self) -> NDArray[int64]: ...
    @kshift.setter
    def kshift(self, value: Array1D) -> None: ...
    @property
    def gamma_centered(self) -> bool: ...
    @gamma_centered.setter
    def gamma_centered(self, value: bool) -> None: ...
    @property
    def path(self) -> str | None: ...
    @path.setter
    def path(self, value: str | None) -> None: ...
    @property
    def k_scaled(self) -> NDArray[float64]: ...
    def build(self) -> KPoints: ...
    kernel = build

def kpoint_convert(
    k_points: Array2D,
    lattice_vectors: Array2D,
) -> NDArray[float64]: ...
def monkhorst_pack(nk: IntArray) -> NDArray[float64]: ...
def gamma_centered(nk: IntArray) -> NDArray[float64]: ...
def bandpath(kpts: KPoints) -> NDArray[float64]: ...
def kpoints2axis(kpts: KPoints) -> tuple[NDArray[float64], NDArray[float64], list[str]]: ...
def get_brillouin_zone(lattice_vectors: NDArray[float64]) -> NDArray[float64]: ...
