You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

casymda

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

casymda - pypi Package Compare versions

Comparing version
0.2.25
to
0.2.26
+1166
src/casymda/visualization/web_server/csa_generated.js
// automatically generated by the FlatBuffers compiler, do not modify
console.log("csa_generated.js loaded");
/**
* @const
* @namespace
*/
var casymda = casymda || {};
/**
* @const
* @namespace
*/
casymda.visualization = casymda.visualization || {};
/**
* @const
* @namespace
*/
casymda.visualization.web_server = casymda.visualization.web_server || {};
/**
* @const
* @namespace
*/
casymda.visualization.web_server.flatbuffers =
casymda.visualization.web_server.flatbuffers || {};
/**
* @enum {number}
*/
casymda.visualization.web_server.flatbuffers.ElementsUnion = {
NONE: 0,
Photo: 1,
Image: 2,
Text: 3,
};
/**
* @enum {string}
*/
casymda.visualization.web_server.flatbuffers.ElementsUnionName = {
0: "NONE",
1: "Photo",
2: "Image",
3: "Text",
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Canvas = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Canvas}
*/
casymda.visualization.web_server.flatbuffers.Canvas.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Canvas=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Canvas}
*/
casymda.visualization.web_server.flatbuffers.Canvas.getRootAsCanvas = function (
bb,
obj
) {
return (
obj || new casymda.visualization.web_server.flatbuffers.Canvas()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Canvas=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Canvas}
*/
casymda.visualization.web_server.flatbuffers.Canvas.getSizePrefixedRootAsCanvas = function (
bb,
obj
) {
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
return (
obj || new casymda.visualization.web_server.flatbuffers.Canvas()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {number} index
* @param {casymda.visualization.web_server.flatbuffers.Element=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Element}
*/
casymda.visualization.web_server.flatbuffers.Canvas.prototype.content = function (
index,
obj
) {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset
? (
obj || new casymda.visualization.web_server.flatbuffers.Element()
).__init(
this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4),
this.bb
)
: null;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Canvas.prototype.contentLength = function () {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
};
/**
* @param {flatbuffers.Builder} builder
*/
casymda.visualization.web_server.flatbuffers.Canvas.startCanvas = function (
builder
) {
builder.startObject(1);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} contentOffset
*/
casymda.visualization.web_server.flatbuffers.Canvas.addContent = function (
builder,
contentOffset
) {
builder.addFieldOffset(0, contentOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {Array.<flatbuffers.Offset>} data
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Canvas.createContentVector = function (
builder,
data
) {
builder.startVector(4, data.length, 4);
for (var i = data.length - 1; i >= 0; i--) {
builder.addOffset(data[i]);
}
return builder.endVector();
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} numElems
*/
casymda.visualization.web_server.flatbuffers.Canvas.startContentVector = function (
builder,
numElems
) {
builder.startVector(4, numElems, 4);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Canvas.endCanvas = function (
builder
) {
var offset = builder.endObject();
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} offset
*/
casymda.visualization.web_server.flatbuffers.Canvas.finishCanvasBuffer = function (
builder,
offset
) {
builder.finish(offset);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} offset
*/
casymda.visualization.web_server.flatbuffers.Canvas.finishSizePrefixedCanvasBuffer = function (
builder,
offset
) {
builder.finish(offset, undefined, true);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} contentOffset
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Canvas.createCanvas = function (
builder,
contentOffset
) {
casymda.visualization.web_server.flatbuffers.Canvas.startCanvas(builder);
casymda.visualization.web_server.flatbuffers.Canvas.addContent(
builder,
contentOffset
);
return casymda.visualization.web_server.flatbuffers.Canvas.endCanvas(builder);
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Element = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Element}
*/
casymda.visualization.web_server.flatbuffers.Element.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Element=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Element}
*/
casymda.visualization.web_server.flatbuffers.Element.getRootAsElement = function (
bb,
obj
) {
return (
obj || new casymda.visualization.web_server.flatbuffers.Element()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Element=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Element}
*/
casymda.visualization.web_server.flatbuffers.Element.getSizePrefixedRootAsElement = function (
bb,
obj
) {
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
return (
obj || new casymda.visualization.web_server.flatbuffers.Element()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Element.prototype.id = function () {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset ? this.bb.readUint16(this.bb_pos + offset) : 0;
};
/**
* @returns {casymda.visualization.web_server.flatbuffers.ElementsUnion}
*/
casymda.visualization.web_server.flatbuffers.Element.prototype.elementType = function () {
var offset = this.bb.__offset(this.bb_pos, 6);
return offset
? /** @type {casymda.visualization.web_server.flatbuffers.ElementsUnion} */ (this.bb.readUint8(
this.bb_pos + offset
))
: casymda.visualization.web_server.flatbuffers.ElementsUnion.NONE;
};
/**
* @param {flatbuffers.Table} obj
* @returns {?flatbuffers.Table}
*/
casymda.visualization.web_server.flatbuffers.Element.prototype.element = function (
obj
) {
var offset = this.bb.__offset(this.bb_pos, 8);
return offset ? this.bb.__union(obj, this.bb_pos + offset) : null;
};
/**
* @param {flatbuffers.Builder} builder
*/
casymda.visualization.web_server.flatbuffers.Element.startElement = function (
builder
) {
builder.startObject(3);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} id
*/
casymda.visualization.web_server.flatbuffers.Element.addId = function (
builder,
id
) {
builder.addFieldInt16(0, id, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {casymda.visualization.web_server.flatbuffers.ElementsUnion} elementType
*/
casymda.visualization.web_server.flatbuffers.Element.addElementType = function (
builder,
elementType
) {
builder.addFieldInt8(
1,
elementType,
casymda.visualization.web_server.flatbuffers.ElementsUnion.NONE
);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} elementOffset
*/
casymda.visualization.web_server.flatbuffers.Element.addElement = function (
builder,
elementOffset
) {
builder.addFieldOffset(2, elementOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Element.endElement = function (
builder
) {
var offset = builder.endObject();
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} id
* @param {casymda.visualization.web_server.flatbuffers.ElementsUnion} elementType
* @param {flatbuffers.Offset} elementOffset
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Element.createElement = function (
builder,
id,
elementType,
elementOffset
) {
casymda.visualization.web_server.flatbuffers.Element.startElement(builder);
casymda.visualization.web_server.flatbuffers.Element.addId(builder, id);
casymda.visualization.web_server.flatbuffers.Element.addElementType(
builder,
elementType
);
casymda.visualization.web_server.flatbuffers.Element.addElement(
builder,
elementOffset
);
return casymda.visualization.web_server.flatbuffers.Element.endElement(
builder
);
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Photo = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Photo}
*/
casymda.visualization.web_server.flatbuffers.Photo.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Photo=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Photo}
*/
casymda.visualization.web_server.flatbuffers.Photo.getRootAsPhoto = function (
bb,
obj
) {
return (
obj || new casymda.visualization.web_server.flatbuffers.Photo()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Photo=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Photo}
*/
casymda.visualization.web_server.flatbuffers.Photo.getSizePrefixedRootAsPhoto = function (
bb,
obj
) {
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
return (
obj || new casymda.visualization.web_server.flatbuffers.Photo()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Photo.prototype.factor = function () {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset ? this.bb.readFloat32(this.bb_pos + offset) : 1.0;
};
/**
* @param {flatbuffers.Encoding=} optionalEncoding
* @returns {string|Uint8Array|null}
*/
casymda.visualization.web_server.flatbuffers.Photo.prototype.path = function (
optionalEncoding
) {
var offset = this.bb.__offset(this.bb_pos, 6);
return offset
? this.bb.__string(this.bb_pos + offset, optionalEncoding)
: null;
};
/**
* @param {flatbuffers.Builder} builder
*/
casymda.visualization.web_server.flatbuffers.Photo.startPhoto = function (
builder
) {
builder.startObject(2);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} factor
*/
casymda.visualization.web_server.flatbuffers.Photo.addFactor = function (
builder,
factor
) {
builder.addFieldFloat32(0, factor, 1.0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} pathOffset
*/
casymda.visualization.web_server.flatbuffers.Photo.addPath = function (
builder,
pathOffset
) {
builder.addFieldOffset(1, pathOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Photo.endPhoto = function (
builder
) {
var offset = builder.endObject();
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} factor
* @param {flatbuffers.Offset} pathOffset
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Photo.createPhoto = function (
builder,
factor,
pathOffset
) {
casymda.visualization.web_server.flatbuffers.Photo.startPhoto(builder);
casymda.visualization.web_server.flatbuffers.Photo.addFactor(builder, factor);
casymda.visualization.web_server.flatbuffers.Photo.addPath(
builder,
pathOffset
);
return casymda.visualization.web_server.flatbuffers.Photo.endPhoto(builder);
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Image = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Image}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Image=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Image}
*/
casymda.visualization.web_server.flatbuffers.Image.getRootAsImage = function (
bb,
obj
) {
return (
obj || new casymda.visualization.web_server.flatbuffers.Image()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Image=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Image}
*/
casymda.visualization.web_server.flatbuffers.Image.getSizePrefixedRootAsImage = function (
bb,
obj
) {
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
return (
obj || new casymda.visualization.web_server.flatbuffers.Image()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {casymda.visualization.web_server.flatbuffers.CanvasPosition=} obj
* @returns {casymda.visualization.web_server.flatbuffers.CanvasPosition|null}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.position = function (
obj
) {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset
? (
obj || new casymda.visualization.web_server.flatbuffers.CanvasPosition()
).__init(this.bb_pos + offset, this.bb)
: null;
};
/**
* @param {casymda.visualization.web_server.flatbuffers.Anchor=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Anchor|null}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.anchor = function (
obj
) {
var offset = this.bb.__offset(this.bb_pos, 6);
return offset
? (obj || new casymda.visualization.web_server.flatbuffers.Anchor()).__init(
this.bb_pos + offset,
this.bb
)
: null;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.photoId = function () {
var offset = this.bb.__offset(this.bb_pos, 8);
return offset ? this.bb.readUint16(this.bb_pos + offset) : 0;
};
/**
* @param {flatbuffers.Encoding=} optionalEncoding
* @returns {string|Uint8Array|null}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.path = function (
optionalEncoding
) {
var offset = this.bb.__offset(this.bb_pos, 10);
return offset
? this.bb.__string(this.bb_pos + offset, optionalEncoding)
: null;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Image.prototype.factor = function () {
var offset = this.bb.__offset(this.bb_pos, 12);
return offset ? this.bb.readFloat32(this.bb_pos + offset) : 1.0;
};
/**
* @param {flatbuffers.Builder} builder
*/
casymda.visualization.web_server.flatbuffers.Image.startImage = function (
builder
) {
builder.startObject(5);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} positionOffset
*/
casymda.visualization.web_server.flatbuffers.Image.addPosition = function (
builder,
positionOffset
) {
builder.addFieldStruct(0, positionOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} anchorOffset
*/
casymda.visualization.web_server.flatbuffers.Image.addAnchor = function (
builder,
anchorOffset
) {
builder.addFieldStruct(1, anchorOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} photoId
*/
casymda.visualization.web_server.flatbuffers.Image.addPhotoId = function (
builder,
photoId
) {
builder.addFieldInt16(2, photoId, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} pathOffset
*/
casymda.visualization.web_server.flatbuffers.Image.addPath = function (
builder,
pathOffset
) {
builder.addFieldOffset(3, pathOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} factor
*/
casymda.visualization.web_server.flatbuffers.Image.addFactor = function (
builder,
factor
) {
builder.addFieldFloat32(4, factor, 1.0);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Image.endImage = function (
builder
) {
var offset = builder.endObject();
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} positionOffset
* @param {flatbuffers.Offset} anchorOffset
* @param {number} photoId
* @param {flatbuffers.Offset} pathOffset
* @param {number} factor
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Image.createImage = function (
builder,
positionOffset,
anchorOffset,
photoId,
pathOffset,
factor
) {
casymda.visualization.web_server.flatbuffers.Image.startImage(builder);
casymda.visualization.web_server.flatbuffers.Image.addPosition(
builder,
positionOffset
);
casymda.visualization.web_server.flatbuffers.Image.addAnchor(
builder,
anchorOffset
);
casymda.visualization.web_server.flatbuffers.Image.addPhotoId(
builder,
photoId
);
casymda.visualization.web_server.flatbuffers.Image.addPath(
builder,
pathOffset
);
casymda.visualization.web_server.flatbuffers.Image.addFactor(builder, factor);
return casymda.visualization.web_server.flatbuffers.Image.endImage(builder);
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Text = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Text}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Text=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Text}
*/
casymda.visualization.web_server.flatbuffers.Text.getRootAsText = function (
bb,
obj
) {
return (
obj || new casymda.visualization.web_server.flatbuffers.Text()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {flatbuffers.ByteBuffer} bb
* @param {casymda.visualization.web_server.flatbuffers.Text=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Text}
*/
casymda.visualization.web_server.flatbuffers.Text.getSizePrefixedRootAsText = function (
bb,
obj
) {
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
return (
obj || new casymda.visualization.web_server.flatbuffers.Text()
).__init(bb.readInt32(bb.position()) + bb.position(), bb);
};
/**
* @param {casymda.visualization.web_server.flatbuffers.CanvasPosition=} obj
* @returns {casymda.visualization.web_server.flatbuffers.CanvasPosition|null}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.position = function (
obj
) {
var offset = this.bb.__offset(this.bb_pos, 4);
return offset
? (
obj || new casymda.visualization.web_server.flatbuffers.CanvasPosition()
).__init(this.bb_pos + offset, this.bb)
: null;
};
/**
* @param {casymda.visualization.web_server.flatbuffers.Anchor=} obj
* @returns {casymda.visualization.web_server.flatbuffers.Anchor|null}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.anchor = function (
obj
) {
var offset = this.bb.__offset(this.bb_pos, 6);
return offset
? (obj || new casymda.visualization.web_server.flatbuffers.Anchor()).__init(
this.bb_pos + offset,
this.bb
)
: null;
};
/**
* @param {flatbuffers.Encoding=} optionalEncoding
* @returns {string|Uint8Array|null}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.text = function (
optionalEncoding
) {
var offset = this.bb.__offset(this.bb_pos, 8);
return offset
? this.bb.__string(this.bb_pos + offset, optionalEncoding)
: null;
};
/**
* @param {flatbuffers.Encoding=} optionalEncoding
* @returns {string|Uint8Array|null}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.fill = function (
optionalEncoding
) {
var offset = this.bb.__offset(this.bb_pos, 10);
return offset
? this.bb.__string(this.bb_pos + offset, optionalEncoding)
: null;
};
/**
* @param {flatbuffers.Encoding=} optionalEncoding
* @returns {string|Uint8Array|null}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.fontFamily = function (
optionalEncoding
) {
var offset = this.bb.__offset(this.bb_pos, 12);
return offset
? this.bb.__string(this.bb_pos + offset, optionalEncoding)
: null;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Text.prototype.fontSize = function () {
var offset = this.bb.__offset(this.bb_pos, 14);
return offset ? this.bb.readUint8(this.bb_pos + offset) : 10;
};
/**
* @param {flatbuffers.Builder} builder
*/
casymda.visualization.web_server.flatbuffers.Text.startText = function (
builder
) {
builder.startObject(6);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} positionOffset
*/
casymda.visualization.web_server.flatbuffers.Text.addPosition = function (
builder,
positionOffset
) {
builder.addFieldStruct(0, positionOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} anchorOffset
*/
casymda.visualization.web_server.flatbuffers.Text.addAnchor = function (
builder,
anchorOffset
) {
builder.addFieldStruct(1, anchorOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} textOffset
*/
casymda.visualization.web_server.flatbuffers.Text.addText = function (
builder,
textOffset
) {
builder.addFieldOffset(2, textOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} fillOffset
*/
casymda.visualization.web_server.flatbuffers.Text.addFill = function (
builder,
fillOffset
) {
builder.addFieldOffset(3, fillOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} fontFamilyOffset
*/
casymda.visualization.web_server.flatbuffers.Text.addFontFamily = function (
builder,
fontFamilyOffset
) {
builder.addFieldOffset(4, fontFamilyOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} fontSize
*/
casymda.visualization.web_server.flatbuffers.Text.addFontSize = function (
builder,
fontSize
) {
builder.addFieldInt8(5, fontSize, 10);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Text.endText = function (builder) {
var offset = builder.endObject();
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} positionOffset
* @param {flatbuffers.Offset} anchorOffset
* @param {flatbuffers.Offset} textOffset
* @param {flatbuffers.Offset} fillOffset
* @param {flatbuffers.Offset} fontFamilyOffset
* @param {number} fontSize
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Text.createText = function (
builder,
positionOffset,
anchorOffset,
textOffset,
fillOffset,
fontFamilyOffset,
fontSize
) {
casymda.visualization.web_server.flatbuffers.Text.startText(builder);
casymda.visualization.web_server.flatbuffers.Text.addPosition(
builder,
positionOffset
);
casymda.visualization.web_server.flatbuffers.Text.addAnchor(
builder,
anchorOffset
);
casymda.visualization.web_server.flatbuffers.Text.addText(
builder,
textOffset
);
casymda.visualization.web_server.flatbuffers.Text.addFill(
builder,
fillOffset
);
casymda.visualization.web_server.flatbuffers.Text.addFontFamily(
builder,
fontFamilyOffset
);
casymda.visualization.web_server.flatbuffers.Text.addFontSize(
builder,
fontSize
);
return casymda.visualization.web_server.flatbuffers.Text.endText(builder);
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.CanvasPosition = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.CanvasPosition}
*/
casymda.visualization.web_server.flatbuffers.CanvasPosition.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.CanvasPosition.prototype.x = function () {
return this.bb.readUint16(this.bb_pos);
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.CanvasPosition.prototype.y = function () {
return this.bb.readUint16(this.bb_pos + 2);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} x
* @param {number} y
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.CanvasPosition.createCanvasPosition = function (
builder,
x,
y
) {
builder.prep(2, 4);
builder.writeInt16(y);
builder.writeInt16(x);
return builder.offset();
};
/**
* @constructor
*/
casymda.visualization.web_server.flatbuffers.Anchor = function () {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
/**
* @type {number}
*/
this.bb_pos = 0;
};
/**
* @param {number} i
* @param {flatbuffers.ByteBuffer} bb
* @returns {casymda.visualization.web_server.flatbuffers.Anchor}
*/
casymda.visualization.web_server.flatbuffers.Anchor.prototype.__init = function (
i,
bb
) {
this.bb_pos = i;
this.bb = bb;
return this;
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Anchor.prototype.x = function () {
return this.bb.readFloat32(this.bb_pos);
};
/**
* @returns {number}
*/
casymda.visualization.web_server.flatbuffers.Anchor.prototype.y = function () {
return this.bb.readFloat32(this.bb_pos + 4);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} x
* @param {number} y
* @returns {flatbuffers.Offset}
*/
casymda.visualization.web_server.flatbuffers.Anchor.createAnchor = function (
builder,
x,
y
) {
builder.prep(4, 8);
builder.writeFloat32(y);
builder.writeFloat32(x);
return builder.offset();
};
// Exports for Node.js and RequireJS
export { casymda };
import { casymda } from "./csa_generated.js";
console.log("flattbuffer deserializer loaded");
export async function deserialize_fb(response) {
const array = await response.arrayBuffer(); // blob?
const data = new Uint8Array(array);
const buffer = new flatbuffers.ByteBuffer(data);
const canvas = casymda.visualization.web_server.flatbuffers.Canvas.getRootAsCanvas(
buffer
);
const state = {};
const num_elements = canvas.contentLength();
for (let i = 0; i < num_elements; i++) {
const fb_element = canvas.content(i);
const fb_typ = fb_element.elementType();
const id_num = fb_element.id();
const element = {};
if (
fb_typ == casymda.visualization.web_server.flatbuffers.ElementsUnion.Photo
) {
const fb_photo = new casymda.visualization.web_server.flatbuffers.Photo();
fb_photo.__init(fb_element.element(fb_element).bb_pos, buffer);
element.type = "photo";
element.path = fb_photo.path();
element.factor = fb_photo.factor();
} else if (
fb_typ == casymda.visualization.web_server.flatbuffers.ElementsUnion.Image
) {
// image
const fb_image = new casymda.visualization.web_server.flatbuffers.Image();
fb_image.__init(fb_element.element(fb_element).bb_pos, buffer);
element.type = "image";
element.x = fb_image.position().x();
element.y = fb_image.position().y();
element.anchor = [fb_image.anchor().x(), fb_image.anchor().y()];
element.photo_id = fb_image.photoId();
element.path = fb_image.path();
element.factor = fb_image.factor();
} else if (
fb_typ == casymda.visualization.web_server.flatbuffers.ElementsUnion.Text
) {
// text
const fb_text = new casymda.visualization.web_server.flatbuffers.Text();
fb_text.__init(fb_element.element(fb_element).bb_pos, buffer);
element.type = "text";
element.x = fb_text.position().x();
element.y = fb_text.position().y();
element.anchor = [fb_text.anchor().x(), fb_text.anchor().y()];
element.text = fb_text.text();
element.fill = fb_text.fill();
element.font_family = fb_text.fontFamily();
element.font_size = fb_text.fontSize();
}
state[id_num.toString()] = element; // move to end
}
return state;
}
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Anchor(object):
__slots__ = ['_tab']
# Anchor
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Anchor
def X(self): return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
# Anchor
def Y(self): return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(4))
def CreateAnchor(builder, x, y):
builder.Prep(4, 8)
builder.PrependFloat32(y)
builder.PrependFloat32(x)
return builder.Offset()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Canvas(object):
__slots__ = ['_tab']
@classmethod
def GetRootAsCanvas(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Canvas()
x.Init(buf, n + offset)
return x
# Canvas
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Canvas
def Content(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4
x = self._tab.Indirect(x)
from casymda.visualization.web_server.flatbuffers.Element import Element
obj = Element()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Canvas
def ContentLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Canvas
def ContentIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
return o == 0
def CanvasStart(builder): builder.StartObject(1)
def CanvasAddContent(builder, content): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(content), 0)
def CanvasStartContentVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def CanvasEnd(builder): return builder.EndObject()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class CanvasPosition(object):
__slots__ = ['_tab']
# CanvasPosition
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# CanvasPosition
def X(self): return self._tab.Get(flatbuffers.number_types.Uint16Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
# CanvasPosition
def Y(self): return self._tab.Get(flatbuffers.number_types.Uint16Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(2))
def CreateCanvasPosition(builder, x, y):
builder.Prep(2, 4)
builder.PrependUint16(y)
builder.PrependUint16(x)
return builder.Offset()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Element(object):
__slots__ = ['_tab']
@classmethod
def GetRootAsElement(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Element()
x.Init(buf, n + offset)
return x
# Element
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Element
def Id(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
return 0
# Element
def ElementType(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Element
def Element(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
def ElementStart(builder): builder.StartObject(3)
def ElementAddId(builder, id): builder.PrependUint16Slot(0, id, 0)
def ElementAddElementType(builder, elementType): builder.PrependUint8Slot(1, elementType, 0)
def ElementAddElement(builder, element): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(element), 0)
def ElementEnd(builder): return builder.EndObject()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
class ElementsUnion(object):
NONE = 0
Photo = 1
Image = 2
Text = 3
import flatbuffers
from . import Anchor, Canvas, CanvasPosition, Element, Image, Photo, Text
from .ElementsUnion import ElementsUnion
def serialize(state: dict):
num_elements = len(state)
fb = flatbuffers.Builder(1024) # default decisive?
elements = []
i: str
e: dict
for i, e in state.items():
if e["type"] == "photo":
path = fb.CreateString(e["path"])
Photo.PhotoStart(fb)
Photo.PhotoAddFactor(fb, e["factor"])
Photo.PhotoAddPath(fb, path)
elementBody = Photo.PhotoEnd(fb)
elementType = ElementsUnion.Photo
elif e["type"] == "image":
path = fb.CreateString(e["path"])
Image.ImageStart(fb)
Image.ImageAddAnchor(fb, Anchor.CreateAnchor(fb, *e["anchor"]))
Image.ImageAddFactor(fb, e["factor"])
Image.ImageAddPath(fb, path)
Image.ImageAddPhotoId(fb, e["photo_id"])
Image.ImageAddPosition(
fb, CanvasPosition.CreateCanvasPosition(fb, e["x"], e["y"])
)
elementBody = Image.ImageEnd(fb)
elementType = ElementsUnion.Image
elif e["type"] == "text":
fill = fb.CreateString(e["fill"])
font = fb.CreateString(e["font_family"])
text = fb.CreateString(e["text"])
Text.TextStart(fb)
Text.TextAddAnchor(fb, Anchor.CreateAnchor(fb, *e["anchor"]))
Text.TextAddFill(fb, fill)
Text.TextAddFontFamily(fb, font)
Text.TextAddFontSize(fb, e["font_size"])
Text.TextAddPosition(
fb, CanvasPosition.CreateCanvasPosition(fb, e["x"], e["y"])
)
Text.TextAddText(fb, text)
elementBody = Text.TextEnd(fb)
elementType = ElementsUnion.Text
Element.ElementStart(fb)
Element.ElementAddId(fb, int(i))
Element.ElementAddElementType(fb, elementType)
Element.ElementAddElement(fb, elementBody)
element = Element.ElementEnd(fb)
elements.append(element)
Canvas.CanvasStartContentVector(fb, num_elements)
for elem in elements:
fb.PrependUOffsetTRelative(elem)
content = fb.EndVector(num_elements)
Canvas.CanvasStart(fb)
Canvas.CanvasAddContent(fb, content)
canvas = Canvas.CanvasEnd(fb)
fb.Finish(canvas)
binary = fb.Output()
return binary
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Image(object):
__slots__ = ['_tab']
@classmethod
def GetRootAsImage(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Image()
x.Init(buf, n + offset)
return x
# Image
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Image
def Position(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = o + self._tab.Pos
from casymda.visualization.web_server.flatbuffers.CanvasPosition import CanvasPosition
obj = CanvasPosition()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Image
def Anchor(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = o + self._tab.Pos
from casymda.visualization.web_server.flatbuffers.Anchor import Anchor
obj = Anchor()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Image
def PhotoId(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
return 0
# Image
def Path(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Image
def Factor(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
return 1.0
def ImageStart(builder): builder.StartObject(5)
def ImageAddPosition(builder, position): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(position), 0)
def ImageAddAnchor(builder, anchor): builder.PrependStructSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(anchor), 0)
def ImageAddPhotoId(builder, photoId): builder.PrependUint16Slot(2, photoId, 0)
def ImageAddPath(builder, path): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(path), 0)
def ImageAddFactor(builder, factor): builder.PrependFloat32Slot(4, factor, 1.0)
def ImageEnd(builder): return builder.EndObject()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Photo(object):
__slots__ = ['_tab']
@classmethod
def GetRootAsPhoto(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Photo()
x.Init(buf, n + offset)
return x
# Photo
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Photo
def Factor(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
return 1.0
# Photo
def Path(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def PhotoStart(builder): builder.StartObject(2)
def PhotoAddFactor(builder, factor): builder.PrependFloat32Slot(0, factor, 1.0)
def PhotoAddPath(builder, path): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(path), 0)
def PhotoEnd(builder): return builder.EndObject()
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: flatbuffers
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Text(object):
__slots__ = ['_tab']
@classmethod
def GetRootAsText(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Text()
x.Init(buf, n + offset)
return x
# Text
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Text
def Position(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = o + self._tab.Pos
from casymda.visualization.web_server.flatbuffers.CanvasPosition import CanvasPosition
obj = CanvasPosition()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Text
def Anchor(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = o + self._tab.Pos
from casymda.visualization.web_server.flatbuffers.Anchor import Anchor
obj = Anchor()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Text
def Text(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Text
def Fill(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Text
def FontFamily(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Text
def FontSize(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 10
def TextStart(builder): builder.StartObject(6)
def TextAddPosition(builder, position): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(position), 0)
def TextAddAnchor(builder, anchor): builder.PrependStructSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(anchor), 0)
def TextAddText(builder, text): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(text), 0)
def TextAddFill(builder, fill): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(fill), 0)
def TextAddFontFamily(builder, fontFamily): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(fontFamily), 0)
def TextAddFontSize(builder, fontSize): builder.PrependUint8Slot(5, fontSize, 10)
def TextEnd(builder): return builder.EndObject()
+2
-2
Metadata-Version: 2.1
Name: casymda
Version: 0.2.25
Summary: A simple DES modeling and simulation environment based on simpy, camunda modeler, and tkinter / pixi.js;
Version: 0.2.26
Summary: Simple DES modeling and simulation based on SimPy, BPMN, and pixi.js
Home-page: https://github.com/fladdimir/casymda

@@ -6,0 +6,0 @@ Author: FFC

@@ -5,3 +5,3 @@ """setuptools setup"""

VERSION = "0.2.25"
VERSION = "0.2.26"

@@ -39,4 +39,4 @@ try:

license="MIT",
description="A simple DES modeling and simulation environment"
+ " based on simpy, camunda modeler, and tkinter / pixi.js;",
description="Simple DES modeling and simulation"
+ " based on SimPy, BPMN, and pixi.js",
classifiers=[

@@ -43,0 +43,0 @@ "Development Status :: 3 - Alpha",

Metadata-Version: 2.1
Name: casymda
Version: 0.2.25
Summary: A simple DES modeling and simulation environment based on simpy, camunda modeler, and tkinter / pixi.js;
Version: 0.2.26
Summary: Simple DES modeling and simulation based on SimPy, BPMN, and pixi.js
Home-page: https://github.com/fladdimir/casymda

@@ -6,0 +6,0 @@ Author: FFC

@@ -0,8 +1,8 @@

simpy
xmltodict
Pillow
black==19.3b0
flask
flask-cors
black==19.3b0
numpy
networkx
numpy
simpy
xmltodict

@@ -53,4 +53,16 @@ MANIFEST.in

src/casymda/visualization/web_server/canvas_animation.html
src/casymda/visualization/web_server/csa_generated.js
src/casymda/visualization/web_server/flask_sim_server.py
src/casymda/visualization/web_server/flatbuffer_deserializer.js
src/casymda/visualization/web_server/pixijs_canvas_animation.js
src/casymda/visualization/web_server/sim_controller.py
src/casymda/visualization/web_server/sim_controller.py
src/casymda/visualization/web_server/flatbuffers/Anchor.py
src/casymda/visualization/web_server/flatbuffers/Canvas.py
src/casymda/visualization/web_server/flatbuffers/CanvasPosition.py
src/casymda/visualization/web_server/flatbuffers/Element.py
src/casymda/visualization/web_server/flatbuffers/ElementsUnion.py
src/casymda/visualization/web_server/flatbuffers/Image.py
src/casymda/visualization/web_server/flatbuffers/Photo.py
src/casymda/visualization/web_server/flatbuffers/Text.py
src/casymda/visualization/web_server/flatbuffers/__init__.py
src/casymda/visualization/web_server/flatbuffers/flatbuffer_serializer.py

@@ -1,1 +0,1 @@

__version__ = "0.2.25"
__version__ = "0.2.26"

@@ -12,4 +12,12 @@ """ process """

def __init__(self, env, name, xy=None, ways=None, process_time=1.0):
super().__init__(env, name, xy=xy, ways=ways)
def __init__(
self,
env,
name,
xy=None,
ways=None,
process_time=1.0,
block_capacity=float("inf"),
):
super().__init__(env, name, xy=xy, ways=ways, block_capacity=block_capacity)
self.process_time = process_time

@@ -16,0 +24,0 @@

"""calculates and caches information on shortest paths between locations on a tilemap"""
import math
import multiprocessing
import os
import pickle
from typing import Dict, Any, Tuple
import time
from typing import Any, Dict, Tuple
import networkx as nx
from networkx.classes.function import path_weight
from numpy import genfromtxt, vectorize

@@ -126,3 +131,10 @@

node_lookup_by_name = {value["name"]: key for key, value in nodes.items()}
print("starting to calculate tilemap paths - this may take a while..")
start_time = time.time()
matrix_dict = calculate_matrix_dict(graph, nodes_list)
print(
"time needed for shortest paths calculation [s]: "
+ str(time.time() - start_time)
)
return matrix_dict, node_lookup_by_name

@@ -136,3 +148,3 @@

for element in _get_elements_in_array(array):
if len(array[element]) is not 0 and array[element] not in ["0", "1"]:
if len(array[element]) != 0 and array[element] not in ["0", "1"]:
relevant_nodes[element] = {"name": array[element]}

@@ -142,4 +154,64 @@ return relevant_nodes

def euclidean_distance(a, b):
return math.sqrt((b[0] - a[0]) ** 2 + (b[1] - a[1]) ** 2)
def calculate_matrix_dict(graph, nodes):
# {from: {to1: {path:[...], length: X}, to2: ...}}
pairs = {} # all simple paths to calculate
for source_node in nodes:
for target_node in filter(lambda n: n is not source_node, nodes):
if target_node in pairs and source_node in pairs[target_node]:
continue
if source_node not in pairs:
pairs[source_node] = {}
pairs[source_node][target_node] = None
pairs_list_with_graph = [] # prepare data to be processed concurrently
for source_node in pairs:
for target_node in pairs[source_node]:
pairs_list_with_graph.append((source_node, target_node, graph))
mp_pool = multiprocessing.Pool(os.cpu_count()) # default
print("multiprocessing pool size: " + str(os.cpu_count()))
results_list = mp_pool.map(
calculate_path_and_length_both_directions_from_tuple,
pairs_list_with_graph,
)
result = { # initialize dict
source_node: {
target_node: None for target_node in nodes if source_node is not target_node
}
for source_node in nodes
}
for entry in results_list: # fill with results
for source_node in entry:
for target_node in entry[source_node]:
result[source_node][target_node] = entry[source_node][target_node]
return result
def calculate_path_and_length_both_directions_from_tuple(t):
return calculate_path_and_length_both_directions(*t) # node_1, node_2, graph
def calculate_path_and_length_both_directions(node_1, node_2, graph):
path = nx.astar_path(
graph,
node_1,
node_2,
heuristic=euclidean_distance,
weight="weight",
)
length = path_weight(graph, path, "weight")
result = {
node_1: {node_2: {"path": path, "length": length}},
node_2: {node_1: {"path": list(reversed(path)), "length": length}},
}
return result
def calculate_matrix_dict_alt(graph, nodes):
# {from: {to1: {path:[...], length: X}, to2: ...}}
result = {}

@@ -146,0 +218,0 @@ for source_node in nodes:

@@ -15,3 +15,5 @@ from casymda.visualization.canvas.scaled_canvas import ScaledCanvas

UPDATED_KEY = "__UPDATED__"
class WebCanvas(ScaledCanvas):

@@ -34,2 +36,4 @@ """

self.dict[UPDATED_KEY] = set() # set of all updated element_ids
def load_image_file(self, path):

@@ -45,2 +49,3 @@ potential_key = path

}
self.update_updated(self.element_id_counter)
self.photo_lookup[potential_key] = self.element_id_counter

@@ -61,2 +66,3 @@ return self.element_id_counter

}
self.update_updated(self.element_id_counter)
return self.element_id_counter

@@ -79,2 +85,3 @@

}
self.update_updated(self.element_id_counter)
return self.element_id_counter

@@ -95,2 +102,3 @@

self.dict[element_id] = entry
self.update_updated(element_id)
return True

@@ -104,2 +112,3 @@ return False

self.dict[element_id] = entry
self.update_updated(element_id)
return True

@@ -113,1 +122,6 @@ return False

return self.height
def update_updated(self, id: int):
updated_set = set(self.dict[UPDATED_KEY])
updated_set.add(id)
self.dict[UPDATED_KEY] = updated_set # trigger process synchro

@@ -1,4 +0,9 @@

console.log("animation_client.js loaded");
import {
initialize_animation,
animate_simulation,
} from "./pixijs_canvas_animation.js";
import { deserialize_fb } from "./flatbuffer_deserializer.js";
// constants
const BINARY_TRANSFER = true;
const BASE_URL = window.location.origin;

@@ -9,3 +14,5 @@ const START_URL = BASE_URL + "/start";

const STOP_URL = BASE_URL + "/stop";
const STATE_URL = BASE_URL + "/state";
const STATE_URL = BASE_URL + "/state" + (BINARY_TRANSFER ? "_fb" : "");
const PARTIAL_STATE_URL =
BASE_URL + "/partial_state" + (BINARY_TRANSFER ? "_fb" : "");
const RT_FACTOR_BASE_URL = BASE_URL + "/rt_factor?value=";

@@ -16,6 +23,4 @@

const ANIMATION_CANVAS_PARENT_ID = "animation_canvas_parent";
let ANIMATION_CANVAS_PARENT;
document.addEventListener('DOMContentLoaded', () => { ANIMATION_CANVAS_PARENT = document.querySelector("#" + ANIMATION_CANVAS_PARENT_ID); });

@@ -25,9 +30,16 @@ const running_timeouts = [];

let state = {};
let time_of_last_full_update = 0;
const TIME_BETWEEN_FULL_UPDATES_MS = 500;
const LOG_PERFORMANCE = true;
let num_requests = 0;
let num_animation_updates = 0;
let animation_update_times = [];
const LOG_INTERVAL_SEC = 2;
// HTTP HELPER
function post(url) {
const request = new XMLHttpRequest();
request.open("POST", url);
request.send();
const request = new XMLHttpRequest();
request.open("POST", url);
request.send();
}

@@ -37,72 +49,160 @@

async function start_simulation() {
stop_simulation();
stop_simulation();
// retrieve canvas dimensions first
const canvas_width = await get_canvas_width();
const canvas_height = await get_canvas_height();
// retrieve canvas dimensions first
const canvas_width = await get_canvas_width();
const canvas_height = await get_canvas_height();
post(START_URL);
initialize_animation(ANIMATION_CANVAS_PARENT, canvas_width, canvas_height);
post(START_URL);
initialize_animation(ANIMATION_CANVAS_PARENT, canvas_width, canvas_height);
state = {};
state = {};
stopped = false;
request_state_loop();
stopped = false;
setup_request_state_loop();
setup_animation_loop();
if (LOG_PERFORMANCE) log_performance_loop();
}
function request_state_loop() {
if (!stopped) running_timeouts.push(setTimeout(state_query, 20, [request_state_loop, animate_current_state]));
function log_performance_loop() {
let interval = window.setInterval(() => {
console.log("Reqests/sec: " + num_requests / LOG_INTERVAL_SEC);
console.log("Updates/sec: " + num_animation_updates / LOG_INTERVAL_SEC);
console.log(
"Average animation update time (ms): " +
animation_update_times.reduce((a, b) => a + b, 0) /
animation_update_times.length
);
num_requests = 0;
num_animation_updates = 0;
animation_update_times = [];
}, LOG_INTERVAL_SEC * 1000);
running_timeouts.push(interval);
}
async function state_query(callbacks) {
const response = await fetch(STATE_URL);
state = await response.json();
callbacks.forEach(callback => {
callback();
});
function setup_request_state_loop() {
let interval = window.setInterval(state_query, 35);
running_timeouts.push(interval);
}
async function state_query() {
if (Date.now() - time_of_last_full_update > TIME_BETWEEN_FULL_UPDATES_MS) {
// full update
time_of_last_full_update = Date.now();
await full_state_update();
} else {
// partial update
await partial_state_update();
}
num_requests++;
}
async function full_state_update() {
const response = await fetch_state();
state = await deserialize(response);
}
async function partial_state_update() {
const partial_response = await fetch_partial_state();
const partial_state = await deserialize(partial_response);
state = partial_update(state, partial_state);
}
async function fetch_partial_state() {
return fetch(PARTIAL_STATE_URL);
}
async function fetch_state() {
return fetch(STATE_URL);
}
async function deserialize(response) {
return BINARY_TRANSFER ? deserialize_binary(response) : response.json();
}
async function deserialize_binary(response) {
return deserialize_fb(response);
}
function partial_update(state, partial_state) {
return Object.assign(state, partial_state);
}
function setup_animation_loop() {
const minTime = 35;
let time = Date.now();
animate_current_state(); // could be further improved by info on actually updated partial state
time = Date.now() - time;
if (LOG_PERFORMANCE) animation_update_times.push(time);
let timeout = Math.max(minTime - time, 0);
let interval = window.setTimeout(setup_animation_loop, timeout);
running_timeouts.push(interval);
}
function animate_current_state() {
animate_simulation(state);
animate_simulation(state);
num_animation_updates++;
}
function pause_simulation() {
post(PAUSE_URL);
post(PAUSE_URL);
}
function resume_simulation() {
post(RESUME_URL);
post(RESUME_URL);
}
function stop_simulation() {
stopped = true;
post(STOP_URL);
while (running_timeouts.length > 0) {
clearTimeout(running_timeouts.pop());
}
stopped = true;
post(STOP_URL);
while (running_timeouts.length > 0) {
clearTimeout(running_timeouts.pop());
}
}
function speed_slider_changed_to(value) {
value = 101 - value; // 1 - 100
value /= 100; // 0.01 - 1
value = Math.pow(value, 3); // exponential speedup
set_rt_factor(value);
return value;
value = 101 - value; // 1 - 100
value /= 100; // 0.01 - 1
value = Math.pow(value, 3); // exponential speedup
set_rt_factor(value);
return value;
}
function set_rt_factor(value) {
post(RT_FACTOR_BASE_URL + String(value));
post(RT_FACTOR_BASE_URL + String(value));
}
async function get_canvas_height() {
const response = await fetch(CANVAS_HEIGHT_URL);
const content = await response.text();
return Number(content);
const response = await fetch(CANVAS_HEIGHT_URL);
const content = await response.text();
return Number(content);
}
async function get_canvas_width() {
const response = await fetch(CANVAS_WIDTH_URL);
const content = await response.text();
return Number(content);
const response = await fetch(CANVAS_WIDTH_URL);
const content = await response.text();
return Number(content);
}
// document interaction
document.addEventListener("DOMContentLoaded", () => {
ANIMATION_CANVAS_PARENT = document.querySelector(
"#" + ANIMATION_CANVAS_PARENT_ID
);
var speed_slider = document.getElementById("speed_slider");
var speed_label = document.getElementById("speed_label");
function change_factor(value) {
speed_label.innerHTML = (1 / speed_slider_changed_to(value)).toFixed(2);
}
change_factor(speed_slider.value);
speed_slider.oninput = function () {
change_factor(this.value);
};
});
window.start_simulation = start_simulation;
window.pause_simulation = pause_simulation;
window.resume_simulation = resume_simulation;
window.stop_simulation = stop_simulation;
console.log("animation_client.js loaded");

@@ -9,9 +9,10 @@ <!DOCTYPE html>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://pixijs.download/v5.0.4/pixi.min.js">// TODO: provide locally to run offline</script>
<script src="https://pixijs.download/v5.0.4/pixi.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<script src="lib-files/animation_client.js"></script>
<script src="lib-files/pixijs_canvas_animation.js"></script>
<script src="https://unpkg.com/flatbuffers@1.12.0/js/flatbuffers.js"></script>
<script type="module" src="lib-files/animation_client.js"></script>
</head>

@@ -32,13 +33,2 @@

<p>real-time factor: <span id="speed_label"></span></p>
<script>
var speed_slider = document.getElementById("speed_slider");
var speed_label = document.getElementById("speed_label");
function change_factor(value) {
speed_label.innerHTML = (1 / speed_slider_changed_to(value)).toFixed(2);
}
change_factor(speed_slider.value);
speed_slider.oninput = function () {
change_factor(this.value);
}
</script>
</div>

@@ -45,0 +35,0 @@ <hr>

@@ -8,3 +8,3 @@ import logging

)
from flask import Flask, request, send_file, send_from_directory
from flask import Flask, request, send_file, send_from_directory, Response
from flask_cors import CORS

@@ -32,3 +32,4 @@

print(
"starting flask server, app_dir: %s, flask_dir: %s" % (app_dir, flask_dir)
"starting flask server, port: %s, app_dir: %s, flask_dir: %s"
% (self.port, app_dir, flask_dir)
)

@@ -69,2 +70,16 @@

@app.route("/partial_state")
def get_partial_state():
return self.sim_controller.get_partial_state_dumps()
@app.route("/state_fb") # flatbuffers binary
def get_state_fb():
binary = self.sim_controller.get_state_dumps_fb()
return Response(binary, mimetype="binary/octet-stream")
@app.route("/partial_state_fb") # flatbuffers binary
def get_partial_state_fb():
binary = self.sim_controller.get_partial_state_dumps_fb()
return Response(binary, mimetype="binary/octet-stream")
@app.route("/start", methods=["POST"])

@@ -91,2 +106,3 @@ def start():

# set debug=False for IDE debugging
app.run(debug=True, threaded=False, port=self.port, host=self.host)

@@ -93,0 +109,0 @@

@@ -1,9 +0,6 @@

console.log("pixijs_canvas_animation.js loaded")
// pixijs-based animation
let type = "WebGL"
let type = "WebGL";
if (!PIXI.utils.isWebGLSupported()) {
type = "canvas"
type = "canvas";
}
PIXI.utils.sayHello(type)
PIXI.utils.sayHello(type);

@@ -14,31 +11,31 @@ let app, loader;

// create pixi canvas at certain element
function initialize_animation(parent_dom_element, width, height) {
export function initialize_animation(parent_dom_element, width, height) {
remove_old_canvas_elements(parent_dom_element);
app = new PIXI.Application({
width: width,
height: height,
backgroundColor: 0xffffff,
});
app.ticker.maxFPS = 30;
app.stage.sortableChildren = true;
parent_dom_element.appendChild(app.view);
remove_old_canvas_elements(parent_dom_element);
app = new PIXI.Application({
width: width, height: height,
backgroundColor: 0xFFFFFF
});
app.ticker.maxFPS = 30;
app.stage.sortableChildren = true;
parent_dom_element.appendChild(app.view);
loader = new PIXI.Loader();
loader = new PIXI.Loader();
animated_elements = {};
animated_elements = {};
}
// process given state
function animate_simulation(state) {
export function animate_simulation(state) {
// process all elements
for (var key in state) {
var state_element = state[key];
if (state_element.type === "text") _process_text(key, state_element);
else if (state_element.type === "photo") _process_resource(state_element);
// "photo" means image resource (to be loaded)
else if (state_element.type === "image") _process_image(key, state_element);
}
// process all elements
for (var key in state) {
var state_element = state[key];
if (state_element.type === "text") _process_text(key, state_element);
else if (state_element.type === "photo") _process_resource(state_element); // "photo" means image resource (to be loaded)
else if (state_element.type === "image") _process_image(key, state_element);
}
// also check if some animated elements are not present anymore
destroy_removed_elements(state);
// also check if some animated elements are not present anymore
destroy_removed_elements(state);
}

@@ -48,59 +45,75 @@

function _process_resource(state_element) {
// check if the resource is already loaded and start to load it if not
if (!(state_element.path in loader.resources) && !loader.loading) {
let element_to_load = loader.add(state_element.path, "files?filepath=" + state_element.path);
element_to_load.load();
}
// check if the resource is already loaded and start to load it if not
if (!(state_element.path in loader.resources) && !loader.loading) {
let element_to_load = loader.add(
state_element.path,
"files?filepath=" + state_element.path
);
element_to_load.load();
}
}
function _process_image(key, state_element) {
var pixi_sprite;
if (!(key in animated_elements) && state_element.path in loader.resources && loader.resources[state_element.path].isComplete) {
// create new sprite
pixi_sprite = new PIXI.Sprite.from("files?filepath=" + state_element.path);
pixi_sprite.scale.set((state_element.factor, state_element.factor))
pixi_sprite.anchor.set(state_element.anchor[0], state_element.anchor[1]);
pixi_sprite.zIndex = parseInt(key);
app.stage.addChild(pixi_sprite);
animated_elements[key] = pixi_sprite;
}
if (key in animated_elements) {
// update properties
pixi_sprite = animated_elements[key];
pixi_sprite.position.x = state_element.x;
pixi_sprite.position.y = state_element.y;
}
var pixi_sprite;
if (
!(key in animated_elements) &&
state_element.path in loader.resources &&
loader.resources[state_element.path].isComplete
) {
// create new sprite
pixi_sprite = new PIXI.Sprite.from("files?filepath=" + state_element.path);
pixi_sprite.scale.set((state_element.factor, state_element.factor));
pixi_sprite.anchor.set(state_element.anchor[0], state_element.anchor[1]);
pixi_sprite.zIndex = parseInt(key);
app.stage.addChild(pixi_sprite);
animated_elements[key] = pixi_sprite;
}
if (key in animated_elements) {
// update properties
pixi_sprite = animated_elements[key];
pixi_sprite.position.x = state_element.x;
pixi_sprite.position.y = state_element.y;
}
}
function _process_text(key, state_element) {
var pixi_text;
if (animated_elements[key] === undefined) {
// create text on canvas
pixi_text = new PIXI.Text("", { fontFamily: state_element.font_family, fontSize: state_element.font_size, fill: state_element.fill });
pixi_text.anchor.set(state_element.anchor[0], state_element.anchor[1]);
pixi_text.zIndex = parseInt(key);
app.stage.addChild(pixi_text);
animated_elements[key] = pixi_text;
}
// update properties: position / text
pixi_text = animated_elements[key];
pixi_text.position.x = state_element.x;
pixi_text.position.y = state_element.y;
pixi_text.text = state_element.text;
var pixi_text;
if (animated_elements[key] === undefined) {
// create text on canvas
pixi_text = new PIXI.Text("", {
fontFamily: state_element.font_family,
fontSize: state_element.font_size,
fill: state_element.fill,
});
pixi_text.anchor.set(state_element.anchor[0], state_element.anchor[1]);
pixi_text.zIndex = parseInt(key);
app.stage.addChild(pixi_text);
animated_elements[key] = pixi_text;
}
// update properties: position / text
pixi_text = animated_elements[key];
pixi_text.position.x = state_element.x;
pixi_text.position.y = state_element.y;
pixi_text.text = state_element.text;
}
function remove_old_canvas_elements(parent_dom_element) {
while (parent_dom_element && parent_dom_element.lastChild && parent_dom_element.lastChild.nodeName == "CANVAS") {
parent_dom_element.removeChild(parent_dom_element.lastChild);
}
while (
parent_dom_element &&
parent_dom_element.lastChild &&
parent_dom_element.lastChild.nodeName == "CANVAS"
) {
parent_dom_element.removeChild(parent_dom_element.lastChild);
}
}
function destroy_removed_elements(state) {
for (var anim_key in animated_elements) {
if (!(anim_key in state)) {
animated_elements[anim_key].destroy();
delete animated_elements[anim_key];
}
for (var anim_key in animated_elements) {
if (!(anim_key in state)) {
animated_elements[anim_key].destroy();
delete animated_elements[anim_key];
}
}
}
console.log("pixijs_canvas_animation.js loaded");

@@ -9,6 +9,9 @@ """runs simulation model in its own process"""

from casymda.environments.realtime_environment import SyncedFloat
from casymda.visualization.canvas import web_canvas
from .flatbuffers import flatbuffer_serializer
class RunnableSimulation:
""" abstract base class for simulations to be run via a SimController """
"""abstract base class for simulations to be run via a SimController"""

@@ -26,3 +29,3 @@ width: int

class SimController:
""" wraps RunnableSimulation to be controlled by a sim-server """
"""wraps RunnableSimulation to be controlled by a sim-server"""

@@ -72,4 +75,32 @@ def __init__(self, simulation: RunnableSimulation) -> None:

def get_state_dumps(self):
return json.dumps(self.shared_state.copy())
state = self._get_state_dumps()
return json.dumps(state)
def get_partial_state_dumps(self):
state = self._get_partial_state_dumps()
return json.dumps(state)
def get_state_dumps_fb(self):
state = self._get_state_dumps()
return flatbuffer_serializer.serialize(state)
def get_partial_state_dumps_fb(self):
state = self._get_partial_state_dumps()
return flatbuffer_serializer.serialize(state)
def _get_state_dumps(self):
self.shared_state[web_canvas.UPDATED_KEY] = set() # reset
state = self.shared_state.copy()
del state[web_canvas.UPDATED_KEY]
return state
def _get_partial_state_dumps(self):
updated_set = set(self.shared_state[web_canvas.UPDATED_KEY])
state = self.shared_state.copy()
self.shared_state[web_canvas.UPDATED_KEY] = set() # reset
del state[web_canvas.UPDATED_KEY]
for not_updated in state.keys() - updated_set:
del state[not_updated]
return state
def set_rt_factor(self, value: float):

@@ -76,0 +107,0 @@ return "set factor to " + str(self.factor.set_value(value))