from __future__ import annotations

from typing import Any, Optional

from .tunable_variable import Boolean as Boolean
from .tunable_variable import Choice as Choice
from .tunable_variable import Fixed as Fixed
from .tunable_variable import FloatRange as FloatRange
from .tunable_variable import IntRange as IntRange

class TunableSpace:
    def __init__(self) -> None: ...
    @property
    def variables(self): ...
    @property
    def values(self): ...
    def get_value(self, name: Any): ...
    def set_value(self, name: Any, value: Any) -> None: ...
    def __getitem__(self, name: Any): ...
    def __setitem__(self, name: Any, value: Any) -> None: ...
    def __contains__(self, name: Any): ...
    def fixed(self, name: Any, default: Any): ...
    def boolean(self, name: Any, default: bool = ...): ...
    def choice(self, name: Any, values: Any, default: Optional[Any] = ...): ...
    def int_range(self, name: Any, start: Any, stop: Any, step: int = ..., default: Optional[Any] = ...): ...
    def float_range(
        self, name: Any, start: Any, stop: Any, step: Optional[Any] = ..., default: Optional[Any] = ...
    ): ...
    def get_state(self): ...
    @classmethod
    def from_state(cls, state: Any): ...
