import numpy as np

class UndefinedVariableError(NameError): ...

class Term:
    is_local: bool
    env = ...
    side = ...
    encoding = ...
    @property
    def local_name(self) -> str: ...
    @property
    def is_scalar(self) -> bool: ...
    return_type = ...
    @property
    def raw(self) -> str: ...
    @property
    def is_datetime(self) -> bool: ...
    @property
    def ndim(self) -> int: ...

class Constant(Term): ...

class Op:
    op: str
    operands = ...
    encoding = ...
    @property
    def has_invalid_return_type(self) -> bool: ...
    @property
    def is_scalar(self) -> bool: ...
    @property
    def is_datetime(self) -> bool: ...

class BinOp(Op):
    lhs = ...
    rhs = ...
    func = ...

def isnumeric(dtype: type) -> bool: ...

class Div(BinOp): ...

class UnaryOp(Op):
    operand = ...
    func = ...
    @property
    def return_type(self) -> np.dtype: ...

class MathCall(Op):
    func = ...

class FuncNode:
    name = ...
    func = ...
    def __init__(self, name: str) -> None: ...
