Skip to content

Commit

Permalink
adding reporting time and evaluate multiple
Browse files Browse the repository at this point in the history
  • Loading branch information
infuzu-yidisprei committed Dec 24, 2023
1 parent 94ecb04 commit 5f5e2d1
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
4 changes: 3 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ def main():
expression: str = 'IF("text" - "t" == "ex", "Correct", "Incorrect")'
variables: dict[str, any] = {}
string_embedded: bool = False
result: dict[str, any] = oqs_engine(expression=expression, variables=variables, string_embedded=string_embedded)
result: dict[str, any] = oqs_engine(
expression=expression, variables=variables, string_embedded=string_embedded, report_usage=True
)
print(json.dumps(result, indent=4))


Expand Down
43 changes: 40 additions & 3 deletions python_oqs_implementation/oqs/engine.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
import re
import time
from .interpreter import OQSInterpreter
from .errors import OQSBaseError
from .utils.shortcuts import get_oqs_type


def oqs_engine(
expression: str, variables: dict[str, any] | None = None, string_embedded: bool = False
class ExpressionInput:
def __init__(self, expression: str, variables: dict[str, any] | None = None, string_embedded: bool = False) -> None:
self.expression: str = expression
self.variables: dict[str, any] = variables
self.string_embedded: bool = string_embedded


def evaluate_expression(
expression: str | ExpressionInput, variables: dict[str, any] | None = None, string_embedded: bool = False
) -> dict[str, any]:
if isinstance(expression, ExpressionInput):
variables: dict[str, any] | None = expression.variables
string_embedded: bool = expression.string_embedded
expression: str = expression.expression
try:
if string_embedded:
def replace_embedded(match: re.match):
embedded_expr: str = match.group(1)
embedded_result: dict[str, any] = oqs_engine(
embedded_result: dict[str, any] = evaluate_expression(
expression=embedded_expr, variables=variables, string_embedded=False
)
return str(embedded_result["results"]["value"])
Expand All @@ -31,3 +43,28 @@ def replace_embedded(match: re.match):
},
"additional_info": {"type": type(e).__name__, "message": str(e)}
}


def oqs_engine(
expression: str = None,
variables: dict[str, any] | None = None,
string_embedded: bool = False,
report_usage: bool = False,
evaluate_multiple: bool = False,
expression_inputs: list[ExpressionInput] = None
) -> dict[str, any]:
start_cpu_time: int = time.process_time_ns()
if evaluate_multiple:
if expression_inputs is None:
expression_inputs: list[ExpressionInput] = []
expression_results: list[dict[str, any]] = []
for expression_input in expression_inputs:
expression_results.append(evaluate_expression(expression=expression_input))
results: dict[str, any] = {"results": expression_results}
else:
results: dict[str, any] = evaluate_expression(
expression=expression, variables=variables, string_embedded=string_embedded
)
if report_usage:
results["cpu_time_ns"] = time.process_time_ns() - start_cpu_time
return results

0 comments on commit 5f5e2d1

Please sign in to comment.