diff --git a/notebooks/tests/eval.ipynb b/notebooks/tests/eval.ipynb index a3ca672857192e2bb8f566b06919f8eedcd6d47d..e67c8daa02e77bac6688d7c7b5886f7c8121ee6c 100644 --- a/notebooks/tests/eval.ipynb +++ b/notebooks/tests/eval.ipynb @@ -242,18 +242,21 @@ "metadata": {}, "outputs": [ { - "ename": "ProBError", - "evalue": "ERROR\nProB returned error messages:\nError: Unknown identifier \"unknown\" (:1:0 to 1:7)", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: ERROR\nProB returned error messages:\nError: Unknown identifier \"unknown\" (:1:0 to 1:7)\nError: Unknown identifier \"nonsense\" (:1:11 to 1:19)", "output_type": "error", "traceback": [ "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mERROR\u001b[0m", + "\u001b[1m\u001b[30m2 errors:\u001b[0m", "\u001b[1m\u001b[31mError: Unknown identifier \"unknown\" (:1:0 to 1:7)\u001b[0m", - "\u001b[1m\u001b[30m// Source code not known\u001b[0m" + "\u001b[1m\u001b[30m\u001b[0m\u001b[1m\u001b[30m\u001b[41munknown\u001b[0m\u001b[1m\u001b[30m \\/ nonsense\u001b[0m", + "\u001b[1m\u001b[31mError: Unknown identifier \"nonsense\" (:1:11 to 1:19)\u001b[0m", + "\u001b[1m\u001b[30munknown \\/ \u001b[0m\u001b[1m\u001b[30m\u001b[41mnonsense\u001b[0m\u001b[1m\u001b[30m\u001b[0m" ] } ], "source": [ - "unknown" + "unknown \\/ nonsense" ] }, { @@ -262,8 +265,8 @@ "metadata": {}, "outputs": [ { - "ename": "ProBError", - "evalue": "UNKNOWN (enumeration warning)", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: UNKNOWN (enumeration warning)", "output_type": "error", "traceback": [ "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mUNKNOWN (enumeration warning)\u001b[0m" @@ -280,18 +283,18 @@ "metadata": {}, "outputs": [ { - "ename": "ProBError", - "evalue": "NOT-WELL-DEFINED\nProB returned error messages:\nError: mod not defined for negative numbers: 2 mod-1 (:1:0 to 1:8)", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: NOT-WELL-DEFINED\nProB returned error messages:\nError: mod not defined for negative numbers: 2 mod-1 (:1:5 to 1:13)", "output_type": "error", "traceback": [ "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mNOT-WELL-DEFINED\u001b[0m", - "\u001b[1m\u001b[31mError: mod not defined for negative numbers: 2 mod-1 (:1:0 to 1:8)\u001b[0m", - "\u001b[1m\u001b[30m// Source code not known\u001b[0m" + "\u001b[1m\u001b[31mError: mod not defined for negative numbers: 2 mod-1 (:1:5 to 1:13)\u001b[0m", + "\u001b[1m\u001b[30m1 + (\u001b[0m\u001b[1m\u001b[30m\u001b[41m2 mod -1\u001b[0m\u001b[1m\u001b[30m)\u001b[0m" ] } ], "source": [ - "2 mod -1" + "1 + (2 mod -1)" ] }, { diff --git a/notebooks/tests/let.ipynb b/notebooks/tests/let.ipynb index 7739a36fd1ac45f7bafc1d9698ae4f7efce2497f..41a510017afd6d15691af680ce345650257cec7e 100644 --- a/notebooks/tests/let.ipynb +++ b/notebooks/tests/let.ipynb @@ -200,11 +200,15 @@ "metadata": {}, "outputs": [ { - "ename": "CommandExecutionException", - "evalue": ":eval: Computation not completed: Unknown identifier \"n\", did you mean \"IN\"?", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: ERROR\nProB returned error messages:\nError: Unknown identifier \"n\", did you mean \"IN\"? (:2:0 to 2:1)", "output_type": "error", "traceback": [ - "\u001b[1m\u001b[31m:eval: Computation not completed: Unknown identifier \"n\", did you mean \"IN\"?\u001b[0m" + "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mERROR\u001b[0m", + "\u001b[1m\u001b[31mError: Unknown identifier \"n\", did you mean \"IN\"? (:2:0 to 2:1)\u001b[0m", + "\u001b[1m\u001b[30mLET hello BE hello={1,2,3,4,5,10} IN(\u001b[0m", + "\u001b[1m\u001b[30m\u001b[0m\u001b[1m\u001b[30m\u001b[41mn\u001b[0m\u001b[1m\u001b[30m\u001b[0m", + "\u001b[1m\u001b[30m)END\u001b[0m" ] } ], @@ -346,11 +350,13 @@ "metadata": {}, "outputs": [ { - "ename": "CommandExecutionException", - "evalue": ":eval: Computation not completed: Unknown identifier \"hello\"", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: ERROR\nProB returned error messages:\nError: Unknown identifier \"hello\" (:1:0 to 1:5)", "output_type": "error", "traceback": [ - "\u001b[1m\u001b[31m:eval: Computation not completed: Unknown identifier \"hello\"\u001b[0m" + "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mERROR\u001b[0m", + "\u001b[1m\u001b[31mError: Unknown identifier \"hello\" (:1:0 to 1:5)\u001b[0m", + "\u001b[1m\u001b[30m\u001b[0m\u001b[1m\u001b[30m\u001b[41mhello\u001b[0m\u001b[1m\u001b[30m\u001b[0m" ] } ], diff --git a/notebooks/tests/solve.ipynb b/notebooks/tests/solve.ipynb index 067057bb9c9f040354ff8849bd29989ce7e2a702..1f1f91baacfcf6f28d4cba907111078d22afd073 100644 --- a/notebooks/tests/solve.ipynb +++ b/notebooks/tests/solve.ipynb @@ -125,11 +125,11 @@ "metadata": {}, "outputs": [ { - "ename": "PrologException", - "evalue": "Unhandled exception thrown from Prolog: (error(existence_error(procedure,:(z3interface,/(pop_frame,0))),existence_error($@(:(z3interface,pop_frame),4427626972),0,procedure,:(z3interface,/(pop_frame,0)),0)))\n", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.PrologException: Unhandled exception thrown from Prolog: (error(existence_error(procedure,:(z3interface,/(pop_frame,0))),existence_error($@(:(z3interface,pop_frame),4545727948),0,procedure,:(z3interface,/(pop_frame,0)),0)))\n", "output_type": "error", "traceback": [ - "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mUnhandled exception thrown from Prolog: (error(existence_error(procedure,:(z3interface,/(pop_frame,0))),existence_error($@(:(z3interface,pop_frame),4427626972),0,procedure,:(z3interface,/(pop_frame,0)),0)))", + "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mUnhandled exception thrown from Prolog: (error(existence_error(procedure,:(z3interface,/(pop_frame,0))),existence_error($@(:(z3interface,pop_frame),4545727948),0,procedure,:(z3interface,/(pop_frame,0)),0)))", "\u001b[0m" ] } @@ -144,8 +144,8 @@ "metadata": {}, "outputs": [ { - "ename": "ProBError", - "evalue": "ProB reported Errors\nProB returned error messages:\nInternal error: Call for event start_solving failed. init_smt_supported_interpreter", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: ProB reported Errors\nProB returned error messages:\nInternal error: Call for event start_solving failed. init_smt_supported_interpreter", "output_type": "error", "traceback": [ "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mProB reported Errors\u001b[0m", @@ -195,11 +195,12 @@ "metadata": {}, "outputs": [ { - "ename": "CommandExecutionException", - "evalue": ":eval: NOT-INITIALISED", + "ename": "WithSourceCodeException", + "evalue": "de.prob.exception.ProBError: NOT-INITIALISED\nProB returned no error messages.", "output_type": "error", "traceback": [ - "\u001b[1m\u001b[31m:eval: NOT-INITIALISED\u001b[0m" + "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mNOT-INITIALISED\u001b[0m", + "\u001b[1m\u001b[30mProB returned no error messages.\u001b[0m" ] } ], diff --git a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java index 1693bf04369403e5b9178e56e1b24810b6c037c3..ae399d3d5de98941bacd22c21924c0f7f5d1e4e8 100644 --- a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java @@ -5,6 +5,7 @@ import java.util.Collections; import com.google.inject.Inject; import com.google.inject.Injector; +import de.prob.animator.domainobjects.AbstractEvalResult; import de.prob.animator.domainobjects.FormulaExpand; import de.prob.animator.domainobjects.IEvalElement; import de.prob.statespace.AnimationSelector; @@ -65,9 +66,10 @@ public final class EvalCommand implements Command { public @NotNull DisplayData run(final @NotNull ParsedArguments args) { final ProBKernel kernel = this.injector.getInstance(ProBKernel.class); final IEvalElement formula = kernel.parseFormula(args.get(FORMULA_PARAM), FormulaExpand.EXPAND); - return CommandUtils.displayDataForEvalResult(CommandUtils.withSourceCode(formula, () -> - kernel.postprocessEvalResult(this.animationSelector.getCurrentTrace().evalCurrent(formula)) - )); + return CommandUtils.withSourceCode(formula, () -> { + final AbstractEvalResult aer = this.animationSelector.getCurrentTrace().evalCurrent(formula); + return CommandUtils.displayDataForEvalResult(kernel.postprocessEvalResult(aer)); + }); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/LetCommand.java b/src/main/java/de/prob2/jupyter/commands/LetCommand.java index fb7c44ddbfb8375649f99566169854b75b49cf84..84b288cddf975fc2440f08808be32da87fc67852 100644 --- a/src/main/java/de/prob2/jupyter/commands/LetCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/LetCommand.java @@ -85,7 +85,7 @@ public final class LetCommand implements Command { if (evaluated instanceof EvalResult) { kernel.getVariables().put(name, ((EvalResult)evaluated).getValue()); } - return CommandUtils.displayDataForEvalResult(evaluated); + return CommandUtils.withSourceCode(formula, () -> CommandUtils.displayDataForEvalResult(evaluated)); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/SolveCommand.java b/src/main/java/de/prob2/jupyter/commands/SolveCommand.java index d8e59a3d098db2040e68fe60c1d80be60f1cdc9a..d3df74c08939f3579d4cbc452ea6771543e51d48 100644 --- a/src/main/java/de/prob2/jupyter/commands/SolveCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/SolveCommand.java @@ -89,8 +89,10 @@ public final class SolveCommand implements Command { final IEvalElement predicate = kernel.parseFormula(args.get(PREDICATE_PARAM), FormulaExpand.EXPAND); final CbcSolveCommand cmd = new CbcSolveCommand(predicate, solver, this.animationSelector.getCurrentTrace().getCurrentState()); - trace.getStateSpace().execute(cmd); - return CommandUtils.displayDataForEvalResult(kernel.postprocessEvalResult(cmd.getValue())); + return CommandUtils.withSourceCode(predicate, () -> { + trace.getStateSpace().execute(cmd); + return CommandUtils.displayDataForEvalResult(kernel.postprocessEvalResult(cmd.getValue())); + }); } @Override