from .Vector import *
from .Points import *
import numpy as np

class PyGeMatrix3d:
    matrix: np.ndarray
    def __init__(self, matrix_data: PyGeMatrix3d | np.ndarray | None = None) -> None: ...
    @staticmethod
    def translation(vector: PyGeVector3d) -> PyGeMatrix3d: ...
    @staticmethod
    def rotation(angle_rad: float, axis: PyGeVector3d, center: PyGePoint3d = None) -> PyGeMatrix3d: ...
    @staticmethod
    def scaling(scale_factor: float, center: PyGePoint3d = None) -> PyGeMatrix3d: ...
    @staticmethod
    def mirroring(plane_origin: PyGePoint3d, plane_normal: PyGeVector3d) -> PyGeMatrix3d: ...
    @staticmethod
    def projection(plane_origin: PyGePoint3d, plane_normal: PyGeVector3d) -> PyGeMatrix3d: ...
    def to_array(self): ...
    def __mul__(self, other: PyGeMatrix3d | int | float) -> PyGeMatrix3d: ...
    def __imul__(self, other: PyGeMatrix3d | int | float) -> PyGeMatrix3d: ...
    def invert(self): ...
    def inverse(self): ...
    def transposeIt(self) -> PyGeMatrix3d: ...
    def transpose(self) -> PyGeMatrix3d: ...
    def __call__(self): ...

class PyGeMatrix2d:
    matrix: np.ndarray
    def __init__(self, matrix_data: PyGeMatrix3d | np.ndarray | None = None) -> None: ...
    @staticmethod
    def translation(vector: PyGeVector2d) -> PyGeMatrix2d: ...
    @staticmethod
    def rotation(angle_rad: float, center: PyGePoint2d = None) -> PyGeMatrix2d: ...
    @staticmethod
    def scaling(scale_factor: float, center: PyGePoint2d = None) -> PyGeMatrix2d: ...
    @staticmethod
    def mirroring(line_origin: PyGePoint2d, line_normal: PyGeVector2d) -> PyGeMatrix2d: ...
    @staticmethod
    def projection(line_origin: PyGePoint2d, line_normal: PyGeVector2d) -> PyGeMatrix2d: ...
    def __mul__(self, other: PyGeMatrix2d | int | float) -> PyGeMatrix2d: ...
    def __imul__(self, other: PyGeMatrix2d | int | float) -> PyGeMatrix2d: ...
    def invert(self) -> None: ...
    def inverse(self) -> PyGeMatrix2d: ...
    def transposeIt(self) -> None: ...
    def transpose(self) -> PyGeMatrix2d: ...
    def __call__(self): ...
