from typing import Optional

import ioh.iohcpp
CURRENT_Y_BEST: CurrentY
EVALUATIONS: Evaluations
RAW_Y_BEST: RawYBest
TRANSFORMED_Y: TransformedY
TRANSFORMED_Y_BEST: TransformedYBest

class AbstractProperty:
    def __init__(self, *args, **kwargs) -> None: ...
    def call_to_string(self, arg0: ioh.iohcpp.LogInfo, arg1: str) -> str: ...
    def name(self) -> str: ...
    def __call__(self, arg0: ioh.iohcpp.LogInfo) -> Optional[float]: ...

class CurrentY(AbstractProperty):
    def __init__(self, name: str, format: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class Evaluations(AbstractProperty):
    def __init__(self, name: str, format: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class Property(AbstractProperty):
    def __init__(self, container: object, attribute: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class RawYBest(AbstractProperty):
    def __init__(self, name: str, format: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class TransformedY(AbstractProperty):
    def __init__(self, name: str, format: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...

class TransformedYBest(AbstractProperty):
    def __init__(self, name: str, format: str) -> None: ...
    def __getstate__(self) -> tuple: ...
    def __setstate__(self, arg0: tuple) -> None: ...
