#
# This file is auto-generated. DO NOT MODIFY!  Run `make pystubs` to regenerate
#

import collections.abc
import numpy
import typing
import typing_extensions
from _typeshed import Incomplete
from typing import ClassVar, overload

AutoStride: int
BOX: VECSEMANTICS
CHAR: BASETYPE
COLOR: VECSEMANTICS
DOUBLE: BASETYPE
FLOAT: BASETYPE
HALF: BASETYPE
INT: BASETYPE
INT16: BASETYPE
INT32: BASETYPE
INT64: BASETYPE
INT8: BASETYPE
INTRO_STRING: str
KEYCODE: VECSEMANTICS
LASTBASE: BASETYPE
LONGLONG: BASETYPE
MATRIX33: AGGREGATE
MATRIX44: AGGREGATE
MakeTxBumpWithSlopes: MakeTextureMode
MakeTxEnvLatl: MakeTextureMode
MakeTxEnvLatlFromLightProbe: MakeTextureMode
MakeTxShadow: MakeTextureMode
MakeTxTexture: MakeTextureMode
NONE: BASETYPE
NONFINITE_BLACK: NonFiniteFixMode
NONFINITE_BOX3: NonFiniteFixMode
NONFINITE_NONE: NonFiniteFixMode
NORMAL: VECSEMANTICS
NOSEMANTICS: VECSEMANTICS
NOXFORM: VECSEMANTICS
OpenColorIO_version_hex: int
POINT: VECSEMANTICS
PTR: BASETYPE
RATIONAL: VECSEMANTICS
SCALAR: AGGREGATE
SHORT: BASETYPE
STRING: BASETYPE
TIMECODE: VECSEMANTICS
TypeBox2: TypeDesc
TypeBox2i: TypeDesc
TypeBox3: TypeDesc
TypeBox3i: TypeDesc
TypeColor: TypeDesc
TypeFloat: TypeDesc
TypeFloat2: TypeDesc
TypeFloat4: TypeDesc
TypeHalf: TypeDesc
TypeInt: TypeDesc
TypeInt16: TypeDesc
TypeInt32: TypeDesc
TypeInt64: TypeDesc
TypeInt8: TypeDesc
TypeKeyCode: TypeDesc
TypeMatrix: TypeDesc
TypeMatrix33: TypeDesc
TypeMatrix44: TypeDesc
TypeNormal: TypeDesc
TypePoint: TypeDesc
TypePointer: TypeDesc
TypeRational: TypeDesc
TypeString: TypeDesc
TypeTimeCode: TypeDesc
TypeUInt: TypeDesc
TypeUInt16: TypeDesc
TypeUInt32: TypeDesc
TypeUInt64: TypeDesc
TypeUInt8: TypeDesc
TypeUnknown: TypeDesc
TypeVector: TypeDesc
TypeVector2: TypeDesc
TypeVector2i: TypeDesc
TypeVector3i: TypeDesc
TypeVector4: TypeDesc
UCHAR: BASETYPE
UINT: BASETYPE
UINT16: BASETYPE
UINT32: BASETYPE
UINT64: BASETYPE
UINT8: BASETYPE
ULONGLONG: BASETYPE
UNKNOWN: BASETYPE
USHORT: BASETYPE
VEC2: AGGREGATE
VEC3: AGGREGATE
VEC4: AGGREGATE
VECTOR: VECSEMANTICS
VERSION: int
VERSION_MAJOR: int
VERSION_MINOR: int
VERSION_PATCH: int
VERSION_STRING: str
__version__: str
openimageio_version: int
supportsOpenColorIO: bool

class AGGREGATE:
    __members__: ClassVar[dict] = ...  # read-only
    MATRIX33: ClassVar[AGGREGATE] = ...
    MATRIX44: ClassVar[AGGREGATE] = ...
    SCALAR: ClassVar[AGGREGATE] = ...
    VEC2: ClassVar[AGGREGATE] = ...
    VEC3: ClassVar[AGGREGATE] = ...
    VEC4: ClassVar[AGGREGATE] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class BASETYPE:
    __members__: ClassVar[dict] = ...  # read-only
    CHAR: ClassVar[BASETYPE] = ...
    DOUBLE: ClassVar[BASETYPE] = ...
    FLOAT: ClassVar[BASETYPE] = ...
    HALF: ClassVar[BASETYPE] = ...
    INT: ClassVar[BASETYPE] = ...
    INT16: ClassVar[BASETYPE] = ...
    INT32: ClassVar[BASETYPE] = ...
    INT64: ClassVar[BASETYPE] = ...
    INT8: ClassVar[BASETYPE] = ...
    LASTBASE: ClassVar[BASETYPE] = ...
    LONGLONG: ClassVar[BASETYPE] = ...
    NONE: ClassVar[BASETYPE] = ...
    PTR: ClassVar[BASETYPE] = ...
    SHORT: ClassVar[BASETYPE] = ...
    STRING: ClassVar[BASETYPE] = ...
    UCHAR: ClassVar[BASETYPE] = ...
    UINT: ClassVar[BASETYPE] = ...
    UINT16: ClassVar[BASETYPE] = ...
    UINT32: ClassVar[BASETYPE] = ...
    UINT64: ClassVar[BASETYPE] = ...
    UINT8: ClassVar[BASETYPE] = ...
    ULONGLONG: ClassVar[BASETYPE] = ...
    UNKNOWN: ClassVar[BASETYPE] = ...
    USHORT: ClassVar[BASETYPE] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class ColorConfig:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, arg0: str, /) -> None: ...
    def configname(self) -> str: ...
    @staticmethod
    def default_colorconfig() -> ColorConfig: ...
    def equivalent(self, color_space: str, other_color_space: str) -> bool: ...
    def filepathOnlyMatchesDefaultRule(self, filepath: str) -> bool: ...
    def getAliases(self, arg0: str, /) -> list[str]: ...
    def getColorSpaceDataType(self, name: str) -> tuple[TypeDesc, int]: ...
    def getColorSpaceFamilyByName(self, name: str) -> str: ...
    @overload
    def getColorSpaceFromFilepath(self, filepath: str) -> str: ...
    @overload
    def getColorSpaceFromFilepath(self, filepath: str, default_cs: str, cs_name_match: bool = ...) -> str: ...
    def getColorSpaceIndex(self, name: str) -> int: ...
    def getColorSpaceNameByIndex(self, arg0: typing.SupportsInt, /) -> str: ...
    def getColorSpaceNameByRole(self, role: str) -> str: ...
    def getColorSpaceNames(self) -> list[str]: ...
    def getDefaultDisplayName(self) -> str: ...
    @overload
    def getDefaultViewName(self, display: str = ...) -> str: ...
    @overload
    def getDefaultViewName(self, display: str = ..., *, input_color_space: str) -> str: ...
    def getDisplayNameByIndex(self, arg0: typing.SupportsInt, /) -> str: ...
    def getDisplayNames(self) -> list[str]: ...
    def getDisplayViewColorSpaceName(self, display: str, view: str) -> str: ...
    def getDisplayViewLooks(self, display: str, view: str) -> str: ...
    def getLookNameByIndex(self, arg0: typing.SupportsInt, /) -> str: ...
    def getLookNames(self) -> list[str]: ...
    def getNamedTransformAliases(self, arg0: str, /) -> list[str]: ...
    def getNamedTransformNameByIndex(self, arg0: typing.SupportsInt, /) -> str: ...
    def getNamedTransformNames(self) -> list[str]: ...
    def getNumColorSpaces(self) -> int: ...
    def getNumDisplays(self) -> int: ...
    def getNumLooks(self) -> int: ...
    def getNumNamedTransforms(self) -> int: ...
    def getNumRoles(self) -> int: ...
    def getNumViews(self, display: str = ...) -> int: ...
    def getRoleByIndex(self, arg0: typing.SupportsInt, /) -> str: ...
    def getRoles(self) -> list[str]: ...
    def getViewNameByIndex(self, display: str = ..., *, index: typing.SupportsInt) -> str: ...
    def getViewNames(self, display: str = ...) -> list[str]: ...
    def get_cicp(self, *args, **kwargs): ...
    @overload
    def get_color_interop_id(self, arg0: str, /) -> str: ...
    @overload
    def get_color_interop_id(self, arg0, /) -> str: ...
    def geterror(self) -> str: ...
    def parseColorSpaceFromString(self, arg0: str, /) -> str: ...
    def resolve(self, name: str) -> str: ...

class CompareResults:
    def __init__(self) -> None: ...
    @property
    def PSNR(self) -> float: ...
    @property
    def error(self) -> bool: ...
    @property
    def maxc(self) -> int: ...
    @property
    def maxerror(self) -> float: ...
    @property
    def maxx(self) -> int: ...
    @property
    def maxy(self) -> int: ...
    @property
    def maxz(self) -> int: ...
    @property
    def meanerror(self) -> float: ...
    @property
    def nfail(self) -> int: ...
    @property
    def nwarn(self) -> int: ...
    @property
    def rms_error(self) -> float: ...

class DeepData:
    def __init__(self) -> None: ...
    def allocated(self) -> bool: ...
    def capacity(self, pixel: typing.SupportsInt) -> int: ...
    def channelname(self, arg0: typing.SupportsInt, /) -> str: ...
    def channelsize(self, arg0: typing.SupportsInt, /) -> int: ...
    def channeltype(self, arg0: typing.SupportsInt, /) -> TypeDesc: ...
    def clear(self) -> None: ...
    def copy_deep_pixel(self, pixel: typing.SupportsInt, src: DeepData, srcpixel: typing.SupportsInt) -> bool: ...
    def copy_deep_sample(self, pixel: typing.SupportsInt, sample: typing.SupportsInt, src: DeepData, srcpixel: typing.SupportsInt, srcsample: typing.SupportsInt) -> bool: ...
    def deep_value(self, pixel: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt) -> float: ...
    def deep_value_uint(self, pixel: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt) -> int: ...
    def erase_samples(self, pixel: typing.SupportsInt, samplepos: typing.SupportsInt, nsamples: typing.SupportsInt = ...) -> None: ...
    def free(self) -> None: ...
    @overload
    def init(self, npixels: typing.SupportsInt, nchannels: typing.SupportsInt, channeltypes: object, channelnames: object) -> None: ...
    @overload
    def init(self, arg0: ImageSpec, /) -> None: ...
    def initialized(self) -> bool: ...
    def insert_samples(self, pixel: typing.SupportsInt, samplepos: typing.SupportsInt, nsamples: typing.SupportsInt = ...) -> None: ...
    def merge_deep_pixels(self, pixel: typing.SupportsInt, src: DeepData, srcpixel: typing.SupportsInt) -> None: ...
    def merge_overlaps(self, pixel: typing.SupportsInt) -> None: ...
    def occlusion_cull(self, pixel: typing.SupportsInt) -> None: ...
    def opaque_z(self, pixel: typing.SupportsInt) -> float: ...
    def same_channeltypes(self, arg0: DeepData, /) -> bool: ...
    def samples(self, pixel: typing.SupportsInt) -> int: ...
    def samplesize(self) -> int: ...
    def set_capacity(self, pixel: typing.SupportsInt, nsamples: typing.SupportsInt) -> None: ...
    def set_deep_value(self, pixel: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt, value: typing.SupportsFloat) -> None: ...
    def set_deep_value_uint(self, pixel: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt, value: typing.SupportsInt) -> None: ...
    def set_samples(self, pixel: typing.SupportsInt, nsamples: typing.SupportsInt) -> None: ...
    def sort(self, pixel: typing.SupportsInt) -> None: ...
    def split(self, pixel: typing.SupportsInt, depth: typing.SupportsFloat) -> bool: ...
    @property
    def AB_channel(self) -> int: ...
    @property
    def AG_channel(self) -> int: ...
    @property
    def AR_channel(self) -> int: ...
    @property
    def A_channel(self) -> int: ...
    @property
    def Z_channel(self) -> int: ...
    @property
    def Zback_channel(self) -> int: ...
    @property
    def channels(self) -> int: ...
    @property
    def pixels(self) -> int: ...

class ImageBuf:
    orientation: int
    roi_full: ROI
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, arg0: str, /) -> None: ...
    @overload
    def __init__(self, arg0: str, arg1: typing.SupportsInt, arg2: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: ImageSpec, /) -> None: ...
    @overload
    def __init__(self, arg0: ImageSpec, arg1: bool, /) -> None: ...
    @overload
    def __init__(self, name: str, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, config: ImageSpec) -> None: ...
    @overload
    def __init__(self, buffer: typing_extensions.Buffer) -> None: ...
    def clear(self) -> None: ...
    def clear_thumbnail(self) -> None: ...
    @overload
    def copy(self, src: ImageBuf, format: TypeDesc | BASETYPE | str = ...) -> bool: ...
    @overload
    def copy(self, format: TypeDesc | BASETYPE | str = ...) -> ImageBuf: ...
    def copy_metadata(self, arg0: ImageBuf, /) -> None: ...
    def copy_pixels(self, arg0: ImageBuf, /) -> bool: ...
    def deep_erase_samples(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ..., *, samplepos: typing.SupportsInt, nsamples: typing.SupportsInt = ...) -> None: ...
    def deep_insert_samples(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ..., *, samplepos: typing.SupportsInt, nsamples: typing.SupportsInt = ...) -> None: ...
    def deep_samples(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ...) -> int: ...
    def deep_value(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt) -> float: ...
    def deep_value_uint(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt) -> int: ...
    def deepdata(self) -> DeepData: ...
    def get_pixels(self, format: TypeDesc | BASETYPE | str = ..., roi: ROI = ...) -> numpy.ndarray | None: ...
    def get_thumbnail(self) -> ImageBuf: ...
    def getchannel(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, c: typing.SupportsInt, wrap=...) -> float: ...
    def geterror(self, clear: bool = ...) -> str: ...
    def getpixel(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ..., wrap: str = ...) -> tuple[float, ...]: ...
    def init_spec(self, filename: str, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ...) -> bool: ...
    def interppixel(self, x: typing.SupportsFloat, y: typing.SupportsFloat, wrap: str = ...) -> tuple[float, ...]: ...
    def interppixel_NDC(self, x: typing.SupportsFloat, y: typing.SupportsFloat, wrap: str = ...) -> tuple[float, ...]: ...
    def interppixel_NDC_full(self, x: typing.SupportsFloat, y: typing.SupportsFloat, wrap: str = ...) -> tuple[float, ...]: ...
    def interppixel_bicubic(self, x: typing.SupportsFloat, y: typing.SupportsFloat, wrap: str = ...) -> tuple[float, ...]: ...
    def interppixel_bicubic_NDC(self, x: typing.SupportsFloat, y: typing.SupportsFloat, wrap: str = ...) -> tuple[float, ...]: ...
    def make_writable(self, keep_cache_type: bool = ...) -> bool: ...
    def merge_metadata(self, src: ImageBuf, override: bool = ..., pattern: str = ...) -> None: ...
    def nativespec(self) -> ImageSpec: ...
    def pixelindex(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, check_range: bool = ...) -> int: ...
    @overload
    def read(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, force: bool, convert: TypeDesc | BASETYPE | str) -> bool: ...
    @overload
    def read(self, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ..., force: bool = ..., convert: TypeDesc | BASETYPE | str = ...) -> bool: ...
    @overload
    def reset(self, name: str, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ...) -> None: ...
    @overload
    def reset(self, name: str, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ..., config: ImageSpec = ...) -> None: ...
    @overload
    def reset(self, spec: ImageSpec, zero: bool = ...) -> None: ...
    @overload
    def reset(self, buffer: typing_extensions.Buffer) -> None: ...
    def set_deep_samples(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ..., nsamples: typing.SupportsInt = ...) -> None: ...
    def set_deep_value(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt, value: typing.SupportsFloat = ...) -> None: ...
    def set_deep_value_uint(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, channel: typing.SupportsInt, sample: typing.SupportsInt, value: typing.SupportsInt = ...) -> None: ...
    def set_full(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, arg2: typing.SupportsInt, arg3: typing.SupportsInt, arg4: typing.SupportsInt, arg5: typing.SupportsInt, /) -> None: ...
    def set_origin(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ...) -> None: ...
    def set_pixels(self, roi: ROI, pixels: typing_extensions.Buffer) -> bool: ...
    def set_thumbnail(self, thumb: ImageBuf) -> None: ...
    def set_write_format(self, arg0: object, /) -> None: ...
    def set_write_tiles(self, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., depth: typing.SupportsInt = ...) -> None: ...
    @overload
    def setpixel(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, pixel: object) -> None: ...
    @overload
    def setpixel(self, x: typing.SupportsInt, y: typing.SupportsInt, pixel: object) -> None: ...
    @overload
    def setpixel(self, i: typing.SupportsInt, pixel: object) -> None: ...
    def spec(self) -> ImageSpec: ...
    def specmod(self) -> ImageSpec: ...
    def swap(self, arg0: ImageBuf, /) -> None: ...
    @overload
    def write(self, filename: str, dtype: TypeDesc | BASETYPE | str = ..., fileformat: str = ...) -> bool: ...
    @overload
    def write(self, out: ImageOutput) -> bool: ...
    @property
    def deep(self) -> bool: ...
    @property
    def file_format_name(self) -> str: ...
    @property
    def has_error(self) -> bool: ...
    @property
    def has_thumbnail(self) -> bool: ...
    @property
    def initialized(self) -> bool: ...
    @property
    def miplevel(self) -> int: ...
    @property
    def name(self) -> str: ...
    @property
    def nchannels(self) -> int: ...
    @property
    def nmiplevels(self) -> int: ...
    @property
    def nsubimages(self) -> int: ...
    @property
    def oriented_full_height(self) -> int: ...
    @property
    def oriented_full_width(self) -> int: ...
    @property
    def oriented_full_x(self) -> int: ...
    @property
    def oriented_full_y(self) -> int: ...
    @property
    def oriented_height(self) -> int: ...
    @property
    def oriented_width(self) -> int: ...
    @property
    def oriented_x(self) -> int: ...
    @property
    def oriented_y(self) -> int: ...
    @property
    def pixels_valid(self) -> bool: ...
    @property
    def pixeltype(self) -> TypeDesc: ...
    @property
    def roi(self) -> ROI: ...
    @property
    def subimage(self) -> int: ...
    @property
    def xbegin(self) -> int: ...
    @property
    def xend(self) -> int: ...
    @property
    def xmax(self) -> int: ...
    @property
    def xmin(self) -> int: ...
    @property
    def ybegin(self) -> int: ...
    @property
    def yend(self) -> int: ...
    @property
    def ymax(self) -> int: ...
    @property
    def ymin(self) -> int: ...
    @property
    def zbegin(self) -> int: ...
    @property
    def zend(self) -> int: ...
    @property
    def zmax(self) -> int: ...
    @property
    def zmin(self) -> int: ...

class ImageBufAlgo:
    def __init__(self, *args, **kwargs) -> None: ...
    @overload
    @staticmethod
    def abs(dst: ImageBuf, A: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def abs(A: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def absdiff(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def absdiff(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def absdiff(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def absdiff(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def add(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def add(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def add(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def add(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def bluenoise_image() -> ImageBuf: ...
    @overload
    @staticmethod
    def channel_append(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def channel_append(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def channel_sum(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def channel_sum(dst: ImageBuf, src: ImageBuf, weight: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def channel_sum(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def channel_sum(src: ImageBuf, weight: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def channels(dst: ImageBuf, src: ImageBuf, channelorder: tuple, newchannelnames: tuple = ..., shuffle_channel_names: bool = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def channels(src: ImageBuf, channelorder: tuple, newchannelnames: tuple = ..., shuffle_channel_names: bool = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def checker(dst: ImageBuf, width: typing.SupportsInt, height: typing.SupportsInt, depth: typing.SupportsInt, color1: object, color2: object, xoffset: typing.SupportsInt = ..., yoffset: typing.SupportsInt = ..., zoffset: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def checker(width: typing.SupportsInt, height: typing.SupportsInt, depth: typing.SupportsInt, color1: object, color2: object, xoffset: typing.SupportsInt = ..., yoffset: typing.SupportsInt = ..., zoffset: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def circular_shift(dst: ImageBuf, src: ImageBuf, xshift: typing.SupportsInt, yshift: typing.SupportsInt, zshift: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def circular_shift(src: ImageBuf, xshift: typing.SupportsInt, yshift: typing.SupportsInt, zshift: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def clamp(dst: ImageBuf, src: ImageBuf, min: float | typing.Iterable[float], max: float | typing.Iterable[float], clampalpha01: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def clamp(src: ImageBuf, min: float | typing.Iterable[float], max: float | typing.Iterable[float], clampalpha01: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def color_map(dst: ImageBuf, src: ImageBuf, srcchannel: typing.SupportsInt, mapname: str, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def color_map(dst: ImageBuf, src: ImageBuf, srcchannel: typing.SupportsInt, nknots: typing.SupportsInt, channels: typing.SupportsInt, knots: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def color_map(src: ImageBuf, srcchannel: typing.SupportsInt, mapname: str, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def color_map(src: ImageBuf, srcchannel: typing.SupportsInt, nknots: typing.SupportsInt, channels: typing.SupportsInt, knots: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def color_range_check(src: ImageBuf, low: object, high: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> tuple[int, ...] | None: ...
    @overload
    @staticmethod
    def colorconvert(dst: ImageBuf, src: ImageBuf, fromspace: str, tospace: str, unpremult: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def colorconvert(dst: ImageBuf, src: ImageBuf, fromspace: str, tospace: str, unpremult: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def colorconvert(src: ImageBuf, fromspace: str, tospace: str, unpremult: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def colorconvert(src: ImageBuf, fromspace: str, tospace: str, unpremult: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def colormatrixtransform(dst: ImageBuf, src: ImageBuf, M: object, unpremult: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def colormatrixtransform(src: ImageBuf, M: object, unpremult: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def compare(A: ImageBuf, B: ImageBuf, failthresh: typing.SupportsFloat, warnthresh: typing.SupportsFloat, result: CompareResults, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def compare(A: ImageBuf, B: ImageBuf, failthresh: typing.SupportsFloat, warnthresh: typing.SupportsFloat, failrelative: typing.SupportsFloat = ..., warnrelative: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> CompareResults: ...
    @overload
    @staticmethod
    def compare(A: ImageBuf, B: ImageBuf, failthresh: typing.SupportsFloat, warnthresh: typing.SupportsFloat, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> CompareResults: ...
    @staticmethod
    def compare_Yee(A: ImageBuf, B: ImageBuf, result: CompareResults, luminance: typing.SupportsFloat = ..., fov: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def complex_to_polar(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def complex_to_polar(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def computePixelHashSHA1(src: ImageBuf, extrainfo: str = ..., roi: ROI = ..., blocksize: typing.SupportsInt = ..., nthreads: typing.SupportsInt = ...) -> str: ...
    @overload
    @staticmethod
    def computePixelStats(src: ImageBuf, stats: PixelStats, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def computePixelStats(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> PixelStats: ...
    @overload
    @staticmethod
    def contrast_remap(dst: ImageBuf, src: ImageBuf, black: float | typing.Iterable[float] = ..., white: float | typing.Iterable[float] = ..., min: float | typing.Iterable[float] = ..., max: float | typing.Iterable[float] = ..., scontrast: float | typing.Iterable[float] = ..., sthresh: float | typing.Iterable[float] = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def contrast_remap(src: ImageBuf, black: float | typing.Iterable[float] = ..., white: float | typing.Iterable[float] = ..., min: float | typing.Iterable[float] = ..., max: float | typing.Iterable[float] = ..., scontrast: float | typing.Iterable[float] = ..., sthresh: float | typing.Iterable[float] = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def convolve(dst: ImageBuf, src: ImageBuf, kernel: ImageBuf, normalze: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def convolve(src: ImageBuf, kernel: ImageBuf, normalze: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def copy(dst: ImageBuf, src: ImageBuf, convert: TypeDesc | BASETYPE | str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def copy(src: ImageBuf, convert: TypeDesc | BASETYPE | str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def crop(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def crop(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def cut(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def cut(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def deep_holdout(dst: ImageBuf, src: ImageBuf, holdout: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def deep_holdout(src: ImageBuf, holdout: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def deep_merge(dst: ImageBuf, A: ImageBuf, B: ImageBuf, occlusion_cull: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def deep_merge(A: ImageBuf, B: ImageBuf, occlusion_cull: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def deepen(dst: ImageBuf, src: ImageBuf, zvalue: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def deepen(src: ImageBuf, zvalue: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def demosaic(dst: ImageBuf, src: ImageBuf, pattern: str = ..., algorithm: str = ..., layout: str = ..., white_balance_mode: str = ..., white_balance: float | typing.Iterable[float] = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def demosaic(src: ImageBuf, pattern: str = ..., algorithm: str = ..., layout: str = ..., white_balance_mode: str = ..., white_balance: float | typing.Iterable[float] = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def dilate(dst: ImageBuf, src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def dilate(src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def div(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def div(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def div(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def div(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def erode(dst: ImageBuf, src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def erode(src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fft(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fft(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fill(dst: ImageBuf, values: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fill(dst: ImageBuf, top: float | typing.Iterable[float], bottom: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fill(dst: ImageBuf, topleft: float | typing.Iterable[float], topright: float | typing.Iterable[float], bottomleft: float | typing.Iterable[float], bottomright: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fill(values: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fill(top: float | typing.Iterable[float], bottom: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fill(topleft: float | typing.Iterable[float], topright: float | typing.Iterable[float], bottomleft: float | typing.Iterable[float], bottomright: float | typing.Iterable[float], roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fillholes_pushpull(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fillholes_pushpull(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fit(dst: ImageBuf, src: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., fillmode: str = ..., exact: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fit(src: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., fillmode: str = ..., exact: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def fixNonFinite(dst: ImageBuf, src: ImageBuf, mode: NonFiniteFixMode = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def fixNonFinite(src: ImageBuf, mode: NonFiniteFixMode = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def flatten(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def flatten(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def flip(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def flip(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def flop(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def flop(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def histogram(src: ImageBuf, channel: typing.SupportsInt = ..., bins: typing.SupportsInt = ..., min: typing.SupportsFloat = ..., max: typing.SupportsFloat = ..., ignore_empty: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> tuple[int, ...]: ...
    @overload
    @staticmethod
    def ifft(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ifft(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def invert(dst: ImageBuf, A: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def invert(A: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def isConstantChannel(src: ImageBuf, channel: typing.SupportsInt, val: typing.SupportsFloat, threshold: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @staticmethod
    def isConstantColor(src: ImageBuf, threshold: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> tuple[float, ...] | None: ...
    @staticmethod
    def isMonochrome(src: ImageBuf, threshold: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def laplacian(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def laplacian(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mad(dst: ImageBuf, A: ImageBuf, B: ImageBuf, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mad(dst: ImageBuf, A: ImageBuf, B: object, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mad(dst: ImageBuf, A: object, B: ImageBuf, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mad(dst: ImageBuf, A: ImageBuf, B: object, C: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mad(A: ImageBuf, B: ImageBuf, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mad(A: ImageBuf, B: object, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mad(A: object, B: ImageBuf, C: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mad(A: ImageBuf, B: object, C: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def make_kernel(dst: ImageBuf, name: str, width: typing.SupportsFloat, height: typing.SupportsFloat, depth: typing.SupportsFloat = ..., normalize: bool = ...) -> bool: ...
    @overload
    @staticmethod
    def make_kernel(name: str, width: typing.SupportsFloat, height: typing.SupportsFloat, depth: typing.SupportsFloat = ..., normalize: bool = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def make_texture(mode: MakeTextureMode, filename: str, outputfilename: str, config: ImageSpec = ...) -> bool: ...
    @overload
    @staticmethod
    def make_texture(mode: MakeTextureMode, buf: ImageBuf, outputfilename: str, config: ImageSpec = ...) -> bool: ...
    @overload
    @staticmethod
    def max(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def max(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def max(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def max(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def maxchan(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def maxchan(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def median_filter(dst: ImageBuf, src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def median_filter(src: ImageBuf, width: typing.SupportsInt = ..., height: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def min(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def min(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def min(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def min(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def minchan(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def minchan(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mul(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mul(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def mul(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def mul(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def noise(dst: ImageBuf, type: str = ..., A: typing.SupportsFloat = ..., B: typing.SupportsFloat = ..., mono: bool = ..., seed: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def noise(type: str = ..., A: typing.SupportsFloat = ..., B: typing.SupportsFloat = ..., mono: bool = ..., seed: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def nonzero_region(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ROI: ...
    @overload
    @staticmethod
    def normalize(dst: ImageBuf, src: ImageBuf, inCenter: typing.SupportsFloat = ..., outCenter: typing.SupportsFloat = ..., scale: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def normalize(src: ImageBuf, inCenter: typing.SupportsFloat = ..., outCenter: typing.SupportsFloat = ..., scale: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociodisplay(dst: ImageBuf, src: ImageBuf, display: str, view: str, fromspace: str = ..., looks: str = ..., unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociodisplay(dst: ImageBuf, src: ImageBuf, display: str, view: str, fromspace: str = ..., looks: str = ..., unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociodisplay(src: ImageBuf, display: str, view: str, fromspace: str = ..., looks: str = ..., unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociodisplay(src: ImageBuf, display: str, view: str, fromspace: str = ..., looks: str = ..., unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociodisplay(dst: ImageBuf, src: ImageBuf, display: str, view: str, fromspace: str, looks: str, unpremult: bool, context_key: str, context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociodisplay(dst: ImageBuf, src: ImageBuf, display: str, view: str, fromspace: str, looks: str, unpremult: bool, context_key: str, context_value: str, colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociodisplay(src: ImageBuf, display: str, view: str, fromspace: str, looks: str, unpremult: bool, context_key: str, context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociodisplay(src: ImageBuf, display: str, view: str, fromspace: str, looks: str, unpremult: bool, context_key: str, context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociofiletransform(dst: ImageBuf, src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociofiletransform(dst: ImageBuf, src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociofiletransform(src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociofiletransform(src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociolook(dst: ImageBuf, src: ImageBuf, looks: str, fromspace: str, tospace: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociolook(dst: ImageBuf, src: ImageBuf, looks: str, fromspace: str, tospace: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ociolook(src: ImageBuf, looks: str, fromspace: str, tospace: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ociolook(src: ImageBuf, looks: str, fromspace: str, tospace: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ocionamedtransform(dst: ImageBuf, src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ocionamedtransform(dst: ImageBuf, src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def ocionamedtransform(src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def ocionamedtransform(src: ImageBuf, name: str, unpremult: bool = ..., inverse: bool = ..., context_key: str = ..., context_value: str = ..., colorconfig: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def over(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def over(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def paste(dst: ImageBuf, xbegin: typing.SupportsInt, ybegin: typing.SupportsInt, zbegin: typing.SupportsInt, chbegin: typing.SupportsInt, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def polar_to_complex(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def polar_to_complex(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def pow(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def pow(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def premult(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def premult(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rangecompress(dst: ImageBuf, src: ImageBuf, useluma: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rangecompress(src: ImageBuf, useluma: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rangeexpand(dst: ImageBuf, src: ImageBuf, useluma: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rangeexpand(src: ImageBuf, useluma: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def render_box(dst: ImageBuf, x1: typing.SupportsInt, y1: typing.SupportsInt, x2: typing.SupportsInt, y2: typing.SupportsInt, color: float | typing.Iterable[float] = ..., fill: bool = ...) -> bool: ...
    @staticmethod
    def render_line(dst: ImageBuf, x1: typing.SupportsInt, y1: typing.SupportsInt, x2: typing.SupportsInt, y2: typing.SupportsInt, color: float | typing.Iterable[float] = ..., skip_first_point: bool = ...) -> bool: ...
    @staticmethod
    def render_point(dst: ImageBuf, x: typing.SupportsInt, y: typing.SupportsInt, color: float | typing.Iterable[float] = ...) -> bool: ...
    @staticmethod
    def render_text(dst: ImageBuf, x: typing.SupportsInt, y: typing.SupportsInt, text: str, fontsize: typing.SupportsInt = ..., fontname: str = ..., textcolor: object = ..., alignx: str = ..., aligny: str = ..., shadow: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def reorient(dst: ImageBuf, src: ImageBuf, nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def reorient(src: ImageBuf, nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def repremult(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def repremult(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def resample(dst: ImageBuf, src: ImageBuf, interpolate: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def resample(src: ImageBuf, interpolate: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def resize(dst: ImageBuf, src: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def resize(src: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rotate(dst: ImageBuf, src: ImageBuf, angle: typing.SupportsFloat, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rotate(dst: ImageBuf, src: ImageBuf, angle: typing.SupportsFloat, center_x: typing.SupportsFloat, center_y: typing.SupportsFloat, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rotate(src: ImageBuf, angle: typing.SupportsFloat, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rotate(src: ImageBuf, angle: typing.SupportsFloat, center_x: typing.SupportsFloat, center_y: typing.SupportsFloat, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rotate180(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rotate180(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rotate270(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rotate270(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def rotate90(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def rotate90(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def saturate(dst: ImageBuf, src: ImageBuf, scale: typing.SupportsFloat = ..., firstchannel: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def saturate(src: ImageBuf, scale: typing.SupportsFloat = ..., firstchannel: typing.SupportsInt = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def scale(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def scale(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def st_warp(dst: ImageBuf, src: ImageBuf, stbuf: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., chan_s: typing.SupportsInt = ..., chan_t: typing.SupportsInt = ..., flip_s: bool = ..., flip_t: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def st_warp(src: ImageBuf, stbuf: ImageBuf, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., chan_s: typing.SupportsInt = ..., chan_t: typing.SupportsInt = ..., flip_s: bool = ..., flip_t: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def sub(dst: ImageBuf, A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def sub(dst: ImageBuf, A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def sub(A: ImageBuf, B: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def sub(A: ImageBuf, B: object, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @staticmethod
    def text_size(text: str, fontsize: typing.SupportsInt = ..., fontname: str = ...) -> ROI: ...
    @overload
    @staticmethod
    def transpose(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def transpose(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def unpremult(dst: ImageBuf, src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def unpremult(src: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def unsharp_mask(dst: ImageBuf, src: ImageBuf, kernel: str = ..., width: typing.SupportsFloat = ..., contrast: typing.SupportsFloat = ..., threshold: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def unsharp_mask(src: ImageBuf, kernel: str = ..., width: typing.SupportsFloat = ..., contrast: typing.SupportsFloat = ..., threshold: typing.SupportsFloat = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def warp(dst: ImageBuf, src: ImageBuf, M: object, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., wrap: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def warp(src: ImageBuf, M: object, filtername: str = ..., filterwidth: typing.SupportsFloat = ..., recompute_roi: bool = ..., wrap: str = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def zero(dst: ImageBuf, roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def zero(roi: ROI, nthreads: typing.SupportsInt = ...) -> ImageBuf: ...
    @overload
    @staticmethod
    def zover(dst: ImageBuf, A: ImageBuf, B: ImageBuf, z_zeroisinf: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> bool: ...
    @overload
    @staticmethod
    def zover(A: ImageBuf, B: ImageBuf, z_zeroisinf: bool = ..., roi: ROI = ..., nthreads: typing.SupportsInt = ...) -> ImageBuf: ...

class ImageCache:
    def __init__(self, shared: bool = ...) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsInt, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: str, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: object, /) -> None: ...
    @staticmethod
    def destroy(cache: ImageCache, teardown: bool = ...) -> None: ...
    def get_cache_dimensions(self, filename: str, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ...) -> ImageSpec: ...
    def get_imagespec(self, filename: str, subimage: typing.SupportsInt = ...) -> ImageSpec: ...
    @overload
    def get_pixels(self, filename: str, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt = ..., zend: typing.SupportsInt = ..., datatype: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def get_pixels(self, filename: str, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, roi: ROI, datatype: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    def getattribute(self, name: str, type: TypeDesc | BASETYPE | str = ...) -> typing.Any: ...
    def getattributetype(self, name: str) -> TypeDesc: ...
    def geterror(self, clear: bool = ...) -> str: ...
    def getstats(self, level: typing.SupportsInt = ...) -> str: ...
    def invalidate(self, filename: str, force: bool = ...) -> None: ...
    def invalidate_all(self, force: bool = ...) -> None: ...
    def resolve_filename(self, arg0: str, /) -> str: ...
    @property
    def has_error(self) -> bool: ...

class ImageInput:
    def __init__(self, *args, **kwargs) -> None: ...
    def close(self) -> bool: ...
    @staticmethod
    def create(filename: str, plugin_searchpath: str = ...) -> ImageInput: ...
    def current_miplevel(self) -> int: ...
    def current_subimage(self) -> int: ...
    def format_name(self) -> str: ...
    def get_thumbnail(self, *args, **kwargs): ...
    def geterror(self, clear: bool = ...) -> str: ...
    @overload
    @staticmethod
    def open(filename: str) -> ImageInput: ...
    @overload
    @staticmethod
    def open(filename: str, config: ImageSpec) -> ImageInput: ...
    @overload
    def read_image(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_image(self, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_image(self, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    def read_native_deep_image(self, subimage: typing.SupportsInt = ..., miplevel: typing.SupportsInt = ...) -> DeepData: ...
    def read_native_deep_scanlines(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, z: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt) -> DeepData: ...
    def read_native_deep_tiles(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt, zend: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt) -> DeepData: ...
    def read_scanline(self, y: typing.SupportsInt, z: typing.SupportsInt = ..., format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_scanlines(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, z: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_scanlines(self, ybegin: typing.SupportsInt, yend: typing.SupportsInt, z: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    def read_tile(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_tiles(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt, zend: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    @overload
    def read_tiles(self, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt, zend: typing.SupportsInt, chbegin: typing.SupportsInt, chend: typing.SupportsInt, format: TypeDesc | BASETYPE | str = ...) -> numpy.ndarray | None: ...
    def seek_subimage(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, /) -> bool: ...
    @overload
    def spec(self) -> ImageSpec: ...
    @overload
    def spec(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt = ...) -> ImageSpec: ...
    def spec_dimensions(self, subimage: typing.SupportsInt, miplevel: typing.SupportsInt = ...) -> ImageSpec: ...
    def supports(self, arg0: str, /) -> int: ...
    def valid_file(self, arg0: str, /) -> bool: ...
    @property
    def has_error(self) -> bool: ...

class ImageOutput:
    def __init__(self, *args, **kwargs) -> None: ...
    def close(self) -> bool: ...
    def copy_image(self, arg0: ImageInput, /) -> bool: ...
    @staticmethod
    def create(filename: str, plugin_searchpath: str = ...) -> ImageOutput: ...
    def format_name(self) -> str: ...
    def geterror(self, clear: bool = ...) -> str: ...
    @overload
    def open(self, filename: str, spec: ImageSpec, mode: str = ...) -> bool: ...
    @overload
    def open(self, filename: str, specs: collections.abc.Sequence[ImageSpec]) -> bool: ...
    @overload
    def open(self, arg0: str, arg1: tuple, /) -> bool: ...
    def set_thumbnail(self, arg0, /) -> bool: ...
    def spec(self) -> ImageSpec: ...
    def supports(self, arg0: str, /) -> int: ...
    def write_deep_image(self, arg0: DeepData, /) -> bool: ...
    def write_deep_scanlines(self, ybegin: typing.SupportsInt, yend: typing.SupportsInt, z: typing.SupportsInt, deepdata: DeepData) -> bool: ...
    def write_deep_tiles(self, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt, zend: typing.SupportsInt, deepdata: DeepData) -> bool: ...
    def write_image(self, arg0: typing_extensions.Buffer, /) -> bool: ...
    def write_scanline(self, y: typing.SupportsInt, z: typing.SupportsInt, pixels: typing_extensions.Buffer) -> bool: ...
    def write_scanlines(self, ybegin: typing.SupportsInt, yend: typing.SupportsInt, z: typing.SupportsInt, pixels: typing_extensions.Buffer) -> bool: ...
    def write_tile(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt, pixels: typing_extensions.Buffer) -> bool: ...
    def write_tiles(self, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt, zend: typing.SupportsInt, pixels: typing_extensions.Buffer) -> bool: ...
    @property
    def has_error(self) -> bool: ...

class ImageSpec:
    alpha_channel: int
    channelformats: tuple
    channelnames: tuple
    deep: bool
    depth: int
    extra_attribs: ParamValueList
    format: TypeDesc
    full_depth: int
    full_height: int
    full_width: int
    full_x: int
    full_y: int
    full_z: int
    height: int
    nchannels: int
    roi: Incomplete
    roi_full: Incomplete
    tile_depth: int
    tile_height: int
    tile_width: int
    width: int
    x: int
    y: int
    z: int
    z_channel: int
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, arg2: typing.SupportsInt, arg3: TypeDesc | BASETYPE | str, /) -> None: ...
    @overload
    def __init__(self, arg0, arg1: TypeDesc | BASETYPE | str, /) -> None: ...
    @overload
    def __init__(self, arg0: TypeDesc | BASETYPE | str, /) -> None: ...
    @overload
    def __init__(self, arg0: ImageSpec, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsInt, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: str, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: object, /) -> None: ...
    @overload
    def channel_bytes(self) -> int: ...
    @overload
    def channel_bytes(self, channel: typing.SupportsInt, native: bool = ...) -> int: ...
    def channel_name(self, arg0: typing.SupportsInt, /) -> str: ...
    def channelformat(self, arg0: typing.SupportsInt, /) -> TypeDesc: ...
    def channelindex(self, arg0: str, /) -> int: ...
    def copy(self) -> ImageSpec: ...
    def copy_dimensions(self, other: ImageSpec) -> None: ...
    def default_channel_names(self) -> None: ...
    def erase_attribute(self, name: str = ..., type: TypeDesc | BASETYPE | str = ..., casesensitive: bool = ...) -> None: ...
    def from_xml(self, arg0: str, /) -> None: ...
    def get(self, key: str, default: object = ...) -> typing.Any: ...
    def get_bytes_attribute(self, name: str, defaultval: str = ...) -> bytes: ...
    def get_channelformats(self) -> tuple[TypeDesc, ...]: ...
    def get_float_attribute(self, name: str, defaultval: typing.SupportsFloat = ...) -> float: ...
    def get_int_attribute(self, name: str, defaultval: typing.SupportsInt = ...) -> int: ...
    def get_string_attribute(self, name: str, defaultval: str = ...) -> str: ...
    def getattribute(self, name: str, type: TypeDesc | BASETYPE | str = ...) -> typing.Any: ...
    @overload
    def image_bytes(self, native: bool = ...) -> int: ...
    @overload
    def image_bytes(self, native: TypeDesc | BASETYPE | str = ...) -> int: ...
    def image_pixels(self) -> int: ...
    @staticmethod
    def metadata_val(param: ParamValue, human: bool = ...) -> str: ...
    @overload
    def pixel_bytes(self, native: bool = ...) -> int: ...
    @overload
    def pixel_bytes(self, chbegin: typing.SupportsInt, chend: typing.SupportsInt, native: bool = ...) -> int: ...
    @overload
    def scanline_bytes(self, native: bool = ...) -> int: ...
    @overload
    def scanline_bytes(self, arg0: TypeDesc | BASETYPE | str, /) -> int: ...
    def serialize(self, format: str = ..., verbose: str = ...) -> str: ...
    def set_colorspace(self, name: str) -> None: ...
    def set_format(self, arg0: TypeDesc | BASETYPE | str, /) -> None: ...
    def size_t_safe(self) -> bool: ...
    @overload
    def tile_bytes(self, native: bool = ...) -> int: ...
    @overload
    def tile_bytes(self, arg0: TypeDesc | BASETYPE | str, /) -> int: ...
    def tile_pixels(self) -> int: ...
    def to_xml(self) -> str: ...
    def valid_tile_range(self, xbegin: typing.SupportsInt, xend: typing.SupportsInt, ybegin: typing.SupportsInt, yend: typing.SupportsInt, zbegin: typing.SupportsInt = ..., zend: typing.SupportsInt = ...) -> bool: ...
    def __contains__(self, arg0: str, /) -> bool: ...
    def __delitem__(self, arg0: str, /) -> None: ...
    def __getitem__(self, arg0: str, /) -> object: ...
    def __setitem__(self, arg0: str, arg1: object, /) -> None: ...

class Interp:
    __members__: ClassVar[dict] = ...  # read-only
    CONSTANT: ClassVar[Interp] = ...
    INTERP_CONSTANT: ClassVar[Interp] = ...
    INTERP_LINEAR: ClassVar[Interp] = ...
    INTERP_PERPIECE: ClassVar[Interp] = ...
    INTERP_VERTEX: ClassVar[Interp] = ...
    LINEAR: ClassVar[Interp] = ...
    PERPIECE: ClassVar[Interp] = ...
    VERTEX: ClassVar[Interp] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class InterpMode:
    __members__: ClassVar[dict] = ...  # read-only
    Bicubic: ClassVar[InterpMode] = ...
    Bilinear: ClassVar[InterpMode] = ...
    Closest: ClassVar[InterpMode] = ...
    SmartBicubic: ClassVar[InterpMode] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class MakeTextureMode:
    __members__: ClassVar[dict] = ...  # read-only
    MakeTxBumpWithSlopes: ClassVar[MakeTextureMode] = ...
    MakeTxEnvLatl: ClassVar[MakeTextureMode] = ...
    MakeTxEnvLatlFromLightProbe: ClassVar[MakeTextureMode] = ...
    MakeTxShadow: ClassVar[MakeTextureMode] = ...
    MakeTxTexture: ClassVar[MakeTextureMode] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class MipMode:
    __members__: ClassVar[dict] = ...  # read-only
    Aniso: ClassVar[MipMode] = ...
    Default: ClassVar[MipMode] = ...
    NoMIP: ClassVar[MipMode] = ...
    OneLevel: ClassVar[MipMode] = ...
    Trilinear: ClassVar[MipMode] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class NonFiniteFixMode:
    __members__: ClassVar[dict] = ...  # read-only
    NONFINITE_BLACK: ClassVar[NonFiniteFixMode] = ...
    NONFINITE_BOX3: ClassVar[NonFiniteFixMode] = ...
    NONFINITE_NONE: ClassVar[NonFiniteFixMode] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class ParamValue:
    @overload
    def __init__(self, arg0: str, arg1: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
    @overload
    def __init__(self, arg0: str, arg1: str, /) -> None: ...
    @overload
    def __init__(self, name: str, type: TypeDesc | BASETYPE | str, value: object) -> None: ...
    @overload
    def __init__(self, name: str, type: TypeDesc | BASETYPE | str, nvalues: typing.SupportsInt, interp: Interp, value: object) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def type(self) -> TypeDesc: ...
    @property
    def value(self) -> object: ...
    @property
    def __len__(self) -> int: ...

class ParamValueList:
    def __init__(self) -> None: ...
    def add_or_replace(self, value: ParamValue, casesensitive: bool = ...) -> None: ...
    def append(self, arg0: ParamValue, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsInt, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: str, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: object, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: typing.SupportsInt, arg3: object, /) -> None: ...
    def clear(self) -> None: ...
    def contains(self, name: str, type: TypeDesc | BASETYPE | str = ..., casesensitive: bool = ...) -> bool: ...
    def free(self) -> None: ...
    def merge(self, other: ParamValueList, override: bool = ...) -> None: ...
    def remove(self, name: str, type: TypeDesc | BASETYPE | str = ..., casesensitive: bool = ...) -> None: ...
    def resize(self, arg0: typing.SupportsInt, /) -> None: ...
    def sort(self, casesensitive: bool = ...) -> None: ...
    def __contains__(self, arg0: str, /) -> bool: ...
    def __delitem__(self, arg0: str, /) -> None: ...
    @overload
    def __getitem__(self, arg0: typing.SupportsInt, /) -> ParamValue: ...
    @overload
    def __getitem__(self, arg0: str, /) -> object: ...
    def __iter__(self) -> collections.abc.Iterator[ParamValue]: ...
    def __len__(self) -> int: ...
    def __setitem__(self, arg0: str, arg1: object, /) -> None: ...

class PixelStats:
    def __init__(self) -> None: ...
    @property
    def avg(self) -> list[float]: ...
    @property
    def finitecount(self) -> list[int]: ...
    @property
    def infcount(self) -> list[int]: ...
    @property
    def max(self) -> list[float]: ...
    @property
    def min(self) -> list[float]: ...
    @property
    def nancount(self) -> list[int]: ...
    @property
    def stddev(self) -> list[float]: ...
    @property
    def sum(self) -> list[float]: ...
    @property
    def sum2(self) -> list[float]: ...

class ROI:
    All: ClassVar[ROI] = ...  # read-only
    chbegin: int
    chend: int
    xbegin: int
    xend: int
    ybegin: int
    yend: int
    zbegin: int
    zend: int
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, arg2: typing.SupportsInt, arg3: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, arg2: typing.SupportsInt, arg3: typing.SupportsInt, arg4: typing.SupportsInt, arg5: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: typing.SupportsInt, arg1: typing.SupportsInt, arg2: typing.SupportsInt, arg3: typing.SupportsInt, arg4: typing.SupportsInt, arg5: typing.SupportsInt, arg6: typing.SupportsInt, arg7: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: ROI, /) -> None: ...
    @overload
    def contains(self, x: typing.SupportsInt, y: typing.SupportsInt, z: typing.SupportsInt = ..., ch: typing.SupportsInt = ...) -> bool: ...
    @overload
    def contains(self, other: ROI) -> bool: ...
    def copy(self) -> ROI: ...
    def __eq__(self, other: object) -> bool: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def defined(self) -> bool: ...
    @property
    def depth(self) -> int: ...
    @property
    def height(self) -> int: ...
    @property
    def nchannels(self) -> int: ...
    @property
    def npixels(self) -> int: ...
    @property
    def width(self) -> int: ...

class TextureOpt:
    anisotropic: int
    conservative_filter: bool
    fill: float
    firstchannel: int
    interpmode: InterpMode
    mipmode: MipMode
    missingcolor: tuple
    rnd: float
    rwidth: float
    rwrap: Wrap
    sblur: float
    subimage: int
    subimagename: str
    swidth: float
    swrap: Wrap
    tblur: float
    twidth: float
    twrap: Wrap
    def __init__(self) -> None: ...

class TextureSystem:
    def __init__(self, shared: bool = ...) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: typing.SupportsInt, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: str, /) -> None: ...
    @overload
    def attribute(self, arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: object, /) -> None: ...
    def close(self, filename: str) -> None: ...
    def close_all(self) -> None: ...
    @staticmethod
    def destroy(arg0: TextureSystem, /) -> None: ...
    def environment(self, filename: str, options: TextureOpt, R, dRdx, dRdy, nchannels: typing.SupportsInt) -> tuple[float, ...]: ...
    def getattribute(self, name: str, type: TypeDesc | BASETYPE | str = ...) -> typing.Any: ...
    def getattributetype(self, name: str) -> TypeDesc: ...
    def geterror(self, clear: bool = ...) -> str: ...
    def getstats(self, level: typing.SupportsInt = ..., icstats: bool = ...) -> str: ...
    def has_error(self) -> bool: ...
    def imagespec(self, filename: str, subimage: typing.SupportsInt = ...) -> ImageSpec | None: ...
    def invalidate(self, filename: str, force: bool = ...) -> None: ...
    def invalidate_all(self, force: bool = ...) -> None: ...
    def inventory_udim(self, filename: str) -> tuple: ...
    def is_udim(self, filename: str) -> bool: ...
    def reset_stats(self) -> None: ...
    def resolve_filename(self, filename: str) -> str: ...
    def resolve_udim(self, filename: str, s: typing.SupportsFloat, t: typing.SupportsFloat) -> str: ...
    def texture(self, filename: str, options: TextureOpt, s: typing.SupportsFloat, t: typing.SupportsFloat, dsdx: typing.SupportsFloat, dtdx: typing.SupportsFloat, dsdy: typing.SupportsFloat, dtdy: typing.SupportsFloat, nchannels: typing.SupportsInt) -> tuple[float, ...]: ...
    def texture3d(self, filename: str, options: TextureOpt, P, dPdx, dPdy, dPdz, nchannels: typing.SupportsInt) -> tuple[float, ...]: ...

class TypeDesc:
    aggregate: AGGREGATE
    arraylen: int
    basetype: BASETYPE
    vecsemantics: VECSEMANTICS
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, arg0: TypeDesc | BASETYPE | str, /) -> None: ...
    @overload
    def __init__(self, arg0: BASETYPE, /) -> None: ...
    @overload
    def __init__(self, arg0: BASETYPE, arg1: AGGREGATE, /) -> None: ...
    @overload
    def __init__(self, arg0: BASETYPE, arg1: AGGREGATE, arg2: VECSEMANTICS, /) -> None: ...
    @overload
    def __init__(self, arg0: BASETYPE, arg1: AGGREGATE, arg2: VECSEMANTICS, arg3: typing.SupportsInt, /) -> None: ...
    @overload
    def __init__(self, arg0: str, /) -> None: ...
    def basesize(self) -> int: ...
    def basevalues(self) -> int: ...
    def c_str(self) -> str: ...
    def elementsize(self) -> int: ...
    def elementtype(self) -> TypeDesc: ...
    def equivalent(self, arg0: TypeDesc | BASETYPE | str, /) -> bool: ...
    def fromstring(self, arg0: str, /) -> None: ...
    def is_box2(self, arg0: BASETYPE, /) -> bool: ...
    def is_box3(self, arg0: BASETYPE, /) -> bool: ...
    def is_vec2(self, arg0: BASETYPE, /) -> bool: ...
    def is_vec3(self, arg0: BASETYPE, /) -> bool: ...
    def is_vec4(self, arg0: BASETYPE, /) -> bool: ...
    def numelements(self) -> int: ...
    def size(self) -> int: ...
    def unarray(self) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __ne__(self, other: object) -> bool: ...

class VECSEMANTICS:
    __members__: ClassVar[dict] = ...  # read-only
    BOX: ClassVar[VECSEMANTICS] = ...
    COLOR: ClassVar[VECSEMANTICS] = ...
    KEYCODE: ClassVar[VECSEMANTICS] = ...
    NORMAL: ClassVar[VECSEMANTICS] = ...
    NOSEMANTICS: ClassVar[VECSEMANTICS] = ...
    NOXFORM: ClassVar[VECSEMANTICS] = ...
    POINT: ClassVar[VECSEMANTICS] = ...
    RATIONAL: ClassVar[VECSEMANTICS] = ...
    TIMECODE: ClassVar[VECSEMANTICS] = ...
    VECTOR: ClassVar[VECSEMANTICS] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

class Wrap:
    __members__: ClassVar[dict] = ...  # read-only
    Black: ClassVar[Wrap] = ...
    Clamp: ClassVar[Wrap] = ...
    Default: ClassVar[Wrap] = ...
    Last: ClassVar[Wrap] = ...
    Mirror: ClassVar[Wrap] = ...
    Periodic: ClassVar[Wrap] = ...
    PeriodicPow2: ClassVar[Wrap] = ...
    PeriodicSharedBorder: ClassVar[Wrap] = ...
    __entries: ClassVar[dict] = ...
    def __init__(self, value: typing.SupportsInt) -> None: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __index__(self) -> int: ...
    def __int__(self) -> int: ...
    def __ne__(self, other: object) -> bool: ...
    @property
    def name(self): ...
    @property
    def value(self) -> int: ...

@overload
def attribute(arg0: str, arg1: typing.SupportsFloat, /) -> None: ...
@overload
def attribute(arg0: str, arg1: typing.SupportsInt, /) -> None: ...
@overload
def attribute(arg0: str, arg1: str, /) -> None: ...
@overload
def attribute(arg0: str, arg1: TypeDesc | BASETYPE | str, arg2: object, /) -> None: ...
def equivalent_colorspace(arg0: str, arg1: str, /) -> bool: ...
def get_bytes_attribute(name: str, defaultval: str = ...) -> bytes: ...
def get_float_attribute(name: str, defaultval: typing.SupportsFloat = ...) -> float: ...
def get_int_attribute(name: str, defaultval: typing.SupportsInt = ...) -> int: ...
def get_roi(arg0: ImageSpec, /) -> ROI: ...
def get_roi_full(arg0: ImageSpec, /) -> ROI: ...
def get_string_attribute(name: str, defaultval: str = ...) -> str: ...
def getattribute(arg0: str, arg1: TypeDesc | BASETYPE | str, /) -> typing.Any: ...
def geterror(clear: bool = ...) -> str: ...
def intersection(arg0: ROI, arg1: ROI, /) -> ROI: ...
def is_imageio_format_name(name: str) -> bool: ...
def set_colorspace(spec: ImageSpec, name: str) -> None: ...
def set_colorspace_rec709_gamma(arg0: ImageSpec, arg1: typing.SupportsFloat, /) -> None: ...
def set_roi(arg0: ImageSpec, arg1: ROI, /) -> None: ...
def set_roi_full(arg0: ImageSpec, arg1: ROI, /) -> None: ...
def union(arg0: ROI, arg1: ROI, /) -> ROI: ...
