UNPKG

jmao

Version:

JS to ArrayBuffer to JS

1,694 lines (1,524 loc) 486 kB
(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})({"/home/johnny/projects/jmao/construct.js":[function(require,module,exports){ (function (Buffer){ var ndarray = require('ndarray') var from64 = require('js-base64').Base64.fromBase64 module.exports = construct function construct(ab, key){ if(key){ ab = ab.buffer } ab = Buffer._augment(new Int8Array(ab)) var buf = ab.buffer var header = {} var body = {} var x = 0; for(x; x < ab.length; x++){ if(ab[x] == 59) break } //console.log(ab.byteLength, x, from64(ab.toString('utf8', 0, x))) try{ header = JSON.parse(from64(ab.toString('utf8', 0, x))) }catch(err){ return } body = buf.slice(ab.byteLength - header.byteLength) || '' switch(header.type){ case 'Buffer': body = Buffer._augment(new Int8Array(body)) break; case 'String': case 'RegExp': // the strings body = ab.toString('utf8', x + 1, ab.length) if(header.type == 'RegExp'){ body = new RegExp(body.slice(1, body.length - 1)) } //body = new Function([], 'return new '+header.type+'(\''+body+'\')')() break; case 'Function': body = ab.toString('utf8', x + 1, ab.length - 1) body = new Function(header.arguments.split(','), body); break; case 'nil': // the misfits body = new Function([], 'return '+ header.name)() break; case 'Number': if(header.name) body = new Function([], 'return '+header.name)() else{ body = buf.slice(ab.byteLength - header.byteLength) || '' body = new Float64Array(body)[0] } break; case 'Object': var offset = 0 body = header.index.map(function(e,i){ var x = construct(body.slice(offset, offset + e)) offset += e return x }).reduce(function(p,e,i){ p[header.keys[i]] = e return p },{}) break; case 'Array': // the complex var offset = 0 body = header.index.map(function(e,i){ var x = construct(body.slice(offset, offset + e)) offset += e return x }) // console.log(index) break; default: // number, ndarray, typedArrays, ArrayBuffers, Buffers, all constructed from an ArrayBuffer if(header.type == 'ndarray'){ body = new Function(['x'], 'return new '+header.ndarrayType+'(x)')(body) body = new ndarray(body, header.shape.split(',')) } else if(header.type == 'Buffer'){ body = Buffer._augment(body) } else{ body = new Function(['x'], 'return new '+header.type+'(x)')(body) } break; } return body } }).call(this,require("buffer").Buffer) },{"buffer":"/usr/local/lib/node_modules/browserify/node_modules/buffer/index.js","js-base64":"/home/johnny/projects/jmao/node_modules/js-base64/base64.js","ndarray":"/home/johnny/projects/jmao/node_modules/ndarray/ndarray.js"}],"/home/johnny/projects/jmao/deconstruct.js":[function(require,module,exports){ (function (Buffer){ // metadata is base64 encoded JSON with a semi-colon terminator? // sure var toBase64 = require('js-base64').Base64.toBase64 module.exports = deconstruct function deconstruct(val, key){ var res = Object.create(null) res.meta = Object.create(null) res.meta.type = new String() var reg = new RegExp('[0-9]+(?=darray)') var reg = new RegExp('[0-9]+(?=d)') var nodeFlag = key//false var r try{ res.meta.type = val.constructor.name console.log(res.meta.type) if(res.meta.type == 'Object' || res.meta.type == 'Array'){ if(Array.isArray(val)){ res.meta.index = [] res.data = val.map(function(e,i){ var x = deconstruct(e) res.meta.index[i] = x.byteLength return x }) } else{ res.meta.keys = Object.keys(val) res.meta.index = [] res.data = res.meta.keys.map(function(e,i){ var r = deconstruct(val[e], e) res.meta.index.push(r.byteLength) return r }) } var blob = new Int8Array(res.meta.index.reduce(function(p,e){p+=e;return p},0)) var offset = 0; res.meta.index.forEach(function(e, i){ //console.log('eheheh', e, res.data[i].byteLength) blob.set(new Int8Array(res.data[i]), offset) //console.log('CONSTRUCTION GOING ON', '\n', construct(res.data[i])) //console.log('RECONSTRUCTION GOING ON', '\n', construct(blob.buffer.slice(offset, offset + e))) offset+=e }) res.data = blob.buffer } else if(res.meta.type == 'Number'){ if(val == Infinity || val == -Infinity){ // infinity or -infinity res.data = new ArrayBuffer(0) res.meta.name = String(val) } else{ var data = new Float64Array(1) data[0] = val res.data = data.buffer } } else if(res.meta.type == 'String'){ res.data = new Buffer(val).buffer } else if(r = reg.exec(res.meta.type)){ // ndarray! res.meta.dimensions = Number(r[0]) res.meta.shape = val.shape.join() res.meta.ndarrayType = val.data.constructor.name res.meta.type = 'ndarray' res.data = val.data.buffer } else if(res.meta.type == 'Function'){ var str = val.toString(); res.meta.name = val.name var regArgs = /\(([^)]+)\)/; res.meta.arguments = regArgs.exec(str)[1] var i = str.indexOf('{') var ii = str.lastIndexOf('}') res.data = new Buffer(str.slice(i+1, ii)).buffer } else if(res.meta.type == 'Buffer'){ nodeFlag = true res.meta.nodeFlag = true res.data = val } else if(Buffer.isBuffer(val)){ res.meta.type = 'Buffer' res.meta.nodeFlag = false res.data = val.buffer //deconstruct(val.buffer).data } else if(res.meta.type == 'RegExp'){ res.data = new Buffer(val.toString()).buffer } else{ // must me a TypedArray of ArrayBuffer if(val.buffer){ // TypedArray res.data = val.buffer } else{ res.data = val } } }catch(err){ // undefined or null or isNaN //console.log(err) res.meta.type = 'nil' res.meta.name = String(val) res.data = new ArrayBuffer(0) } // if(process.title == 'node' && !res.meta.nodeFlag){ // if(!res.meta.nodeFlag) res.data = new Buffer(new Int8Array(res.data)) // } res.meta.byteLength = res.data.byteLength var header = toBase64(JSON.stringify(res.meta)) + ';' var body = new Buffer(new Int8Array(res.data)) var buf = new Buffer(res.data.byteLength + header.length) buf.write(header, 0, header.length, 'utf8') body.copy(buf, header.length) // buf.copy(new Int8Array(res.data), header.length, buf.length - 1) // console.log(buf.toString()) return buf.buffer } }).call(this,require("buffer").Buffer) },{"buffer":"/usr/local/lib/node_modules/browserify/node_modules/buffer/index.js","js-base64":"/home/johnny/projects/jmao/node_modules/js-base64/base64.js"}],"/home/johnny/projects/jmao/index.js":[function(require,module,exports){ module.exports.construct = require('./construct') module.exports.deconstruct = require('./deconstruct') },{"./construct":"/home/johnny/projects/jmao/construct.js","./deconstruct":"/home/johnny/projects/jmao/deconstruct.js"}],"/home/johnny/projects/jmao/node_modules/js-base64/base64.js":[function(require,module,exports){ (function (global){ /* * $Id: base64.js,v 2.15 2014/04/05 12:58:57 dankogai Exp dankogai $ * * Licensed under the MIT license. * http://opensource.org/licenses/mit-license * * References: * http://en.wikipedia.org/wiki/Base64 */ (function(global) { 'use strict'; // existing version for noConflict() var _Base64 = global.Base64; var version = "2.1.5"; // if node.js, we use Buffer var buffer; if (typeof module !== 'undefined' && module.exports) { buffer = require('buffer').Buffer; } // constants var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var b64tab = function(bin) { var t = {}; for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i; return t; }(b64chars); var fromCharCode = String.fromCharCode; // encoder stuff var cb_utob = function(c) { if (c.length < 2) { var cc = c.charCodeAt(0); return cc < 0x80 ? c : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))) : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + fromCharCode(0x80 | ( cc & 0x3f))); } else { var cc = 0x10000 + (c.charCodeAt(0) - 0xD800) * 0x400 + (c.charCodeAt(1) - 0xDC00); return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) + fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) + fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) + fromCharCode(0x80 | ( cc & 0x3f))); } }; var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; var utob = function(u) { return u.replace(re_utob, cb_utob); }; var cb_encode = function(ccc) { var padlen = [0, 2, 1][ccc.length % 3], ord = ccc.charCodeAt(0) << 16 | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)), chars = [ b64chars.charAt( ord >>> 18), b64chars.charAt((ord >>> 12) & 63), padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63), padlen >= 1 ? '=' : b64chars.charAt(ord & 63) ]; return chars.join(''); }; var btoa = global.btoa ? function(b) { return global.btoa(b); } : function(b) { return b.replace(/[\s\S]{1,3}/g, cb_encode); }; var _encode = buffer ? function (u) { return (new buffer(u)).toString('base64') } : function (u) { return btoa(utob(u)) } ; var encode = function(u, urisafe) { return !urisafe ? _encode(u) : _encode(u).replace(/[+\/]/g, function(m0) { return m0 == '+' ? '-' : '_'; }).replace(/=/g, ''); }; var encodeURI = function(u) { return encode(u, true) }; // decoder stuff var re_btou = new RegExp([ '[\xC0-\xDF][\x80-\xBF]', '[\xE0-\xEF][\x80-\xBF]{2}', '[\xF0-\xF7][\x80-\xBF]{3}' ].join('|'), 'g'); var cb_btou = function(cccc) { switch(cccc.length) { case 4: var cp = ((0x07 & cccc.charCodeAt(0)) << 18) | ((0x3f & cccc.charCodeAt(1)) << 12) | ((0x3f & cccc.charCodeAt(2)) << 6) | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; return (fromCharCode((offset >>> 10) + 0xD800) + fromCharCode((offset & 0x3FF) + 0xDC00)); case 3: return fromCharCode( ((0x0f & cccc.charCodeAt(0)) << 12) | ((0x3f & cccc.charCodeAt(1)) << 6) | (0x3f & cccc.charCodeAt(2)) ); default: return fromCharCode( ((0x1f & cccc.charCodeAt(0)) << 6) | (0x3f & cccc.charCodeAt(1)) ); } }; var btou = function(b) { return b.replace(re_btou, cb_btou); }; var cb_decode = function(cccc) { var len = cccc.length, padlen = len % 4, n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) | (len > 3 ? b64tab[cccc.charAt(3)] : 0), chars = [ fromCharCode( n >>> 16), fromCharCode((n >>> 8) & 0xff), fromCharCode( n & 0xff) ]; chars.length -= [0, 0, 2, 1][padlen]; return chars.join(''); }; var atob = global.atob ? function(a) { return global.atob(a); } : function(a){ return a.replace(/[\s\S]{1,4}/g, cb_decode); }; var _decode = buffer ? function(a) { return (new buffer(a, 'base64')).toString() } : function(a) { return btou(atob(a)) }; var decode = function(a){ return _decode( a.replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' }) .replace(/[^A-Za-z0-9\+\/]/g, '') ); }; var noConflict = function() { var Base64 = global.Base64; global.Base64 = _Base64; return Base64; }; // export Base64 global.Base64 = { VERSION: version, atob: atob, btoa: btoa, fromBase64: decode, toBase64: encode, utob: utob, encode: encode, encodeURI: encodeURI, btou: btou, decode: decode, noConflict: noConflict }; // if ES5 is available, make Base64.extendString() available if (typeof Object.defineProperty === 'function') { var noEnum = function(v){ return {value:v,enumerable:false,writable:true,configurable:true}; }; global.Base64.extendString = function () { Object.defineProperty( String.prototype, 'fromBase64', noEnum(function () { return decode(this) })); Object.defineProperty( String.prototype, 'toBase64', noEnum(function (urisafe) { return encode(this, urisafe) })); Object.defineProperty( String.prototype, 'toBase64URI', noEnum(function () { return encode(this, true) })); }; } // that's it! })(this); if (this['Meteor']) { Base64 = global.Base64; // for normal export in Meteor.js } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"buffer":"/usr/local/lib/node_modules/browserify/node_modules/buffer/index.js"}],"/home/johnny/projects/jmao/node_modules/ndarray/ndarray.js":[function(require,module,exports){ (function (Buffer){ var iota = require("iota-array") var arrayMethods = [ "concat", "join", "slice", "toString", "indexOf", "lastIndexOf", "forEach", "every", "some", "filter", "map", "reduce", "reduceRight" ] var hasTypedArrays = ((typeof Float64Array) !== "undefined") var hasBuffer = ((typeof Buffer) !== "undefined") function compare1st(a, b) { return a[0] - b[0] } function order() { var stride = this.stride var terms = new Array(stride.length) var i for(i=0; i<terms.length; ++i) { terms[i] = [Math.abs(stride[i]), i] } terms.sort(compare1st) var result = new Array(terms.length) for(i=0; i<result.length; ++i) { result[i] = terms[i][1] } return result } function compileConstructor(dtype, dimension) { var className = ["View", dimension, "d", dtype].join("") if(dimension < 0) { className = "View_Nil" + dtype } var useGetters = (dtype === "generic") if(dimension === -1) { //Special case for trivial arrays var code = "function "+className+"(a){this.data=a;};\ var proto="+className+".prototype;\ proto.dtype='"+dtype+"';\ proto.index=function(){return -1};\ proto.size=0;\ proto.dimension=-1;\ proto.shape=proto.stride=proto.order=[];\ proto.lo=proto.hi=proto.transpose=proto.step=\ function(){return new "+className+"(this.data);};\ proto.get=proto.set=function(){};\ proto.pick=function(){return null};\ return function construct_"+className+"(a){return new "+className+"(a);}" var procedure = new Function(code) return procedure() } else if(dimension === 0) { //Special case for 0d arrays var code = "function "+className+"(a,d) {\ this.data = a;\ this.offset = d\ };\ var proto="+className+".prototype;\ proto.dtype='"+dtype+"';\ proto.index=function(){return this.offset};\ proto.dimension=0;\ proto.size=1;\ proto.shape=\ proto.stride=\ proto.order=[];\ proto.lo=\ proto.hi=\ proto.transpose=\ proto.step=function "+className+"_copy() {\ return new "+className+"(this.data,this.offset)\ };\ proto.pick=function "+className+"_pick(){\ return TrivialArray(this.data);\ };\ proto.valueOf=proto.get=function "+className+"_get(){\ return "+(useGetters ? "this.data.get(this.offset)" : "this.data[this.offset]")+ "};\ proto.set=function "+className+"_set(v){\ return "+(useGetters ? "this.data.set(this.offset,v)" : "this.data[this.offset]=v")+"\ };\ return function construct_"+className+"(a,b,c,d){return new "+className+"(a,d)}" var procedure = new Function("TrivialArray", code) return procedure(CACHED_CONSTRUCTORS[dtype][0]) } var code = ["'use strict'"] //Create constructor for view var indices = iota(dimension) var args = indices.map(function(i) { return "i"+i }) var index_str = "this.offset+" + indices.map(function(i) { return "this._stride" + i + "*i" + i }).join("+") code.push("function "+className+"(a,"+ indices.map(function(i) { return "b"+i }).join(",") + "," + indices.map(function(i) { return "c"+i }).join(",") + ",d){this.data=a") for(var i=0; i<dimension; ++i) { code.push("this._shape"+i+"=b"+i+"|0") } for(var i=0; i<dimension; ++i) { code.push("this._stride"+i+"=c"+i+"|0") } code.push("this.offset=d|0}", "var proto="+className+".prototype", "proto.dtype='"+dtype+"'", "proto.dimension="+dimension) //view.stride and view.shape var strideClassName = "VStride" + dimension + "d" + dtype var shapeClassName = "VShape" + dimension + "d" + dtype var props = {"stride":strideClassName, "shape":shapeClassName} for(var prop in props) { var arrayName = props[prop] code.push( "function " + arrayName + "(v) {this._v=v} var aproto=" + arrayName + ".prototype", "aproto.length="+dimension) var array_elements = [] for(var i=0; i<dimension; ++i) { array_elements.push(["this._v._", prop, i].join("")) } code.push( "aproto.toJSON=function " + arrayName + "_toJSON(){return [" + array_elements.join(",") + "]}", "aproto.valueOf=aproto.toString=function " + arrayName + "_toString(){return [" + array_elements.join(",") + "].join()}") for(var i=0; i<dimension; ++i) { code.push("Object.defineProperty(aproto,"+i+",{get:function(){return this._v._"+prop+i+"},set:function(v){return this._v._"+prop+i+"=v|0},enumerable:true})") } for(var i=0; i<arrayMethods.length; ++i) { if(arrayMethods[i] in Array.prototype) { code.push("aproto."+arrayMethods[i]+"=Array.prototype."+arrayMethods[i]) } } code.push(["Object.defineProperty(proto,'",prop,"',{get:function ", arrayName, "_get(){return new ", arrayName, "(this)},set: function ", arrayName, "_set(v){"].join("")) for(var i=0; i<dimension; ++i) { code.push("this._"+prop+i+"=v["+i+"]|0") } code.push("return v}})") } //view.size: code.push("Object.defineProperty(proto,'size',{get:function "+className+"_size(){\ return "+indices.map(function(i) { return "this._shape"+i }).join("*"), "}})") //view.order: if(dimension === 1) { code.push("proto.order=[0]") } else { code.push("Object.defineProperty(proto,'order',{get:") if(dimension < 4) { code.push("function "+className+"_order(){") if(dimension === 2) { code.push("return (Math.abs(this._stride0)>Math.abs(this._stride1))?[1,0]:[0,1]}})") } else if(dimension === 3) { code.push( "var s0=Math.abs(this._stride0),s1=Math.abs(this._stride1),s2=Math.abs(this._stride2);\ if(s0>s1){\ if(s1>s2){\ return [2,1,0];\ }else if(s0>s2){\ return [1,2,0];\ }else{\ return [1,0,2];\ }\ }else if(s0>s2){\ return [2,0,1];\ }else if(s2>s1){\ return [0,1,2];\ }else{\ return [0,2,1];\ }}})") } } else { code.push("ORDER})") } } //view.set(i0, ..., v): code.push( "proto.set=function "+className+"_set("+args.join(",")+",v){") if(useGetters) { code.push("return this.data.set("+index_str+",v)}") } else { code.push("return this.data["+index_str+"]=v}") } //view.get(i0, ...): code.push("proto.get=function "+className+"_get("+args.join(",")+"){") if(useGetters) { code.push("return this.data.get("+index_str+")}") } else { code.push("return this.data["+index_str+"]}") } //view.index: code.push( "proto.index=function "+className+"_index(", args.join(), "){return "+index_str+"}") //view.hi(): code.push("proto.hi=function "+className+"_hi("+args.join(",")+"){return new "+className+"(this.data,"+ indices.map(function(i) { return ["(typeof i",i,"!=='number'||i",i,"<0)?this._shape", i, ":i", i,"|0"].join("") }).join(",")+","+ indices.map(function(i) { return "this._stride"+i }).join(",")+",this.offset)}") //view.lo(): var a_vars = indices.map(function(i) { return "a"+i+"=this._shape"+i }) var c_vars = indices.map(function(i) { return "c"+i+"=this._stride"+i }) code.push("proto.lo=function "+className+"_lo("+args.join(",")+"){var b=this.offset,d=0,"+a_vars.join(",")+","+c_vars.join(",")) for(var i=0; i<dimension; ++i) { code.push( "if(typeof i"+i+"==='number'&&i"+i+">=0){\ d=i"+i+"|0;\ b+=c"+i+"*d;\ a"+i+"-=d}") } code.push("return new "+className+"(this.data,"+ indices.map(function(i) { return "a"+i }).join(",")+","+ indices.map(function(i) { return "c"+i }).join(",")+",b)}") //view.step(): code.push("proto.step=function "+className+"_step("+args.join(",")+"){var "+ indices.map(function(i) { return "a"+i+"=this._shape"+i }).join(",")+","+ indices.map(function(i) { return "b"+i+"=this._stride"+i }).join(",")+",c=this.offset,d=0,ceil=Math.ceil") for(var i=0; i<dimension; ++i) { code.push( "if(typeof i"+i+"==='number'){\ d=i"+i+"|0;\ if(d<0){\ c+=b"+i+"*(a"+i+"-1);\ a"+i+"=ceil(-a"+i+"/d)\ }else{\ a"+i+"=ceil(a"+i+"/d)\ }\ b"+i+"*=d\ }") } code.push("return new "+className+"(this.data,"+ indices.map(function(i) { return "a" + i }).join(",")+","+ indices.map(function(i) { return "b" + i }).join(",")+",c)}") //view.transpose(): var tShape = new Array(dimension) var tStride = new Array(dimension) for(var i=0; i<dimension; ++i) { tShape[i] = "a[i"+i+"]" tStride[i] = "b[i"+i+"]" } code.push("proto.transpose=function "+className+"_transpose("+args+"){"+ args.map(function(n,idx) { return n + "=(" + n + "===undefined?" + idx + ":" + n + "|0)"}).join(";"), "var a=this.shape,b=this.stride;return new "+className+"(this.data,"+tShape.join(",")+","+tStride.join(",")+",this.offset)}") //view.pick(): code.push("proto.pick=function "+className+"_pick("+args+"){var a=[],b=[],c=this.offset") for(var i=0; i<dimension; ++i) { code.push("if(typeof i"+i+"==='number'&&i"+i+">=0){c=(c+this._stride"+i+"*i"+i+")|0}else{a.push(this._shape"+i+");b.push(this._stride"+i+")}") } code.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}") //Add return statement code.push("return function construct_"+className+"(data,shape,stride,offset){return new "+className+"(data,"+ indices.map(function(i) { return "shape["+i+"]" }).join(",")+","+ indices.map(function(i) { return "stride["+i+"]" }).join(",")+",offset)}") //Compile procedure var procedure = new Function("CTOR_LIST", "ORDER", code.join("\n")) return procedure(CACHED_CONSTRUCTORS[dtype], order) } function arrayDType(data) { if(hasBuffer) { if(Buffer.isBuffer(data)) { return "buffer" } } if(hasTypedArrays) { switch(Object.prototype.toString.call(data)) { case "[object Float64Array]": return "float64" case "[object Float32Array]": return "float32" case "[object Int8Array]": return "int8" case "[object Int16Array]": return "int16" case "[object Int32Array]": return "int32" case "[object Uint8Array]": return "uint8" case "[object Uint16Array]": return "uint16" case "[object Uint32Array]": return "uint32" case "[object Uint8ClampedArray]": return "uint8_clamped" } } if(Array.isArray(data)) { return "array" } return "generic" } var CACHED_CONSTRUCTORS = { "float32":[], "float64":[], "int8":[], "int16":[], "int32":[], "uint8":[], "uint16":[], "uint32":[], "array":[], "uint8_clamped":[], "buffer":[], "generic":[] } ;(function() { for(var id in CACHED_CONSTRUCTORS) { CACHED_CONSTRUCTORS[id].push(compileConstructor(id, -1)) } }); function wrappedNDArrayCtor(data, shape, stride, offset) { if(data === undefined) { var ctor = CACHED_CONSTRUCTORS.array[0] return ctor([]) } else if(typeof data === "number") { data = [data] } if(shape === undefined) { shape = [ data.length ] } var d = shape.length if(stride === undefined) { stride = new Array(d) for(var i=d-1, sz=1; i>=0; --i) { stride[i] = sz sz *= shape[i] } } if(offset === undefined) { offset = 0 for(var i=0; i<d; ++i) { if(stride[i] < 0) { offset -= (shape[i]-1)*stride[i] } } } var dtype = arrayDType(data) var ctor_list = CACHED_CONSTRUCTORS[dtype] while(ctor_list.length <= d+1) { ctor_list.push(compileConstructor(dtype, ctor_list.length-1)) } var ctor = ctor_list[d+1] return ctor(data, shape, stride, offset) } module.exports = wrappedNDArrayCtor }).call(this,require("buffer").Buffer) },{"buffer":"/usr/local/lib/node_modules/browserify/node_modules/buffer/index.js","iota-array":"/home/johnny/projects/jmao/node_modules/ndarray/node_modules/iota-array/iota.js"}],"/home/johnny/projects/jmao/node_modules/ndarray/node_modules/iota-array/iota.js":[function(require,module,exports){ "use strict" function iota(n) { var result = new Array(n) for(var i=0; i<n; ++i) { result[i] = i } return result } module.exports = iota },{}],"/home/johnny/projects/jmao/node_modules/tape/index.js":[function(require,module,exports){ (function (process){ var defined = require('defined'); var createDefaultStream = require('./lib/default_stream'); var Test = require('./lib/test'); var createResult = require('./lib/results'); var through = require('through'); var canEmitExit = typeof process !== 'undefined' && process && typeof process.on === 'function' && process.browser !== true ; var canExit = typeof process !== 'undefined' && process && typeof process.exit === 'function' ; var nextTick = typeof setImmediate !== 'undefined' ? setImmediate : process.nextTick ; exports = module.exports = (function () { var harness; var lazyLoad = function () { return getHarness().apply(this, arguments); }; lazyLoad.only = function () { return getHarness().only.apply(this, arguments); }; lazyLoad.createStream = function (opts) { if (!opts) opts = {}; if (!harness) { var output = through(); getHarness({ stream: output, objectMode: opts.objectMode }); return output; } return harness.createStream(opts); }; return lazyLoad function getHarness (opts) { if (!opts) opts = {}; opts.autoclose = !canEmitExit; if (!harness) harness = createExitHarness(opts); return harness; } })(); function createExitHarness (conf) { if (!conf) conf = {}; var harness = createHarness({ autoclose: defined(conf.autoclose, false) }); var stream = harness.createStream({ objectMode: conf.objectMode }); var es = stream.pipe(conf.stream || createDefaultStream()); if (canEmitExit) { es.on('error', function (err) { harness._exitCode = 1 }); } var ended = false; stream.on('end', function () { ended = true }); if (conf.exit === false) return harness; if (!canEmitExit || !canExit) return harness; var _error; process.on('uncaughtException', function (err) { if (err && err.code === 'EPIPE' && err.errno === 'EPIPE' && err.syscall === 'write') return; _error = err throw err }) process.on('exit', function (code) { if (_error) { return } if (!ended) { var only = harness._results._only; for (var i = 0; i < harness._tests.length; i++) { var t = harness._tests[i]; if (only && t.name !== only) continue; t._exit(); } } harness.close(); process.exit(code || harness._exitCode); }); return harness; } exports.createHarness = createHarness; exports.Test = Test; exports.test = exports; // tap compat exports.test.skip = Test.skip; var exitInterval; function createHarness (conf_) { if (!conf_) conf_ = {}; var results = createResult(); if (conf_.autoclose !== false) { results.once('done', function () { results.close() }); } var test = function (name, conf, cb) { var t = new Test(name, conf, cb); test._tests.push(t); (function inspectCode (st) { st.on('test', function sub (st_) { inspectCode(st_); }); st.on('result', function (r) { if (!r.ok && typeof r !== 'string') test._exitCode = 1 }); })(t); results.push(t); return t; }; test._results = results; test._tests = []; test.createStream = function (opts) { return results.createStream(opts); }; var only = false; test.only = function (name) { if (only) throw new Error('there can only be one only test'); results.only(name); only = true; return test.apply(null, arguments); }; test._exitCode = 0; test.close = function () { results.close() }; return test; } }).call(this,require('_process')) },{"./lib/default_stream":"/home/johnny/projects/jmao/node_modules/tape/lib/default_stream.js","./lib/results":"/home/johnny/projects/jmao/node_modules/tape/lib/results.js","./lib/test":"/home/johnny/projects/jmao/node_modules/tape/lib/test.js","_process":"/usr/local/lib/node_modules/browserify/node_modules/process/browser.js","defined":"/home/johnny/projects/jmao/node_modules/tape/node_modules/defined/index.js","through":"/home/johnny/projects/jmao/node_modules/tape/node_modules/through/index.js"}],"/home/johnny/projects/jmao/node_modules/tape/lib/default_stream.js":[function(require,module,exports){ (function (process){ var through = require('through'); var fs = require('fs'); module.exports = function () { var line = ''; var stream = through(write, flush); return stream; function write (buf) { for (var i = 0; i < buf.length; i++) { var c = typeof buf === 'string' ? buf.charAt(i) : String.fromCharCode(buf[i]) ; if (c === '\n') flush(); else line += c; } } function flush () { if (fs.writeSync && /^win/.test(process.platform)) { try { fs.writeSync(1, line + '\n'); } catch (e) { stream.emit('error', e) } } else { try { console.log(line) } catch (e) { stream.emit('error', e) } } line = ''; } }; }).call(this,require('_process')) },{"_process":"/usr/local/lib/node_modules/browserify/node_modules/process/browser.js","fs":"/usr/local/lib/node_modules/browserify/lib/_empty.js","through":"/home/johnny/projects/jmao/node_modules/tape/node_modules/through/index.js"}],"/home/johnny/projects/jmao/node_modules/tape/lib/results.js":[function(require,module,exports){ (function (process){ var EventEmitter = require('events').EventEmitter; var inherits = require('inherits'); var through = require('through'); var resumer = require('resumer'); var inspect = require('object-inspect'); var nextTick = typeof setImmediate !== 'undefined' ? setImmediate : process.nextTick ; module.exports = Results; inherits(Results, EventEmitter); function Results () { if (!(this instanceof Results)) return new Results; this.count = 0; this.fail = 0; this.pass = 0; this._stream = through(); this.tests = []; } Results.prototype.createStream = function (opts) { if (!opts) opts = {}; var self = this; var output, testId = 0; if (opts.objectMode) { output = through(); self.on('_push', function ontest (t, extra) { if (!extra) extra = {}; var id = testId++; t.once('prerun', function () { var row = { type: 'test', name: t.name, id: id }; if (has(extra, 'parent')) { row.parent = extra.parent; } output.queue(row); }); t.on('test', function (st) { ontest(st, { parent: id }); }); t.on('result', function (res) { res.test = id; res.type = 'assert'; output.queue(res); }); t.on('end', function () { output.queue({ type: 'end', test: id }); }); }); self.on('done', function () { output.queue(null) }); } else { output = resumer(); output.queue('TAP version 13\n'); self._stream.pipe(output); } nextTick(function next() { var t; while (t = getNextTest(self)) { t.run(); if (!t.ended) return t.once('end', function(){ nextTick(next); }); } self.emit('done'); }); return output; }; Results.prototype.push = function (t) { var self = this; self.tests.push(t); self._watch(t); self.emit('_push', t); }; Results.prototype.only = function (name) { if (this._only) { self.count ++; self.fail ++; write('not ok ' + self.count + ' already called .only()\n'); } this._only = name; }; Results.prototype._watch = function (t) { var self = this; var write = function (s) { self._stream.queue(s) }; t.once('prerun', function () { write('# ' + t.name + '\n'); }); t.on('result', function (res) { if (typeof res === 'string') { write('# ' + res + '\n'); return; } write(encodeResult(res, self.count + 1)); self.count ++; if (res.ok) self.pass ++ else self.fail ++ }); t.on('test', function (st) { self._watch(st) }); }; Results.prototype.close = function () { var self = this; if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED')); self.closed = true; var write = function (s) { self._stream.queue(s) }; write('\n1..' + self.count + '\n'); write('# tests ' + self.count + '\n'); write('# pass ' + self.pass + '\n'); if (self.fail) write('# fail ' + self.fail + '\n') else write('\n# ok\n') self._stream.queue(null); }; function encodeResult (res, count) { var output = ''; output += (res.ok ? 'ok ' : 'not ok ') + count; output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : ''; if (res.skip) output += ' # SKIP'; else if (res.todo) output += ' # TODO'; output += '\n'; if (res.ok) return output; var outer = ' '; var inner = outer + ' '; output += outer + '---\n'; output += inner + 'operator: ' + res.operator + '\n'; if (has(res, 'expected') || has(res, 'actual')) { var ex = inspect(res.expected); var ac = inspect(res.actual); if (Math.max(ex.length, ac.length) > 65) { output += inner + 'expected:\n' + inner + ' ' + ex + '\n'; output += inner + 'actual:\n' + inner + ' ' + ac + '\n'; } else { output += inner + 'expected: ' + ex + '\n'; output += inner + 'actual: ' + ac + '\n'; } } if (res.at) { output += inner + 'at: ' + res.at + '\n'; } if (res.operator === 'error' && res.actual && res.actual.stack) { var lines = String(res.actual.stack).split('\n'); output += inner + 'stack:\n'; output += inner + ' ' + lines[0] + '\n'; for (var i = 1; i < lines.length; i++) { output += inner + lines[i] + '\n'; } } output += outer + '...\n'; return output; } function getNextTest (results) { if (!results._only) { return results.tests.shift(); } do { var t = results.tests.shift(); if (!t) continue; if (results._only === t.name) { return t; } } while (results.tests.length !== 0) } function has (obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } }).call(this,require('_process')) },{"_process":"/usr/local/lib/node_modules/browserify/node_modules/process/browser.js","events":"/usr/local/lib/node_modules/browserify/node_modules/events/events.js","inherits":"/home/johnny/projects/jmao/node_modules/tape/node_modules/inherits/inherits_browser.js","object-inspect":"/home/johnny/projects/jmao/node_modules/tape/node_modules/object-inspect/index.js","resumer":"/home/johnny/projects/jmao/node_modules/tape/node_modules/resumer/index.js","through":"/home/johnny/projects/jmao/node_modules/tape/node_modules/through/index.js"}],"/home/johnny/projects/jmao/node_modules/tape/lib/test.js":[function(require,module,exports){ (function (process,__dirname){ var Stream = require('stream'); var deepEqual = require('deep-equal'); var defined = require('defined'); var path = require('path'); var inherits = require('inherits'); var EventEmitter = require('events').EventEmitter; var has = require('has'); module.exports = Test; var nextTick = typeof setImmediate !== 'undefined' ? setImmediate : process.nextTick ; inherits(Test, EventEmitter); var getTestArgs = function (name_, opts_, cb_) { var name = '(anonymous)'; var opts = {}; var cb; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; var t = typeof arg; if (t === 'string') { name = arg; } else if (t === 'object') { opts = arg || opts; } else if (t === 'function') { cb = arg; } } return { name: name, opts: opts, cb: cb }; }; function Test (name_, opts_, cb_) { if (! (this instanceof Test)) { return new Test(name_, opts_, cb_); } var args = getTestArgs(name_, opts_, cb_); this.readable = true; this.name = args.name || '(anonymous)'; this.assertCount = 0; this.pendingCount = 0; this._skip = args.opts.skip || false; this._plan = undefined; this._cb = args.cb; this._progeny = []; this._ok = true; for (prop in this) { this[prop] = (function bind(self, val) { if (typeof val === 'function') { return function bound() { return val.apply(self, arguments); }; } else return val; })(this, this[prop]); } } Test.prototype.run = function () { if (!this._cb || this._skip) { return this._end(); } this.emit('prerun'); try { this._cb(this); } catch (err) { this.error(err); this._end(); return; } this.emit('run'); }; Test.prototype.test = function (name, opts, cb) { var self = this; var t = new Test(name, opts, cb); this._progeny.push(t); this.pendingCount++; this.emit('test', t); t.on('prerun', function () { self.assertCount++; }) if (!self._pendingAsserts()) { nextTick(function () { self._end(); }); } nextTick(function() { if (!self._plan && self.pendingCount == self._progeny.length) { self._end(); } }); }; Test.prototype.comment = function (msg) { this.emit('result', msg.trim().replace(/^#\s*/, '')); }; Test.prototype.plan = function (n) { this._plan = n; this.emit('plan', n); }; Test.prototype.end = function (err) { var self = this; if (arguments.length >= 1) { this.ifError(err); } if (this.calledEnd) { this.fail('.end() called twice'); } this.calledEnd = true; this._end(); }; Test.prototype._end = function (err) { var self = this; if (this._progeny.length) { var t = this._progeny.shift(); t.on('end', function () { self._end() }); t.run(); return; } if (!this.ended) this.emit('end'); var pendingAsserts = this._pendingAsserts(); if (!this._planError && this._plan !== undefined && pendingAsserts) { this._planError = true; this.fail('plan != count', { expected : this._plan, actual : this.assertCount }); } this.ended = true; }; Test.prototype._exit = function () { if (this._plan !== undefined && !this._planError && this.assertCount !== this._plan) { this._planError = true; this.fail('plan != count', { expected : this._plan, actual : this.assertCount, exiting : true }); } else if (!this.ended) { this.fail('test exited without ending', { exiting: true }); } }; Test.prototype._pendingAsserts = function () { if (this._plan === undefined) { return 1; } else { return this._plan - (this._progeny.length + this.assertCount); } }; Test.prototype._assert = function assert (ok, opts) { var self = this; var extra = opts.extra || {}; var res = { id : self.assertCount ++, ok : Boolean(ok), skip : defined(extra.skip, opts.skip), name : defined(extra.message, opts.message, '(unnamed assert)'), operator : defined(extra.operator, opts.operator) }; if (has(opts, 'actual') || has(extra, 'actual')) { res.actual = defined(extra.actual, opts.actual); } if (has(opts, 'expected') || has(extra, 'expected')) { res.expected = defined(extra.expected, opts.expected); } this._ok = Boolean(this._ok && ok); if (!ok) { res.error = defined(extra.error, opts.error, new Error(res.name)); } var e = new Error('exception'); var err = (e.stack || '').split('\n'); var dir = path.dirname(__dirname) + '/'; for (var i = 0; i < err.length; i++) { var m = /^\s*\bat\s+(.+)/.exec(err[i]); if (!m) continue; var s = m[1].split(/\s+/); var filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[1]); if (!filem) { filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[3]); if (!filem) continue; } if (filem[1].slice(0, dir.length) === dir) continue; res.functionName = s[0]; res.file = filem[1]; res.line = Number(filem[2]); if (filem[3]) res.column = filem[3]; res.at = m[1]; break; } self.emit('result', res); var pendingAsserts = self._pendingAsserts(); if (!pendingAsserts) { if (extra.exiting) { self._end(); } else { nextTick(function () { self._end(); }); } } if (!self._planError && pendingAsserts < 0) { self._planError = true; self.fail('plan != count', { expected : self._plan, actual : self._plan - pendingAsserts }); } }; Test.prototype.fail = function (msg, extra) { this._assert(false, { message : msg, operator : 'fail', extra : extra }); }; Test.prototype.pass = function (msg, extra) { this._assert(true, { message : msg, operator : 'pass', extra : extra }); }; Test.prototype.skip = function (msg, extra) { this._assert(true, { message : msg, operator : 'skip', skip : true, extra : extra }); }; Test.prototype.ok = Test.prototype['true'] = Test.prototype.assert = function (value, msg, extra) { this._assert(value, { message : msg, operator : 'ok', expected : true, actual : value, extra : extra }); }; Test.prototype.notOk = Test.prototype['false'] = Test.prototype.notok = function (value, msg, extra) { this._assert(!value, { message : msg, operator : 'notOk', expected : false, actual : value, extra : extra }); }; Test.prototype.error = Test.prototype.ifError = Test.prototype.ifErr = Test.prototype.iferror = function (err, msg, extra) { this._assert(!err, { message : defined(msg, String(err)), operator : 'error', actual : err, extra : extra }); }; Test.prototype.equal = Test.prototype.equals = Test.prototype.isEqual = Test.prototype.is = Test.prototype.strictEqual = Test.prototype.strictEquals = function (a, b, msg, extra) { this._assert(a === b, { message : defined(msg, 'should be equal'), operator : 'equal', actual : a, expected : b, extra : extra }); }; Test.prototype.notEqual = Test.prototype.notEquals = Test.prototype.notStrictEqual = Test.prototype.notStrictEquals = Test.prototype.isNotEqual = Test.prototype.isNot = Test.prototype.not = Test.prototype.doesNotEqual = Test.prototype.isInequal = function (a, b, msg, extra) { this._assert(a !== b, { message : defined(msg, 'should not be equal'), operator : 'notEqual', actual : a, notExpected : b, extra : extra }); }; Test.prototype.deepEqual = Test.prototype.deepEquals = Test.prototype.isEquivalent = Test.prototype.same = function (a, b, msg, extra) { this._assert(deepEqual(a, b, { strict: true }), { message : defined(msg, 'should be equivalent'), operator : 'deepEqual', actual : a, expected : b, extra : extra }); }; Test.prototype.deepLooseEqual = Test.prototype.looseEqual = Test.prototype.looseEquals = function (a, b, msg, extra) { this._assert(deepEqual(a, b), { message : defined(msg, 'should be equivalent'), operator : 'deepLooseEqual', actual : a, expected : b, extra : extra }); }; Test.prototype.notDeepEqual = Test.prototype.notEquivalent = Test.prototype.notDeeply = Test.prototype.notSame = Test.prototype.isNotDeepEqual = Test.prototype.isNotDeeply = Test.prototype.isNotEquivalent = Test.prototype.isInequivalent = function (a, b, msg, extra) { this._assert(!deepEqual(a, b, { strict: true }), { message : defined(msg, 'should not be equivalent'), operator : 'notDeepEqual', actual : a, notExpected : b, extra : extra }); }; Test.prototype.notDeepLooseEqual = Test.prototype.notLooseEqual = Test.prototype.notLooseEquals = function (a, b, msg, extra) { this._assert(deepEqual(a, b), { message : defined(msg, 'should be equivalent'), operator : 'notDeepLooseEqual', actual : a, expected : b, extra : extra }); }; Test.prototype['throws'] = function (fn, expected, msg, extra) { if (typeof expected === 'string') { msg = expected; expected = undefined; } var caught = undefined; try { fn(); } catch (err) { caught = { error : err }; var message = err.message; delete err.message; err.message = message; } var passed = caught; if (expected instanceof RegExp) { passed = expected.test(caught && caught.error); expected = String(expected); } this._assert(passed, { message : defined(msg, 'should throw'), operator : 'throws', actual : caught && caught.error, expected : expected, error: !passed && caught && caught.error, extra : extra }); }; Test.prototype.doesNotThrow = function (fn, expected, msg, extra) { if (typeof expected === 'string') { msg = expected; expected = undefined; } var caught = undefined; try { fn(); } catch (err) { caught = { error : err }; } this._assert(!caught, { message : defined(msg, 'should not throw'), operator : 'throws', actual : caught && caught.error, expected : expected, error : caught && caught.error, extra : extra }); }; Test.skip = function (name_, _opts, _cb) { var args = getTestArgs.apply(null, arguments); args.opts.skip = true; return Test(args.name, args.opts, args.cb); }; // vim: set softtabstop=4 shiftwidth=4: }).call(this,require('_process'),"/node_modules/tape/lib") },{"_process":"/usr/local/lib/node_modules/browserify/node_mod