import numpy as np
from typing import List

class Point:
    def __init__(self, *coords: AnyPoint) -> None: ...
    @property
    def coords(self): ...
    @coords.setter
    def coords(self, coords) -> None: ...
    def numpy(self) -> np.ndarray: ...
    def __len__(self): ...
    def __getitem__(self, i) -> Point: ...
    def __setitem__(self, i, v) -> None: ...
    def __iter__(self): ...
    def __eq__(self, other: Point) -> bool: ...
    def __hash__(self): ...
    def __add__(self, other): ...
    def __sub__(self, other): ...
    def __mul__(self, other): ...
    def __truediv__(self, other): ...
    def __radd__(self, other): ...
    def __rsub__(self, other): ...
    def __rmul__(self, other): ...
    def __rtruediv__(self, other): ...

class Size:
    def __init__(self, *sides: AnySize) -> None: ...
    @property
    def sides(self): ...
    @sides.setter
    def sides(self, other) -> None: ...
    def numpy(self) -> np.ndarray: ...
    def __len__(self): ...
    def __getitem__(self, i) -> Size: ...
    def __setitem__(self, i, v) -> None: ...
    def __iter__(self): ...
    def __eq__(self, other): ...
    def __ne__(self, other): ...
    def __hash__(self): ...

class Box:
    def __init__(self, anchor: Point, sides: Size, canvas: Size) -> None: ...
    def __len__(self): ...
    @property
    def anchor(self) -> Point: ...
    @anchor.setter
    def anchor(self, other) -> None: ...
    @property
    def sides(self) -> Size: ...
    @sides.setter
    def sides(self, other) -> None: ...
    @property
    def distant(self) -> Point: ...
    @property
    def centre(self) -> Point: ...
    @property
    def canvas(self) -> Size: ...
    @canvas.setter
    def canvas(self, other) -> None: ...
    def __hash__(self): ...
    def __contains__(self, point: Point): ...
    def __eq__(self, other: Box) -> bool: ...
    def __ne__(self, other: Box) -> bool: ...
    @property
    def area(self) -> float: ...
    def split(self, *points: Point) -> List['Box']: ...

def area_union(*boxes: Box) -> float: ...
def area_intersection(*box_groups: List[Box]) -> float: ...
