in evaluation/latex2sympy/latex2sympy2.py [0:0]
def latex2sympy(sympy: str, variable_values={}):
# record frac
global frac_type
if sympy.find(r'\frac') != -1:
frac_type = r'\frac'
if sympy.find(r'\dfrac') != -1:
frac_type = r'\dfrac'
if sympy.find(r'\tfrac') != -1:
frac_type = r'\tfrac'
sympy = sympy.replace(r'\dfrac', r'\frac')
sympy = sympy.replace(r'\tfrac', r'\frac')
# Translate Transpose
sympy = sympy.replace(r'\mathrm{T}', 'T', -1)
# Translate Derivative
sympy = sympy.replace(r'\mathrm{d}', 'd', -1).replace(r'{\rm d}', 'd', -1)
# Translate Matrix
sympy = sympy.replace(r'\left[\begin{matrix}', r'\begin{bmatrix}', -1).replace(r'\end{matrix}\right]', r'\end{bmatrix}', -1)
# Translate Permutation
sympy = re.sub(r"\(([a-zA-Z0-9+\-*/\\ ]+?)\)_{([a-zA-Z0-9+\-*/\\ ]+?)}", r"\\frac{(\1)!}{((\1)-(\2))!}", sympy)
# Remove \displaystyle
sympy = sympy.replace(r'\displaystyle', ' ', -1)
# Remove \quad
sympy = sympy.replace(r'\quad', ' ', -1).replace(r'\qquad', ' ', -1).replace(r'~', ' ', -1).replace(r'\,', ' ', -1)
# Remove $
sympy = sympy.replace(r'$', ' ', -1)
# variable values
global VARIABLE_VALUES
if len(variable_values) > 0:
VARIABLE_VALUES = variable_values
else:
VARIABLE_VALUES = {}
# setup listener
matherror = MathErrorListener(sympy)
# stream input
stream = InputStream(sympy)
lex = PSLexer(stream)
lex.removeErrorListeners()
lex.addErrorListener(matherror)
tokens = CommonTokenStream(lex)
parser = PSParser(tokens)
# remove default console error listener
parser.removeErrorListeners()
parser.addErrorListener(matherror)
# process the input
return_data = None
math = parser.math()
# if a list
if math.relation_list():
return_data = []
# go over list items
relation_list = math.relation_list().relation_list_content()
for list_item in relation_list.relation():
expr = convert_relation(list_item)
return_data.append(expr)
# if not, do default
else:
relation = math.relation()
return_data = convert_relation(relation)
return return_data