Skip to content

Commit 317d17f

Browse files
Merge pull request #208 from lambda-feedback/tr175-handle-as-keyword-in-expressions
Fixed bug when 'as' was a substring in an expression
2 parents 131a490 + 65f4059 commit 317d17f

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

app/expression_utilities.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,10 @@ def substitute_input_symbols(exprs, params):
274274
if lambda_value is not None:
275275
lambda_value["aliases"].append("lambda")
276276
input_symbols.update({"lamda": lambda_value})
277-
as_value = input_symbols.pop("as", {"latex": r"as", "aliases": ["as"]})
277+
as_value = input_symbols.pop("as", None)
278278
if as_value is not None:
279279
as_value["aliases"].append("as")
280-
input_symbols.update({"a s": as_value})
280+
input_symbols.update({"a*s": as_value})
281281
params.update({"symbols": input_symbols})
282282

283283
for (code, symbol_data) in input_symbols.items():
@@ -618,7 +618,7 @@ def parse_expression(expr, parsing_params):
618618
unsplittable_symbols = parsing_params.get("unsplittable_symbols", ())
619619
symbol_dict = parsing_params.get("symbol_dict", {})
620620
separate_unsplittable_symbols = [(x, " "+x+" ") for x in unsplittable_symbols]
621-
# new approach
621+
622622
substitutions = separate_unsplittable_symbols
623623
if parsing_params.get("elementary_functions", False) is True:
624624
alias_substitutions = []
@@ -629,6 +629,8 @@ def parse_expression(expr, parsing_params):
629629
if alias in expr:
630630
alias_substitutions += [(alias, " "+name)]
631631
substitutions += alias_substitutions
632+
# Special substitution to avoid 'as' being a reserved keyword in python
633+
substitutions += [("as", "a*s")]
632634
substitutions.sort(key=lambda x: -len(x[0]))
633635
expr = substitute(expr, substitutions)
634636
can_split = lambda x: False if x in unsplittable_symbols else _token_splittable(x)

app/symbolic_comparison_evaluation_tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,5 +1536,27 @@ def test_as_in_input_symbols(self):
15361536
result = evaluation_function(response, answer, params)
15371537
assert result["is_correct"] is True
15381538

1539+
def test_as_substring_in_expression(self):
1540+
params = {
1541+
"strict_syntax": False,
1542+
"elementary_functions": True,
1543+
}
1544+
1545+
response = "asin(omega t)"
1546+
1547+
answer = "a*sin(omega t)"
1548+
result = evaluation_function(response, answer, params)
1549+
assert result["is_correct"] is False
1550+
1551+
answer = "a sin(omega t)"
1552+
result = evaluation_function(response, answer, params)
1553+
assert result["is_correct"] is False
1554+
1555+
response = "a*sin(omega t)"
1556+
1557+
answer = "sin(omega t)*a"
1558+
result = evaluation_function(response, answer, params)
1559+
assert result["is_correct"] is False
1560+
15391561
if __name__ == "__main__":
15401562
pytest.main(['-xk not slow', "--tb=line", '--durations=10', os.path.abspath(__file__)])

0 commit comments

Comments
 (0)