Template:Heidelberg/deeprotein/DRIVER

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ // zip.workerScriptsPath = "zipjs/"; zip.workerScripts = {

   deflater: ['https://2017.igem.org/Template:Heidelberg/zipjs/ZWORKER?action=raw&ctype=text/javascript', 'https://2017.igem.org/Template:Heidelberg/zipjs/DEFLATE?action=raw&ctype=text/javascript'],
   inflater: ['https://2017.igem.org/Template:Heidelberg/zipjs/ZWORKER?action=raw&ctype=text/javascript', 'https://2017.igem.org/Template:Heidelberg/zipjs/INFLATE?action=raw&ctype=text/javascript']

}; function readManifest(entry, manifest) {

   return new Promise(function (resolve) {
       entry.getData(new zip.TextWriter(), function (text) {
           manifest = JSON.parse(text);
           resolve(manifest);
       }, function (progress) { });
   });

} function readEntry(entry, manifest, variables, name, encoder) {

   return new Promise(function (resolve) {
       var res = variables;
       entry.getData(new zip.BlobWriter(), function (blob) {
           var buf;
           var fileReader = new FileReader();
           fileReader.onload = function () {
               buf = this.result;
               var values = new Float32Array(buf);
               var shape = manifest[name].shape;
               res[name] = [values, shape];
               resolve(res);
           };
           fileReader.readAsArrayBuffer(blob);
       }, function (progress) { });
   });

} var DeeProteinContext = /** @class */ (function () {

   function DeeProteinContext(weights) {
       var _this = this;
       // Set up worker.
       this.worker = new Worker("https://2017.igem.org/Template:Heidelberg/deeprotein/DEEPROTEINWORKER?action=raw&ctype=text/javascript");
       // Set up event handlers:
       this.onload = function () {
           console.log("Weights have been loaded ...");
       };
       this.onloadfile = function () {
           console.log("Weights have been loaded from file ...");
       };
       this.onready = function () {
           console.log("DeeProtein is ready ...");
       };
       this.oninfer = function (res) {
           console.log("Inference yielded: ", res);
       };
       // Set up message handler:
       this.worker.onmessage = function (e) {
           var message = e.data;
           if (message.status == "infer") {
               _this.oninfer(message.result);
           }
           else if (message.status == "ready") {
               _this.onready();
           }
           else if (message.status == "load") {
               _this.onload();
               _this.hasWeights = true;
           }
           else if (message.status == "loadfile") {
               _this.onloadfile();
               _this.hasWeights = true;
           }
       };
       // If weights are given, load them:
       if (weights) {
           if (typeof (weights) === "string") {
               this.loadWeights(weights);
           }
           else if (typeof (weights) === "object") {
               this.loadWeightsFromFile(weights);
           }
       }
   }
   ;
   DeeProteinContext.prototype.ready = function () {
       this.worker.postMessage({
           command: "ready"
       });
   };
   DeeProteinContext.prototype.loadWeights = function (path, force) {
       if (force === void 0) { force = false; }
       if (!this.hasWeights || force) {
           this.worker.postMessage({
               command: "load",
               path: path
           });
       }
   };
   ;
   DeeProteinContext.prototype.loadWeightsFromFile = function (file, force) {
       var _this = this;
       if (force === void 0) { force = false; }
       if (!this.hasWeights || force) {
           this.readWeightFile(file).then(function (res) {
               _this.variables = res;
               _this.worker.postMessage({
                   command: "loadfile",
                   file: _this.variables
               });
           });
       }
   };
   ;
   DeeProteinContext.prototype.infer = function (sequence) {
       if (this.hasWeights) {
           this.worker.postMessage({
               command: "infer",
               sequence: sequence
           });
       }
       else {
           console.log("no weights!");
       }
   };
   DeeProteinContext.prototype.readWeightFile = function (file) {
       var that = this;
       return new Promise(function (resolve) {
           var encoder = new TextEncoder("utf-8");
           var manifest = {};
           var variables = {};
           // use a BlobReader to read the zip from a Blob object
           zip.createReader(new zip.BlobReader(file), function (reader) {
               // get all entries from the zip
               reader.getEntries(function (entries) {
                   if (entries.length) {
                       // get first entry content as text
                       readManifest(entries[0], manifest).then(function (res) {
                           var variablenames = Object.keys(res);
                           var last = Promise.resolve(variables);
                           var namemap = [];
                           for (var idx = 0; idx < variablenames.length; ++idx) {
                               var name_1 = variablenames[idx];
                               for (var idy = 1; idy < entries.length; ++idy) {
                                   if (res[name_1].filename == entries[idy].filename) {
                                       namemap.push(idy);
                                       break;
                                   }
                               }
                           }
                           var _loop_1 = function (idx) {
                               var entry = entries[namemap[idx]];
                               var entryname = entry.filename;
                               var name_2 = variablenames[idx];
                               last = last.then(function (varres) {
                                   console.log("Decompressing: ", entry.filename);
                                   return readEntry(entry, res, varres, name_2, encoder);
                               });
                           };
                           for (var idx = 0; idx < variablenames.length; ++idx) {
                               _loop_1(idx);
                           }
                           last.then(function (varfinal) {
                               reader.close(function () {
                                   resolve(varfinal);
                               });
                           });
                       });
                   }
               });
           }, function (error) {
               // onerror callback
               console.log(error);
           });
       });
   };
   return DeeProteinContext;

}()); // export everything: function newDeeProteinContext(weights) {

   return new DeeProteinContext(weights);

} window.newDeeProteinContext = newDeeProteinContext;

},{}]},{},[1]);