import platform
from typing import Self
from pyautd3.derive import builder
from pyautd3.native_methods.autd3capi import NativeMethods as Base
from pyautd3.native_methods.autd3capi_driver import SpinStrategyTag as SpinStrategy
from pyautd3.native_methods.autd3capi_driver import TimerStrategyWrap
from pyautd3.native_methods.utils import ConstantADT



class StdSleeper():
    def __init__(self: StdSleeper, ) -> None: ...
    @property
    def timer_resolution(self: StdSleeper) -> int | None: ...

class SpinSleeper():
    def __init__(self: SpinSleeper, native_accuracy_ns: int | None = None) -> None: ...
    def with_spin_strategy(self: SpinSleeper, spin_strategy: SpinStrategy) -> SpinSleeper: ...
    @property
    def native_accuracy_ns(self: SpinSleeper) -> int: ...
    @property
    def spin_strategy(self: SpinSleeper) -> SpinStrategy: ...

class AsyncSleeper():
    def __init__(self: AsyncSleeper, ) -> None: ...
    @property
    def timer_resolution(self: AsyncSleeper) -> int | None: ...

class WaitableSleeper():
    def __init__(self: WaitableSleeper, ) -> None: ...

class TimerStrategy():
    def __new__(cls, ) -> TimerStrategy: ...
    @staticmethod
    def Std(sleeper: StdSleeper) -> TimerStrategyWrap: ...
    @staticmethod
    def Spin(sleeper: SpinSleeper) -> TimerStrategyWrap: ...
    @staticmethod
    def Async(sleeper: AsyncSleeper) -> TimerStrategyWrap: ...
    @staticmethod
    def Waitable(_sleeper: WaitableSleeper) -> TimerStrategyWrap: ...
