From a865377ee01511bff65cda3e8f6fc67606a6b370 Mon Sep 17 00:00:00 2001 From: Daniel Chang Date: Thu, 17 Oct 2024 09:18:31 -0400 Subject: [PATCH] parser encode decode for reserved symbols --- .../hmi-client/src/python/PyodideWorker.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/client/hmi-client/src/python/PyodideWorker.ts b/packages/client/hmi-client/src/python/PyodideWorker.ts index fc14d4d2f5..e2c383a38b 100644 --- a/packages/client/hmi-client/src/python/PyodideWorker.ts +++ b/packages/client/hmi-client/src/python/PyodideWorker.ts @@ -52,6 +52,21 @@ pyodide.runPython(` postMessage(true); +const encodeParseExpr = (v: string) => { + let expr = v.toString().replaceAll('lambda', 'XXlambdaXX'); + expr = expr.replaceAll('Ci', 'XXCiXX'); + expr = expr.replaceAll('S', 'XXSXX'); + return expr; +}; + +// Reverse special cases +const revertParseExpr = (v: string) => { + let resultStr = v.replaceAll('XXlambdaXX', 'lambda'); + resultStr = resultStr.replaceAll('XXSXX', 'S'); + resultStr = resultStr.replaceAll('XXCiXX', 'Ci'); + return resultStr; +}; + const evaluateExpression = (expressionStr: string, symbolsTable: Object) => { const subs: any[] = []; Object.keys(symbolsTable).forEach((key) => { @@ -82,6 +97,9 @@ const parseExpression = (expr: string) => { return output; } + // Special cases + expr = encodeParseExpr(expr); + // function to convert expression to presentation mathml let result = pyodide.runPython(` eq = sympy.S("${expr}", locals=_clash) @@ -115,6 +133,10 @@ const parseExpression = (expr: string) => { `); output.freeSymbols = result.toJs(); + output.latex = revertParseExpr(output.latex); + output.mathml = revertParseExpr(output.mathml); + output.pmathml = revertParseExpr(output.pmathml); + return output; };