from ..error import VLPSequenceLenError as VLPSequenceLenError, VLPValueRangeError as VLPValueRangeError
from .led import LED as LED
from .room import Room as Room
from _typeshed import Incomplete
from numbers import Number
from typing import Sequence, Union

class PD:
    def __init__(self, n: Number = ..., fov: Number = ..., Ar: Number = ..., Ts: Number = ..., pos: tuple = ..., Nv: tuple = ..., origin: tuple = ..., *args, **kwargs) -> None: ...
    @staticmethod
    def recv_frame_model(l, alpha, beta, center_tp_pos: tuple): ...
    @staticmethod
    def recv_surface_model(r: Union[Number, tuple], alpha, beta, center_tp_pos: tuple): ...
    @staticmethod
    def recv_hemisphere_model(r, l, alpha, center_tp_pos: tuple): ...
    def recv_led_radiation_intensity(self, led: LED): ...
    def recv_los_led_signal(self, led: LED, fov_condition: bool = ..., *args, **kwargs): ...
    def recv_nlos_led_signal(self, led: LED, room: Room, fov_condition: bool = ..., *args, **kwargs): ...
    def recv_led_signal(self, led: LED, room: Room, *args, **kwargs): ...
    def shot_noise(self, P, R: float = ..., Ibg: float = ..., I2: float = ..., B: float = ..., *argv, **kwargv): ...
    def thermal_noise(self, Tk: int = ..., G: int = ..., eta: int = ..., B: float = ..., I2: float = ..., I3: float = ..., gamma: float = ..., gm: int = ..., *argv, **kwargv): ...
    def recv_noise_signal(self, P, *argv, **kwargv): ...
    def SNR(self, P, R, dB: bool = ..., *argv, **kwargv): ...
    @property
    def origin(self) -> tuple: ...
    @property
    def pos(self): ...
    @property
    def Nv(self): ...
    @property
    def fov(self): ...
    @property
    def Ar(self): ...
    @property
    def Ts(self): ...
    @property
    def n(self): ...
    @property
    def G_Con(self): ...
    @staticmethod
    def expand_dims_to_broacast(arr, shape: Incomplete | None = ..., repeat: int = ..., axis: int = ...): ...
    @staticmethod
    def tp_raw_args(center_tp_pos: tuple, angles: Sequence): ...
    @staticmethod
    def rotation_pd_recv_los_led_signal(P, led: LED, tp_pos, pd_pos, pd_Nv, fov: int = ..., angles=..., seq: str = ..., *args, **kwargs): ...
    @staticmethod
    def rotation_pd_recv_nlos_led_signal(P, room: Room, tp_pos, pd_pos, pd_Nv, fov: int = ..., angles=..., seq: str = ..., *args, **kwargs): ...
