"""
This type stub file was generated by pyright.
"""

from collections.abc import Callable
from typing import Generic, ParamSpec, TypeVar
from lazy_object_proxy import Proxy
from graph_sitter.extensions.utils import cached_property

T = TypeVar("T")
P = ParamSpec("P")
class ProxyProperty(Proxy, Generic[P, T]):
    """Lazy proxy that can behave like a method or a property depending on how its used. The class it's proxying should not implement __call__"""
    __factory__: Callable[P, T]
    def __call__(self, *args: P.args, **kwargs: P.kwargs) -> T:
        ...
    
    __repr__ = ...


def proxy_property(func: Callable[P, T]) -> cached_property[ProxyProperty[P, T]]:
    """Proxy a property so it behaves like a method and property simultaneously. When invoked as a property, results are cached and invalidated using uncache_all"""
    ...

