from typing import Optional, Sequence, Union

from pygame.color import Color
from pygame.surface import Surface

from ._common import _ColorValue, _Coordinate, _RectValue

def flip(surface: Surface, flip_x: bool, flip_y: bool) -> Surface: ...
def scale(
    surface: Surface,
    size: _Coordinate,
    dest_surface: Optional[Surface] = None,
) -> Surface: ...
def rotate(surface: Surface, angle: float) -> Surface: ...
def rotozoom(surface: Surface, angle: float, scale: float) -> Surface: ...
def scale2x(surface: Surface, dest_surface: Optional[Surface] = None) -> Surface: ...
def smoothscale(
    surface: Surface,
    size: _Coordinate,
    dest_surface: Optional[Surface] = None,
) -> Surface: ...
def get_smoothscale_backend() -> str: ...
def set_smoothscale_backend(backend: str) -> None: ...
def chop(surface: Surface, rect: _RectValue) -> Surface: ...
def laplacian(surface: Surface, dest_surface: Optional[Surface] = None) -> Surface: ...
def average_surfaces(
    surfaces: Sequence[Surface],
    dest_surface: Optional[Surface] = None,
    palette_colors: Union[bool, int] = 1,
) -> Surface: ...
def average_color(surface: Surface, rect: Optional[_RectValue] = None) -> Color: ...
def threshold(
    dest_surface: Optional[Surface],
    surface: Surface,
    search_color: Optional[_ColorValue],
    threshold: Optional[_ColorValue] = (0, 0, 0, 0),
    set_color: Optional[_ColorValue] = (0, 0, 0, 0),
    set_behavior: Optional[int] = 1,
    search_surf: Optional[Surface] = None,
    inverse_set: Optional[bool] = False,
) -> int: ...
