diff --git a/pandas/core/computation/eval.py b/pandas/core/computation/eval.py index 8614230c4811f..bf555d7c9a604 100644 --- a/pandas/core/computation/eval.py +++ b/pandas/core/computation/eval.py @@ -5,17 +5,21 @@ """ import tokenize +from typing import Any, Dict, Iterable, List, Optional, Tuple, Union import warnings +import numpy as np + from pandas.util._validators import validate_bool_kwarg +import pandas as pd from pandas.core.computation.engines import _engines from pandas.core.computation.scope import _ensure_scope from pandas.io.formats.printing import pprint_thing -def _check_engine(engine): +def _check_engine(engine: Optional[str]) -> str: """ Make sure a valid engine is passed. @@ -64,7 +68,7 @@ def _check_engine(engine): return engine -def _check_parser(parser): +def _check_parser(parser: str) -> None: """ Make sure a valid parser is passed. @@ -86,7 +90,7 @@ def _check_parser(parser): ) -def _check_resolvers(resolvers): +def _check_resolvers(resolvers: Iterable) -> None: if resolvers is not None: for resolver in resolvers: if not hasattr(resolver, "__getitem__"): @@ -97,7 +101,7 @@ def _check_resolvers(resolvers): ) -def _check_expression(expr): +def _check_expression(expr: str) -> None: """ Make sure an expression is not an empty string @@ -115,7 +119,7 @@ def _check_expression(expr): raise ValueError("expr cannot be an empty string") -def _convert_expression(expr): +def _convert_expression(expr: str) -> str: """ Convert an object to an expression. @@ -144,7 +148,7 @@ def _convert_expression(expr): return s -def _check_for_locals(expr, stack_level, parser): +def _check_for_locals(expr: str, stack_level: int, parser: str) -> None: from pandas.core.computation.expr import tokenize_string at_top_of_stack = stack_level == 0 @@ -164,20 +168,20 @@ def _check_for_locals(expr, stack_level, parser): for toknum, tokval in tokenize_string(expr): if toknum == tokenize.OP and tokval == "@": raise SyntaxError(msg) - - -def eval( - expr, - parser="pandas", - engine=None, - truediv=True, - local_dict=None, - global_dict=None, - resolvers=(), - level=0, - target=None, - inplace=False, -): + return None + + +def eval(expr: str, + parser: str = 'pandas', + engine: str = None, + truediv: bool = True, + local_dict: List[Dict[str, Any]] = None, + global_dict: List[Dict[str, Any]] = None, + resolvers: Tuple = (), + level: int = 0, + target: Union[float, np.ndarray, pd.DataFrame, pd.Series] = None, + inplace: bool = False, + ) -> Union[float, np.ndarray, pd.DataFrame, pd.Series]: """ Evaluate a Python expression as a string using various backends. @@ -378,3 +382,5 @@ def eval( # We want to exclude `inplace=None` as being False. if inplace is False: return target if target_modified else ret + else: + return None