m2m模型翻译
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.8 KiB

6 months ago
  1. import os
  2. import inspect
  3. from sympy.integrals.rubi.parsetools.parse import (parse_full_form, downvalues_rules, temporary_variable_replacement,
  4. permanent_variable_replacement)
  5. def generate_rules_from_downvalues():
  6. """
  7. This function generate rules and saves in file. For more details,
  8. see `https://github.com/sympy/sympy/wiki/Rubi-parsing-guide`
  9. """
  10. cons_dict = {}
  11. cons_index = 0
  12. index = 0
  13. cons = ''
  14. input = ["Integrand_simplification.txt", "Linear_products.txt", "Quadratic_products.txt", "Binomial_products.txt",
  15. "Trinomial_products.txt", "Miscellaneous_algebra.txt", "Piecewise_linear.txt", "Exponentials.txt", "Logarithms.txt",
  16. "Sine.txt", "Tangent.txt", "Secant.txt", "Miscellaneous_trig.txt", "Inverse_trig.txt", "Hyperbolic.txt",
  17. "Inverse_hyperbolic.txt", "Special_functions.txt", "Miscellaneous_integration.txt"]
  18. output = ['integrand_simplification.py', 'linear_products.py', 'quadratic_products.py', 'binomial_products.py', 'trinomial_products.py',
  19. 'miscellaneous_algebraic.py' ,'piecewise_linear.py', 'exponential.py', 'logarithms.py', 'sine.py', 'tangent.py', 'secant.py', 'miscellaneous_trig.py',
  20. 'inverse_trig.py', 'hyperbolic.py', 'inverse_hyperbolic.py', 'special_functions.py', 'miscellaneous_integration.py']
  21. for k in range(0, 18):
  22. module_name = output[k][0:-3]
  23. path_header = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
  24. header = open(os.path.join(path_header, "header.py.txt")).read()
  25. header = header.format(module_name)
  26. with open(input[k]) as myfile:
  27. fullform =myfile.read().replace('\n', '')
  28. for i in temporary_variable_replacement:
  29. fullform = fullform.replace(i, temporary_variable_replacement[i])
  30. # Permanently rename these variables
  31. for i in permanent_variable_replacement:
  32. fullform = fullform.replace(i, permanent_variable_replacement[i])
  33. rules = []
  34. for i in parse_full_form(fullform): # separate all rules
  35. if i[0] == 'RuleDelayed':
  36. rules.append(i)
  37. parsed = downvalues_rules(rules, header, cons_dict, cons_index, index)
  38. result = parsed[0].strip() + '\n'
  39. cons_index = parsed[1]
  40. cons += parsed[2]
  41. index = parsed[3]
  42. # Replace temporary variables by actual values
  43. for i in temporary_variable_replacement:
  44. cons = cons.replace(temporary_variable_replacement[i], i)
  45. result = result.replace(temporary_variable_replacement[i], i)
  46. file = open(output[k],'w')
  47. file.write(str(result))
  48. file.close()
  49. cons = "\n".join(header.split("\n")[:-2])+ '\n' + cons
  50. constraints = open('constraints.py', 'w')
  51. constraints.write(str(cons))
  52. constraints.close()