package solves expressions
Project description
safe_evaluation
safe_evaluation - is an implementation of polish notation algorithm for mathematical and dataframe operations
how to use
-
Installation
pip install safe-evaluation
-
Tutorial
- import evaluation class
from safe_evaluation import Evaluator
- initialize evaluator
evaluator = Evaluator()
- send string that you want to evaluate
result = evaluator.solve(command="2 + 2")
- method will return result
print(result)
-
Examples of usage
-
evaluator.solve(command="2 + 2") # 4
-
evaluator.solve(command="lambda x: x * 2") # lambda x: x * 2
-
evaluator.solve(command="2 * x - y", local={"x": 2, "y": 3}) # 1
-
import pandas as pd df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]}) evaluator.solve(command="${col1} + ${col2}", df=df) # 0 4 1 6 dtype: int64
-
evaluator.solve(command="list(map(lambda x, y: x * 2 + y, range(5), range(3, 8)))") # [3,6,9,12,15]
-
evaluator.solve(command="list(map(lambda x: x + y, [0,1,2,3,4]))", local={"y": 10}) # [10,11,12,13,14]
-
import pandas as pd df = pd.DataFrame(data={'col1': [1, 2, 4, 7], 'col2': [3, 4, 8, 9]}) evaluator.solve(command="np.mean(${col1}) + np.mean(${col2})", df=df) # 9.5
-
import pandas as pd df = pd.DataFrame(data={'col1': [1, 2, 4, 7], 'col2': [3, 4, 8, 9]}) evaluator.solve(command="${col1}.apply(lambda v: v ** 2 > 0).all()", df=df) # True
-
import pandas as pd df = pd.DataFrame(data={'col1': [1, 2, 4, 7], 'col2': [3, 4, 8, 9]}) evaluator.solve(command="${col1}.apply(lambda v: 1 if v < 3 else 2)", df=df) # 0 1 1 1 2 2 3 2 Name: col1, dtype: int64
-
from datetime import datetime import pandas as pd dates = [datetime(year=2022, month=11, day=11 + i) for i in range(7)] df = pd.DataFrame(data={'dates': dates}) evaluator.solve(command="${dates}.dt.dayofweek", df=df) # 0 4 1 5 2 6 3 0 4 1 5 2 6 3 Name: dates, dtype: int64
-
range = evaluator.solve(command="pd.date_range(start='2021-02-05', end='2021-03-05', freq='1D')"") len(range) # 29
-
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]}) sorted_df = evaluator.solve(command="${__df}.sort_values('col2', ascending=False)", df=df) # col1 col2 0 2 4 1 1 3
-
-
Supported operations
- in is not supported yet
- comparation (<=, <, > , >=, !=, ==)
- unary (+, -)
- boolean (~, &, |, ^)
- binary (+, -, /, *, //, %, **)
-
Supported functions
- map, filter, list, range
- bool, int, float, complex, str
- numpy module functions (np.mean, etc.)
- pandas module functions (pd.date_range, etc.)
- anonymous functions
-
Supported access to data
- ${col_name} is same as df['col_name']
- ${__df} is same as df
-
It is possible to use your own class for preprocessing or calculating
-
from safe_evaluation import Evaluator, BasePreprocessor from safe_evaluation.constants import TypeOfCommand class MyPreprocessor(BasePreprocessor): def __init__(self, evaluator): self.evaluator = evaluator def prepare(self, command, df, local): return [(TypeOfCommand.VARIABLE, 'v'), '**', (TypeOfCommand.VALUE, 2), '>', (TypeOfCommand.VALUE, 5)] evaluator = Evaluator(preprocessor=MyPreprocessor) expression = 'v ** 2 > 5' output = evaluator.solve(expression, local={'v': 2}) # False
-
-
It is possible to use your own settings
-
from safe_evaluation import Evaluator, Settings evaluator = Evaluator() settings = Settings(allowed_funcs=['filter', 'list']) evaluator.change_settings(settings) output = evaluator.solve("list(filter(lambda x: x < 0, [-1,0,1]))") # [-1]
-
from safe_evaluation import Evaluator, Settings evaluator = Evaluator() settings = Settings(allowed_funcs=['list']) evaluator.change_settings(settings) output = evaluator.solve("list(filter(lambda x: x < 0, [-1,0,1]))") # Exception: Unsupported function filter
-
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
safe_evaluation-0.1.15.tar.gz
(13.4 kB
view details)
File details
Details for the file safe_evaluation-0.1.15.tar.gz
.
File metadata
- Download URL: safe_evaluation-0.1.15.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab5d93401c7a2d2a3ae42a58dff2bf0fe04cda35b4f8a2e60a63df62bf41deda |
|
MD5 | 0cd411fba1561e2113ed9c3cd0f41aaa |
|
BLAKE2b-256 | 6b0f44168bf260a34569cf03d62a74b0f5a1b1a89ae6f91e4f23a6da95c7ce59 |