Search in sources :

Example 1 with MagicCommandOutput

use of com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput in project beakerx by twosigma.

the class TimeMagicCommand method time.

public MagicCommandOutput time(String codeToExecute, Message message, int executionCount, boolean showResult) {
    CompletableFuture<TimeMeasureData> compileTime = new CompletableFuture<>();
    ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    long currentThreadId = Thread.currentThread().getId();
    Long startWallTime = System.nanoTime();
    Long startCpuTotalTime = threadMXBean.getCurrentThreadCpuTime();
    Long startUserTime = threadMXBean.getCurrentThreadUserTime();
    SimpleEvaluationObject simpleEvaluationObject = createSimpleEvaluationObject(codeToExecute, kernel, message, executionCount);
    if (!showResult) {
        simpleEvaluationObject.noResult();
    }
    TryResult either = kernel.executeCode(codeToExecute, simpleEvaluationObject);
    Long endWallTime = System.nanoTime();
    Long endCpuTotalTime = threadMXBean.getThreadCpuTime(currentThreadId);
    Long endUserTime = threadMXBean.getThreadUserTime(currentThreadId);
    compileTime.complete(new TimeMeasureData(endCpuTotalTime - startCpuTotalTime, endUserTime - startUserTime, endWallTime - startWallTime));
    String messageInfo = "CPU times: user %s, sys: %s, total: %s \nWall Time: %s\n";
    try {
        TimeMeasureData timeMeasuredData = compileTime.get();
        return new MagicCommandOutput(MagicCommandOutput.Status.OK, String.format(messageInfo, format(timeMeasuredData.getCpuUserTime()), format(timeMeasuredData.getCpuTotalTime() - timeMeasuredData.getCpuUserTime()), format(timeMeasuredData.getCpuTotalTime()), format(timeMeasuredData.getWallTime())), either, simpleEvaluationObject);
    } catch (InterruptedException | ExecutionException e) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "There occurs problem during measuring time for your statement.");
    }
}
Also used : ThreadMXBean(java.lang.management.ThreadMXBean) MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) TryResult(com.twosigma.beakerx.TryResult) PlainCode.createSimpleEvaluationObject(com.twosigma.beakerx.kernel.PlainCode.createSimpleEvaluationObject) SimpleEvaluationObject(com.twosigma.beakerx.jvm.object.SimpleEvaluationObject) CompletableFuture(java.util.concurrent.CompletableFuture) ExecutionException(java.util.concurrent.ExecutionException)

Example 2 with MagicCommandOutput

use of com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput in project beakerx by twosigma.

the class TimeMagicCommand method timeIt.

protected MagicCommandOutput timeIt(TimeItOption timeItOption, String codeToExecute, Message message, int executionCount, boolean showResult) {
    String output = "%s ± %s per loop (mean ± std. dev. of %d run, %d loop each)";
    if (timeItOption.getNumber() < 0) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "Number of execution must be bigger then 0");
    }
    int number = timeItOption.getNumber() == 0 ? getBestNumber(codeToExecute, showResult) : timeItOption.getNumber();
    if (timeItOption.getRepeat() == 0) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "Repeat value must be bigger then 0");
    }
    SimpleEvaluationObject seo = createSimpleEvaluationObject(codeToExecute, kernel, message, executionCount);
    seo.noResult();
    TryResult either = kernel.executeCode(codeToExecute, seo);
    try {
        if (either.isError()) {
            return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "Please correct your statement");
        }
        List<Long> allRuns = new ArrayList<>();
        List<Long> timings = new ArrayList<>();
        CompletableFuture<Boolean> isReady = new CompletableFuture<>();
        IntStream.range(0, timeItOption.getRepeat()).forEach(repeatIter -> {
            IntStream.range(0, number).forEach(numberIter -> {
                SimpleEvaluationObject seo2 = createSimpleEvaluationObject(codeToExecute, kernel, message, executionCount);
                seo2.noResult();
                Long startOfEvaluationInNanoseconds = System.nanoTime();
                TryResult result = kernel.executeCode(codeToExecute, seo2);
                Long endOfEvaluationInNanoseconds = System.nanoTime();
                allRuns.add(endOfEvaluationInNanoseconds - startOfEvaluationInNanoseconds);
                if (repeatIter == timeItOption.getRepeat() - 1 && numberIter == number - 1) {
                    isReady.complete(true);
                }
            });
        });
        if (isReady.get()) {
            allRuns.forEach(run -> timings.add(run / number));
            // calculating average
            long average = timings.stream().reduce((aLong, aLong2) -> aLong + aLong2).orElse(0L) / timings.size();
            double stdev = Math.pow(timings.stream().map(currentValue -> Math.pow(currentValue - average, 2)).reduce((aDouble, aDouble2) -> aDouble + aDouble2).orElse(0.0) / timings.size(), 0.5);
            if (timeItOption.getQuietMode()) {
                output = "";
            } else {
                output = String.format(output, format(average), format((long) stdev), timeItOption.getRepeat(), number);
            }
            return new MagicCommandOutput(MagicCommandOutput.Status.OK, output);
        }
    } catch (InterruptedException | ExecutionException e) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "There occurs problem with " + e.getMessage());
    }
    return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, "There occurs problem with timeIt operations");
}
Also used : IntStream(java.util.stream.IntStream) StrTokenizer(org.apache.commons.text.StrTokenizer) CommandLineParser(org.apache.commons.cli.CommandLineParser) Options(org.apache.commons.cli.Options) PlainCode.createSimpleEvaluationObject(com.twosigma.beakerx.kernel.PlainCode.createSimpleEvaluationObject) CompletableFuture(java.util.concurrent.CompletableFuture) ThreadMXBean(java.lang.management.ThreadMXBean) TryResult(com.twosigma.beakerx.TryResult) Message(com.twosigma.beakerx.message.Message) ArrayList(java.util.ArrayList) MagicCommandFunctionality(com.twosigma.beakerx.kernel.magic.command.MagicCommandFunctionality) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) ParseException(org.apache.commons.cli.ParseException) KernelFunctionality(com.twosigma.beakerx.kernel.KernelFunctionality) CommandLine(org.apache.commons.cli.CommandLine) MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) ManagementFactory(java.lang.management.ManagementFactory) SimpleEvaluationObject(com.twosigma.beakerx.jvm.object.SimpleEvaluationObject) PosixParser(org.apache.commons.cli.PosixParser) Code(com.twosigma.beakerx.kernel.Code) MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) TryResult(com.twosigma.beakerx.TryResult) PlainCode.createSimpleEvaluationObject(com.twosigma.beakerx.kernel.PlainCode.createSimpleEvaluationObject) SimpleEvaluationObject(com.twosigma.beakerx.jvm.object.SimpleEvaluationObject) ArrayList(java.util.ArrayList) CompletableFuture(java.util.concurrent.CompletableFuture) ExecutionException(java.util.concurrent.ExecutionException)

Example 3 with MagicCommandOutput

use of com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput in project beakerx by twosigma.

the class UnImportMagicCommand method execute.

@Override
public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) {
    String command = param.getCommand();
    String[] parts = MagicCommandUtils.splitPath(command);
    if (parts.length != 2) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, WRONG_FORMAT_MSG);
    }
    this.kernel.removeImport(new ImportPath(parts[1]));
    return new MagicCommandOutput(MagicCommandOutput.Status.OK);
}
Also used : MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) ImportPath(com.twosigma.beakerx.kernel.ImportPath)

Example 4 with MagicCommandOutput

use of com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput in project beakerx by twosigma.

the class HtmlMagicCommand method execute.

@Override
public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) {
    String commandCodeBlock = param.getCommandCodeBlock();
    if (commandCodeBlock == null) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, String.format(USAGE_ERROR_MSG, HTML));
    }
    MIMEContainer html = HTML("<html>" + commandCodeBlock + "</html>");
    return new MagicCommandResult(MagicCommandOutcomeItem.Status.OK, html);
}
Also used : MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) MagicCommandResult(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandResult) MIMEContainer(com.twosigma.beakerx.mimetype.MIMEContainer)

Example 5 with MagicCommandOutput

use of com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput in project beakerx by twosigma.

the class TimeItCellModeMagicCommand method execute.

@Override
public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) {
    Code code = param.getCode();
    Message message = param.getCode().getMessage();
    int executionCount = param.getExecutionCount();
    try {
        return timeIt(buildTimeItOption(code), param.getCommandCodeBlock(), message, executionCount, param.isShowResult());
    } catch (IllegalArgumentException e) {
        return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, e.getMessage());
    }
}
Also used : MagicCommandOutput(com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput) Message(com.twosigma.beakerx.message.Message) Code(com.twosigma.beakerx.kernel.Code)

Aggregations

MagicCommandOutput (com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput)14 TryResult (com.twosigma.beakerx.TryResult)3 SimpleEvaluationObject (com.twosigma.beakerx.jvm.object.SimpleEvaluationObject)3 ImportPath (com.twosigma.beakerx.kernel.ImportPath)3 PlainCode.createSimpleEvaluationObject (com.twosigma.beakerx.kernel.PlainCode.createSimpleEvaluationObject)3 Message (com.twosigma.beakerx.message.Message)3 AddImportStatus (com.twosigma.beakerx.kernel.AddImportStatus)2 Code (com.twosigma.beakerx.kernel.Code)2 MagicCommandFunctionality (com.twosigma.beakerx.kernel.magic.command.MagicCommandFunctionality)2 MavenJarResolver (com.twosigma.beakerx.kernel.magic.command.MavenJarResolver)2 ThreadMXBean (java.lang.management.ThreadMXBean)2 CompletableFuture (java.util.concurrent.CompletableFuture)2 ExecutionException (java.util.concurrent.ExecutionException)2 EvaluatorParameters (com.twosigma.beakerx.kernel.EvaluatorParameters)1 KernelFunctionality (com.twosigma.beakerx.kernel.KernelFunctionality)1 MagicCommandType (com.twosigma.beakerx.kernel.magic.command.MagicCommandType)1 AddMvnCommandResult (com.twosigma.beakerx.kernel.magic.command.MavenJarResolver.AddMvnCommandResult)1 MagicCommandResult (com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandResult)1 MIMEContainer (com.twosigma.beakerx.mimetype.MIMEContainer)1 File (java.io.File)1