import enum
import nanobind
import numpy
import pydrake.common
import pydrake.systems.framework
import pydrake.systems.sensors
from typing import Callable, ClassVar, overload

Concatenate: nanobind.nb_func

class BaseField(enum.IntEnum):
    __new__: ClassVar[Callable] = ...
    _generate_next_value_: ClassVar[Callable] = ...
    _hashable_values_: ClassVar[list] = ...
    _member_map_: ClassVar[dict] = ...
    _member_names_: ClassVar[list] = ...
    _member_type_: ClassVar[type[int]] = ...
    _unhashable_values_: ClassVar[list] = ...
    _unhashable_values_map_: ClassVar[dict] = ...
    _use_args_: ClassVar[bool] = ...
    _value2member_map_: ClassVar[dict] = ...
    kNone: ClassVar[BaseField] = ...
    kNormals: ClassVar[BaseField] = ...
    kRGBs: ClassVar[BaseField] = ...
    kXYZs: ClassVar[BaseField] = ...
    __nb_enum__: ClassVar[PyCapsule] = ...
    def __format__(self, *args, **kwargs) -> str: ...

class DepthImageToPointCloud(pydrake.systems.framework.LeafSystem):
    def __init__(self, camera_info: pydrake.systems.sensors.CameraInfo, pixel_type: pydrake.systems.sensors.PixelType = ..., scale: float = ..., fields: int = ...) -> None: ...
    def camera_pose_input_port(self) -> pydrake.systems.framework.InputPort: ...
    def color_image_input_port(self) -> pydrake.systems.framework.InputPort: ...
    def depth_image_input_port(self) -> pydrake.systems.framework.InputPort: ...
    def point_cloud_output_port(self) -> pydrake.systems.framework.OutputPort: ...

class Fields:
    def __init__(self, base_fields: int) -> None: ...
    def base_fields(self) -> int: ...
    def has_base_fields(self) -> bool: ...
    def __and__(self, arg: Fields) -> Fields: ...
    def __eq__(self, arg: Fields) -> bool: ...
    def __ne__(self, arg: Fields) -> bool: ...
    def __or__(self, arg: Fields) -> Fields: ...

class PointCloud:
    C: ClassVar[type[numpy.uint8]] = ...
    D: ClassVar[type[numpy.float32]] = ...
    IsDefaultValue: ClassVar[nanobind.nb_func] = ...
    IsInvalidValue: ClassVar[nanobind.nb_func] = ...
    T: ClassVar[type[numpy.float32]] = ...
    kDefaultValue: ClassVar[float] = ...
    @overload
    def __init__(self, new_size: int = ..., fields: Fields = ...) -> None: ...
    @overload
    def __init__(self, other: PointCloud) -> None: ...
    def Crop(self, lower_xyz, upper_xyz) -> PointCloud: ...
    def EstimateNormals(self, radius: float, num_closest: int, parallelize: pydrake.common.Parallelism = ...) -> bool: ...
    def FlipNormalsTowardPoint(self, p_CP) -> None: ...
    def SetFields(self, new_fields: Fields, skip_initialize: bool = ...) -> None: ...
    def SetFrom(self, other: PointCloud) -> None: ...
    def VoxelizedDownSample(self, voxel_size: float, parallelize: pydrake.common.Parallelism = ...) -> PointCloud: ...
    def fields(self) -> Fields: ...
    def has_normals(self) -> bool: ...
    def has_rgbs(self) -> bool: ...
    def has_xyzs(self) -> bool: ...
    def mutable_normal(self, *args, **kwargs): ...
    def mutable_normals(self, *args, **kwargs): ...
    def mutable_rgb(self, *args, **kwargs): ...
    def mutable_rgbs(self, *args, **kwargs): ...
    def mutable_xyz(self, *args, **kwargs): ...
    def mutable_xyzs(self, *args, **kwargs): ...
    def normal(self, *args, **kwargs): ...
    def normals(self, *args, **kwargs): ...
    def resize(self, new_size: int) -> None: ...
    def rgb(self, *args, **kwargs): ...
    def rgbs(self, *args, **kwargs): ...
    def size(self) -> int: ...
    def xyz(self, *args, **kwargs): ...
    def xyzs(self, *args, **kwargs): ...
    def __copy__(self) -> PointCloud: ...
    def __deepcopy__(self, arg: dict) -> PointCloud: ...

class PointCloudToLcm(pydrake.systems.framework.LeafSystem):
    def __init__(self, frame_name: str = ...) -> None: ...
