from typing import Protocol

from ..typing import Matrix, SquareMatrix, Vector


class BackendInterface(Protocol):
    def lll(self, lattice_basis: SquareMatrix, delta: float) -> SquareMatrix: ...

    def bkz(self, lattice_basis: SquareMatrix, block_size: int, delta: float) -> SquareMatrix: ...

    def hkz(self, lattice_basis: SquareMatrix, delta: float) -> SquareMatrix: ...

    def shortest_vector(self, lattice_basis: SquareMatrix) -> Vector: ...

    def hnf(self, matrix: Matrix) -> tuple[Matrix, SquareMatrix]: ...
