from typing import Any, Dict, List, Optional, Union
from pathlib import Path

LatticeValue = Union[None, bool, int, float, str, Path, List["LatticeValue"], Dict[str, "LatticeValue"]]

class Runtime:
    def __init__(self, *, llm: bool = False, sql: bool = False) -> None: ...
    def eval(self, source: str, *, bindings: Optional[Dict[str, LatticeValue]] = None) -> LatticeValue: ...
    def eval_file(self, path: str) -> LatticeValue: ...
    def call(self, name: str, *args: LatticeValue) -> LatticeValue: ...
    def get_global(self, name: str) -> Optional[LatticeValue]: ...
    def set_global(self, name: str, value: LatticeValue) -> None: ...
    def has_function(self, name: str) -> bool: ...
    def reset(self) -> None: ...
    def get_types(self) -> List[Dict[str, Any]]: ...
    def get_function_signatures(self) -> List[Dict[str, Any]]: ...
    def take_llm_debug(self) -> Optional[Dict[str, str]]: ...
    def __getitem__(self, key: str) -> Optional[LatticeValue]: ...
    def __setitem__(self, key: str, value: LatticeValue) -> None: ...
    def __contains__(self, key: str) -> bool: ...
    def __repr__(self) -> str: ...
    def __enter__(self) -> "Runtime": ...
    def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool: ...
