Skip to content

Commit 22a68cc

Browse files
Added function to override elementary symbol names using symbol aliases
1 parent 1a94457 commit 22a68cc

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

app/tests/symbolic_evaluation_tests.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,21 @@ def test_exclamation_mark_for_factorial(self):
18651865
result = evaluation_function(response, answer, params)
18661866
assert result["is_correct"] is True
18671867

1868+
def test_alternatives_to_input_symbols_takes_priority_over_elementary_function_alternatives(self):
1869+
answer = "Ef*exp(x)"
1870+
params = {
1871+
"strict_syntax": False,
1872+
"elementary_functions": True,
1873+
"symbols": {
1874+
"Ef": {"aliases": ["E"], "latex": r"$E$"},
1875+
},
1876+
}
1877+
response = "E*e^x"
1878+
result = evaluation_function(response, answer, params)
1879+
assert result["is_correct"] is True
1880+
response = "e*e^x"
1881+
result = evaluation_function(response, answer, params)
1882+
assert result["is_correct"] is False
18681883

18691884
if __name__ == "__main__":
18701885
pytest.main(['-xk not slow', "--tb=line", '--durations=10', os.path.abspath(__file__)])

app/utility/expression_utilities.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,25 @@ def substitute_input_symbols(exprs, params):
267267
if "minus_plus" in params.keys():
268268
substitutions += [(params["minus_plus"], "minus_plus")]
269269

270-
if params["elementary_functions"] is True:
271-
for expr in exprs:
272-
substitutions += protect_elementary_functions_substitutions(expr)
270+
input_symbols = params.get("symbols",dict())
273271

274-
input_symbols = params.get("symbols", dict())
272+
input_symbols_alternatives = []
273+
for (code, definition) in input_symbols.items():
274+
input_symbols_alternatives += definition["aliases"]
275+
276+
if params.get("elementary_functions", False) is True:
277+
alias_substitutions = []
278+
for expr in exprs:
279+
for (name, alias_list) in elementary_functions_names+special_symbols_names:
280+
if name in input_symbols_alternatives:
281+
continue
282+
else:
283+
if (name in expr) and not (name in input_symbols_alternatives):
284+
alias_substitutions += [(name, " "+name)]
285+
for alias in alias_list:
286+
if (alias in expr) and not (alias in input_symbols_alternatives):
287+
alias_substitutions += [(alias, " "+name)]
288+
substitutions += alias_substitutions
275289

276290
if "symbols" in params.keys():
277291
# Removing invalid input symbols

0 commit comments

Comments
 (0)