Spaces:
Runtime error
Runtime error
File size: 2,418 Bytes
476ac07 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# Copyright (c) OpenMMLab. All rights reserved.
import math
import re
from math import * # noqa: F401, F403
from sympy import Eq, solve, symbols
from .calculate import Calculate
def Solve(equations_str):
try:
equations_str = equations_str.replace(' ', '')
equations_ori = re.split(r'[,;]+', equations_str)
equations_str = equations_str.replace('^', '**')
equations_str = re.sub(r'(\(.*\))([a-zA-Z])', r'\1 * \2',
equations_str)
equations_str = re.sub(r'(\d+)([a-zA-Z])', r'\1 * \2', equations_str)
equations_str = equations_str.replace('pi', str(math.pi))
equations = re.split(r'[,;]+', equations_str)
vars_list = list(set(re.findall(r'[a-zA-Z]+', equations_str)))
vars = {var: symbols(var) for var in vars_list}
output = ''
eqs = []
for eq in equations:
if '=' in eq:
left, right = eq.split('=')
eqs.append(
Eq(
eval(left.strip(), {}, vars),
eval(right.strip(), {}, vars)))
solutions = solve(eqs, vars, dict=True)
vars_values = {var: [] for var in vars_list}
if isinstance(solutions, list):
for idx, solution in enumerate(solutions):
for var, sol in solution.items():
output += f'{var}_{idx} = {sol}\n'
vars_values[str(var)].append(sol)
else:
for var, sol in solutions.items():
output += f'{var} = {sol}\n'
vars_values[str(var)].append(sol)
for eq, eq_o in zip(equations, equations_ori):
if '=' not in eq:
for var in vars_list:
need_note = True if len(vars_values[var]) > 1 else False
for idx, value in enumerate(vars_values[var]):
eq_to_calc = eq.replace(var, str(value))
calc_result = Calculate(eq_to_calc)
if need_note:
eq_name = eq_o.replace(var, f'{var}_{idx}')
else:
eq_name = eq_o
if calc_result != 'No results.':
output += f'{eq_name} = {calc_result}\n'
return output.strip()
except Exception:
return 'No result.'
|