Skip to content

Latest commit

 

History

History
105 lines (62 loc) · 2.48 KB

File metadata and controls

105 lines (62 loc) · 2.48 KB

python.math.expression.parser.pymep

pymep can parse or evaluate math expressions and it is tested using matlab/octave

This algorithm does not use a decision tree. It is a kind of Recursive Ascent Parser (https://en.wikipedia.org/wiki/Recursive_ascent_parser). In fact, it is LR parser (Left-Right Parser) without backtracking. This recursive algorithm is faster than decision trees

pypi version

https://pypi.org/project/pymep/

Installation

pip install pymep

Features

math functions

  • sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, log, log10, sqrt
  • pi, e
  • real or complex numbers

parentheses

fx= 2*(e*2)

variables

  • Expressions in vars

    var = {"x":"1+2+3+4+5", "Z":1}
    eval(" 2*(-(((z*3)*sqrt(x^(2)))+3))",var)
    

Examples

Parse or eveluate expressions with real numbers:

from pymep.realParser import parse
from pymep.realParser import eval


#Real Expresion parser
fx="cos(10)"
print(parse(fx))

xi=5
fx = "1 + x"
print(eval(fx, xi))

var = {"x":"1+1", "Z":1}
eval(" 2*(-(((z*3)*sqrt(x^(2)))+3))",var)

Parse or evaluate expressions with complex numbers:

from pymep.complexParser import parse
from pymep.complexParser import eval
from pymep.complex import Complex

#Operation with complex numbers
a = Complex(1,2)
print(a.__radd__(10).__complex__())
print(Complex.radd(10, a).__complex__())


#Complex Expresion parser
fx="cos(10+2j)"
print(parse(fx).__complex__())

xi=5
fx = "1 +j+x"
print(eval(fx, xi).__complex__())

var={"x":"1+2j", "Y":complex(2,1)}
f_x = "x-y"
eval(f_x,var).__complex__()

There is a full list of examples inside!!

How to execute the tests

from pymep.realParserTest import functionXTest;

p = functionXTest();

p.test_one();
p.test_three();

Vulnerabilities

Zero vulnerabilities on https://snyk.io/vuln/pip:pymep

Notes

Professional Services

If you are interested in logical parsers or any task related to parsers, you can consult my professional services page https://github.com/sbesada/professional.services

Donation

If you think that my work deserves a donation, you can do it: https://sbesada.github.io/