from _typeshed import Incomplete
from typing import Any

from ..orm import interfaces

HYBRID_METHOD: Any
HYBRID_PROPERTY: Any

class hybrid_method(interfaces.InspectionAttrInfo):
    is_attribute: bool
    extension_type: Any
    func: Any
    def __init__(self, func, expr: Incomplete | None = ...) -> None: ...
    def __get__(self, instance, owner): ...
    expr: Any
    def expression(self, expr): ...

class hybrid_property(interfaces.InspectionAttrInfo):
    is_attribute: bool
    extension_type: Any
    fget: Any
    fset: Any
    fdel: Any
    expr: Any
    custom_comparator: Any
    update_expr: Any
    def __init__(
        self,
        fget,
        fset: Incomplete | None = ...,
        fdel: Incomplete | None = ...,
        expr: Incomplete | None = ...,
        custom_comparator: Incomplete | None = ...,
        update_expr: Incomplete | None = ...,
    ) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def __delete__(self, instance) -> None: ...
    @property
    def overrides(self): ...
    def getter(self, fget): ...
    def setter(self, fset): ...
    def deleter(self, fdel): ...
    def expression(self, expr): ...
    def comparator(self, comparator): ...
    def update_expression(self, meth): ...

class Comparator(interfaces.PropComparator[Any]):
    property: Any
    expression: Any
    def __init__(self, expression) -> None: ...
    def __clause_element__(self): ...
    def adapt_to_entity(self, adapt_to_entity): ...

_property = property

class ExprComparator(Comparator):
    cls: Any
    expression: Any
    hybrid: Any
    def __init__(self, cls, expression, hybrid) -> None: ...
    def __getattr__(self, key: str): ...
    @_property
    def info(self): ...
    @_property
    def property(self): ...
    def operate(self, op, *other, **kwargs): ...
    def reverse_operate(self, op, other, **kwargs): ...
