use of com.twosigma.beakerx.message.Message in project beakerx by twosigma.
the class MessageCreator method buildReply.
private static Message buildReply(Message message, SimpleEvaluationObject seo) {
// Send the REPLY to the original message. This is NOT the result of
// executing the cell. This is the equivalent of 'exit 0' or 'exit 1'
// at the end of a shell script.
Message reply = buildReplyWithoutStatus(message, seo.getExecutionCount());
if (EvaluationStatus.FINISHED == seo.getStatus()) {
reply.getMetadata().put("status", "ok");
reply.getContent().put("status", "ok");
reply.getContent().put("user_expressions", new HashMap<>());
} else if (EvaluationStatus.ERROR == seo.getStatus()) {
reply.getMetadata().put("status", "error");
reply.getContent().put("status", "error");
}
return reply;
}
use of com.twosigma.beakerx.message.Message 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");
}
use of com.twosigma.beakerx.message.Message in project beakerx by twosigma.
the class TimeMagicCommand method getBestNumber.
private int getBestNumber(String codeToExecute, boolean showResult) {
for (int value = 0; value < 10; ) {
Double numberOfExecution = Math.pow(10, value);
CompletableFuture<Boolean> keepLooking = new CompletableFuture<>();
Long startTime = System.nanoTime();
IntStream.range(0, numberOfExecution.intValue()).forEach(indexOfExecution -> {
SimpleEvaluationObject simpleEvaluationObject = createSimpleEvaluationObject(codeToExecute, kernel, new Message(), 0);
if (!showResult) {
simpleEvaluationObject.noResult();
}
kernel.executeCode(codeToExecute, simpleEvaluationObject);
if (numberOfExecution.intValue() - 1 == indexOfExecution) {
if (TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - startTime) > 0.2) {
keepLooking.complete(false);
} else {
keepLooking.complete(true);
}
}
});
try {
if (keepLooking.get()) {
value++;
} else {
return numberOfExecution.intValue();
}
} catch (ExecutionException | InterruptedException e) {
throw new IllegalStateException("Cannot create best number of execution.");
}
}
throw new IllegalStateException("Cannot create best number of execution.");
}
use of com.twosigma.beakerx.message.Message in project beakerx by twosigma.
the class CommOpenHandler method handleMsg.
private void handleMsg(Message message) {
logger.debug("Processing CommOpenHandler");
Message reply = new Message();
HashMap<String, Serializable> map = new HashMap<>(6);
Map<String, Serializable> commMap = message.getContent();
Comm newComm = null;
if (isValidMessage(commMap)) {
newComm = readComm(commMap);
reply.setHeader(new Header(COMM_OPEN, message.getHeader().getSession()));
map.put(COMM_ID, newComm.getCommId());
map.put(TARGET_NAME, newComm.getTargetName());
map.put(DATA, new HashMap<>());
map.put(TARGET_MODULE, newComm.getTargetModule());
} else {
reply.setHeader(new Header(COMM_CLOSE, message.getHeader().getSession()));
map.put(DATA, new HashMap<>());
}
if (newComm != null) {
logger.debug("Comm opened, target name = " + newComm.getTargetName());
for (Handler<Message> handler : getKernelControlChanelHandlers(newComm.getTargetName())) {
newComm.addMsgCallbackList(handler);
}
kernel.addComm(newComm.getCommId(), newComm);
}
reply.setContent(map);
reply.setParentHeader(message.getHeader());
reply.setIdentities(message.getIdentities());
send(reply);
}
use of com.twosigma.beakerx.message.Message 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());
}
}
Aggregations