import numpy as np

ALIGNMENT_PXPYPZ: int
ALIGNMENT_PXNZPY: int
ALIGNMENT_PXNYNZ: int
ALIGNMENT_PXPZNY: int
ALIGNMENT_NXPYNZ: int
ALIGNMENT_NXPZPY: int
ALIGNMENT_NXNYPZ: int
ALIGNMENT_NXNZNY: int
ALIGNMENT_PYNXPZ: int
ALIGNMENT_PYNZNX: int
ALIGNMENT_PYPXNZ: int
ALIGNMENT_PYPZPX: int
ALIGNMENT_NYPXPZ: int
ALIGNMENT_NYNZPX: int
ALIGNMENT_NYNXNZ: int
ALIGNMENT_NYPZNX: int
ALIGNMENT_PZPYNX: int
ALIGNMENT_PZPXPY: int
ALIGNMENT_PZNYPX: int
ALIGNMENT_PZNXNY: int
ALIGNMENT_NZPYPX: int
ALIGNMENT_NZNXPY: int
ALIGNMENT_NZNYNX: int
ALIGNMENT_NZPXNY: int
CONVENTION_NWU: int
CONVENTION_ENU: int
CONVENTION_NED: int

# axes_methods
def axes_swap(sensor: np.ndarray, alignment: int) -> np.ndarray: ...

# compass_methods
def compass(convention: int, accelerometer: np.ndarray, magnetometer: np.ndarray) -> float: ...

# ahrs_object
class Ahrs:
    def __init__(self) -> None: ...
    @property
    def settings(self) -> None: ...
    @settings.setter
    def settings(self, settings: Settings) -> None: ...
    @property
    def quaternion(self) -> Quaternion: ...
    @quaternion.setter
    def quaternion(self, quaternion: Quaternion) -> None: ...
    @property
    def gravity(self) -> np.ndarray: ...
    @property
    def linear_acceleration(self) -> np.ndarray: ...
    @property
    def earth_acceleration(self) -> np.ndarray: ...
    @property
    def internal_states(self) -> InternalStates: ...
    @property
    def flags(self) -> Flags: ...
    @property
    def heading(self) -> None: ...
    @heading.setter
    def heading(self, heading: float) -> None: ...
    def reset(self) -> None: ...
    def update(self, gyroscope: np.ndarray, accelerometer: np.ndarray, magnetometer: np.ndarray, delta_time: float) -> None: ...
    def update_no_magnetometer(self, gyroscope: np.ndarray, accelerometer: np.ndarray, delta_time: float) -> None: ...
    def update_external_heading(self, gyroscope: np.ndarray, accelerometer: np.ndarray, heading: float, delta_time: float) -> None: ...

# flags_object
class Flags:
    @property
    def initialising(self) -> bool: ...
    @property
    def angular_rate_recovery(self) -> bool: ...
    @property
    def acceleration_recovery(self) -> bool: ...
    @property
    def magnetic_recovery(self) -> bool: ...

# internal_states_object
class InternalStates:
    @property
    def acceleration_error(self) -> float: ...
    @property
    def accelerometer_ignored(self) -> bool: ...
    @property
    def acceleration_recovery_trigger(self) -> float: ...
    @property
    def magnetic_error(self) -> float: ...
    @property
    def magnetometer_ignored(self) -> bool: ...
    @property
    def magnetic_recovery_trigger(self) -> float: ...

# offset_object
class Offset:
    def __init__(self, sample_rate: int) -> None: ...
    def update(self, gyroscope: np.ndarray) -> np.ndarray: ...

# settings_object
class Settings:
    def __init__(self, convention: int, gain: float, gyroscope_range: float, acceleration_rejection: float, magnetic_rejection: float, recovery_trigger_period: int) -> None: ...
    @property
    def convention(self) -> int: ...
    @convention.setter
    def convention(self, convention: int) -> None: ...
    @property
    def gain(self) -> float: ...
    @gain.setter
    def gain(self, gain: float) -> None: ...
    @property
    def gyroscope_range(self) -> float: ...
    @gyroscope_range.setter
    def gyroscope_range(self, gyroscope_range: float) -> None: ...
    @property
    def acceleration_rejection(self) -> float: ...
    @acceleration_rejection.setter
    def acceleration_rejection(self, acceleration_rejection: float) -> None: ...
    @property
    def magnetic_rejection(self) -> float: ...
    @magnetic_rejection.setter
    def magnetic_rejection(self, magnetic_rejection: float) -> None: ...
    @property
    def recovery_trigger_period(self) -> int: ...
    @recovery_trigger_period.setter
    def recovery_trigger_period(self, recovery_trigger_period: int) -> None: ...

# quaternion_object
class Quaternion:
    def __init__(self, quaternion: np.ndarray) -> None: ...
    @property
    def wxyz(self) -> np.ndarray: ...
    @property
    def w(self) -> float: ...
    @property
    def x(self) -> float: ...
    @property
    def y(self) -> float: ...
    @property
    def z(self) -> float: ...
    def to_matrix(self) -> np.ndarray: ...
    def to_euler(self) -> np.ndarray: ...
