from typing import Tuple

import ioh.iohcpp
ALWAYS: Always
ON_IMPROVEMENT: OnImprovement

class Always(Trigger):
    def __init__(self) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class At(Trigger):
    def __init__(self, time_points: Set[int]) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def time_points(self) -> Set[int]: ...

class During(Trigger):
    def __init__(self, time_ranges: Set[Tuple[int,int]]) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def time_ranges(self) -> Set[Tuple[int,int]]: ...

class Each(Trigger):
    def __init__(self, interval: int, starting_at: int = ...) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
    @property
    def interval(self) -> int: ...
    @property
    def starting_at(self) -> int: ...

class OnImprovement(Trigger):
    def __init__(self) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class Trigger:
    def __init__(self, *args, **kwargs) -> None: ...
    def reset(self) -> None: ...
    def __call__(self, arg0: ioh.iohcpp.LogInfo, arg1: ioh.iohcpp.MetaData) -> bool: ...
