diff --git a/app/preview_implementations/symbolic_preview.py b/app/preview_implementations/symbolic_preview.py index f689f41..79e286b 100644 --- a/app/preview_implementations/symbolic_preview.py +++ b/app/preview_implementations/symbolic_preview.py @@ -108,7 +108,11 @@ def preview_function(response: str, params: Params) -> Result: sympy_out = [] for expression in expression_list: latex_out.append(sympy_to_latex(expression, symbols, settings={"mul_symbol": r" \cdot "})) - sympy_out.append(response) + + sympy_out.append(response) + + sympy_out = sorted(sympy_out) + latex_out = sorted(latex_out) if len(sympy_out) == 1: sympy_out = sympy_out[0] diff --git a/app/preview_tests.py b/app/preview_tests.py index c18f98d..707a9a2 100644 --- a/app/preview_tests.py +++ b/app/preview_tests.py @@ -76,6 +76,60 @@ def test_natural_logarithm_notation(self): preview = result["preview"] assert preview["latex"] == r"\ln{\left(x \right)}" + @pytest.mark.parametrize( + "response, is_latex, response_latex, response_sympy", + [ + ("plus_minus x", False, '\\left\\{- x,~x\\right\\}', "plus_minus x"), + ("\\pm x", True, '\\pm x', '{-x, x}'), + (r"\pm x^{2}+\mp y^{2}", True, "\pm x^{2}+\mp y^{2}", "{-x**2 + y**2, x**2 - y**2}"), + ("plus_minus x**2 + minus_plus y**2", False, r"\left\{- x^{2} + y^{2},~x^{2} - y^{2}\right\}", "plus_minus x**2 + minus_plus y**2"), + ("- minus_plus x^2 minus_plus y^2", False, r"\left\{- x^{2} + y^{2},~x^{2} - y^{2}\right\}", "- minus_plus x^2 minus_plus y^2"), + ("- minus_plus x^2 - plus_minus y^2", False, r"\left\{- x^{2} - - y^{2},~x^{2} - y^{2}\right\}", "- minus_plus x^2 - plus_minus y^2"), + ("pm x**2 + mp y**2", False, r"\left\{- x^{2} + y^{2},~x^{2} - y^{2}\right\}", "plus_minus x**2 + minus_plus y**2"), + ("+- x**2 + -+ y**2", False, r"\left\{- x^{2} + y^{2},~x^{2} - y^{2}\right\}", "plus_minus x**2 + minus_plus y**2"), + ] + ) + def test_using_plus_minus_symbols(self, response, is_latex, response_latex, response_sympy): + params = { + "strict_syntax": False, + "elementary_functions": True, + "is_latex": is_latex, + "symbols": { + "plus_minus": { + "latex": r"\(\pm\)", + "aliases": ["pm", "+-"], + }, + "minus_plus": { + "latex": r"\(\mp\)", + "aliases": ["mp", "-+"], + }, + }, + } + params = Params(**params) + result = preview_function(response, params) + assert result["preview"]["latex"] == response_latex + assert result["preview"]["sympy"] == response_sympy + + def test_lh_rh_response(self): + params = { + "strict_syntax": False, + "elementary_functions": True, + "is_latex": False, + "symbols": { + "plus_minus": { + "latex": r"\(\pm\)", + "aliases": ["pm", "+-"], + }, + "minus_plus": { + "latex": r"\(\mp\)", + "aliases": ["mp", "-+"], + }, + }, + } + params = Params(**params) + result = preview_function("x + y = y + x", params) + assert result["preview"]["latex"] == "x + y=x + y" + assert result["preview"]["sympy"] == "x + y=y + x" if __name__ == "__main__": pytest.main(['-xk not slow', "--tb=line", os.path.abspath(__file__)]) diff --git a/app/utility/preview_utilities.py b/app/utility/preview_utilities.py index 6646dda..88dd1aa 100644 --- a/app/utility/preview_utilities.py +++ b/app/utility/preview_utilities.py @@ -110,7 +110,7 @@ def parse_latex(response: str, symbols: SymbolDict, simplify: bool, parameters=N if len(parsed_responses) < 2: return parsed_responses.pop() else: - return '{'+', '.join(parsed_responses)+'}' + return '{'+', '.join(sorted(parsed_responses))+'}' def sanitise_latex(response):